ksaitoの日記

日々試したことの覚え書き

JenkinsfileとMakefileの統合

Jenkinsfileをメンテナンスし続ける自信がないので、Jenkinsfileをパイプラインの定義のみで使うようにしました。 定義したパイプラインの各ステップは、Makefileのターゲットに対応させるとメンテナンスし易くなります。

パイプラインの定義

パイプラインは、下記のように定義します。

ステージと同じ名前のターゲットをMakefileに定義すると、開発するときにmakeコマンドで実行した処理がJenkinsのビルドでも同じように利用されます。

makeコマンドをantやmavenなどに入れ替えれば、他かの開発でも応用が利きます。

ステージ 処理
setup ビルドに必要な環境をセットアップ
build ビルド
test テストは、単体テスト結合テストを並列で実行
deploy デプロイ

Jenkinsのパイプラインジョブで実行するとこんな感じになります。

f:id:ksaito11:20171103175600p:plain

パイプライン

Jenkinsfileの定義

pipeline {                              
    agent any                           
    environment {                       
        branch = 'master'               
        scmUrl = 'git@bitbucket.org:***/***.git'                       
    }                                   
    stages {                            
        stage('setup') {                
            steps {                     
                sh: 'make setup'
            }                           
        }                               
        stage('checkout git') {         
            steps {                     
                print "checkout"        
                git credentialsId: credentialId, url: scmUrl                    

            }                           
        }
        stage('build') {
            steps {
                sh 'make'
            }
        }
        stage ('test') {
            steps {
                parallel (
                    "unit tests": { sh 'make test' },
                    "integration tests": { sh 'make integration-test' }
                )
            }
        }
        stage('deploy'){
            steps {
                sh 'make deploy'
            }
        }
    }
}

Makefileの定義

all: build                              

build:                                  
        echo build                      

test:                                   
        echo test                       

integration-test:                       
        echo integration-test           

deploy:                                 
        echo deploy                     

setup:                                  
        echo setup