susukinosu

エンジニアリングって、何だよ

Jenkinsで環境毎に処理を分ける(Declarative Pipeline)

Jenkinsの真髄はJenkinsfileにあると思う昨今

ジャバとめちゃ久しぶりに戯れた時、Jenkinsおじでちょっと試したので記録。

(とにかくジャバと戯れたい方はここじゃなくてこっち↓)

arigato-java.download

複数のAWSアカウントがあった場合

pom.xmlに、DEVやらSTGやらの profile を用意しておく。

デプロイ先環境毎によしなにビルドとデプロイさせる

Jenkinsの環境変数に、デプロイ先環境(DEPLOY_TARGET とか)を持たせておく。

pipeline {
  agent any
  stages{
    stage('Build application') {
      steps {
        sh "mvn clean package -P ${DEPLOY_TARGET}"
      }
    }
    stage('Deploy to DEV') {
      when {
        environment name: 'DEPLOY_TARGET', value: 'DEV'
      }
      steps {
        どこかへデプロイする処理(CodeDeployとか)
      }
    }
    stage('Deploy to STG') {
      when {
        environment name: 'DEPLOY_TARGET', value: 'STG'
      }
      steps {
        どこかへデプロイする処理(CodeDeployとか)
      }
    }
  }
}

実際にガッツリ使う際はpost Sectionやenvironment, options Directiveとかも合わせて使うと良い。

Jenkinsfileで書かずフリースタイルジョブを延々と作り続けると、

ある種の職人芸が生まれてしまったりメンテナンスがめんどい場合もあるので、

(読み書きができれば)管理しやすそうなJenkinsfileのほうが、チームでやるなら良さげ。

前までのScripted Pipelineに比べると、

Declarative Pipelineはめちゃ書きやすい気がする(公式も推奨)ので、使うならそちら。

参考

jenkins.io