シェルスクリプトマガジン

特集2 JenkinsによるCI/CD(Vol.73記載)

著者:長久保 篤、酒井 利治

ソフトウエアの開発・生産性を高めるには「CI(Continuous Integration)/CD(Continuous Delivery)」が不可欠となっています。本特集では、CI/CDとは何か、オープンソースソフトウエアの「Jenkins」を用いてCI/CD環境を構築する方法を分かりやすく解説します。

シェルスクリプトマガジン Vol.73は以下のリンク先でご購入できます。

図9 Dockerfileの内容

FROM jenkins/jenkins:2.277.4-lts-jdk11
USER root
RUN apt update && apt install -y apt-transport-https \
      ca-certificates curl gnupg2 \
      software-properties-common
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN apt-key fingerprint 0EBFCD88
RUN add-apt-repository \
      "deb [arch=amd64] https://download.docker.com/linux/debian \
      $(lsb_release -cs) stable"
RUN apt update && apt install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean:1.24.6 docker-workflow:1.26"

図21 Jenkinsfileの内容

pipeline {
  agent any
  stages {
    stage('ビルド') {
      steps {
        sh 'mvn -B -DskipTest clean package'
      }
    }
    stage('テスト') {
      steps {
        sh 'mvn -B test'
      }
    }
    stage('デプロイ') {
      steps {
        sh './jenkins/scripts/deliver.sh'
      }
    }
  }
}

図41 説明した内容を反映したJenkinsfile

pipeline {
  agent {
    label 'mvn3'
  }
  stages {
    stage('ビルド') {
      steps {
        sh 'mvn -B -DskipTest clean package'
        archiveArtifacts artifacts: 'target/*.jar'
      }
    }
    stage('テスト') {
      steps {
        sh 'mvn -B test'
      }
      post {
        always {
          junit 'target/surefire-reports/*.xml'
        }
      }
    }
    stage('デプロイ') {
      when {
        branch 'master'
        beforeInput true
      }
      input {
        message "デプロイしますか?"
      }
      steps {
        sh './jenkins/scripts/deliver.sh'
      }
    }
  }
  post {
    failure {
      emailext (
        subject: "失敗: プロジェクト '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",
        body: """次のページでコンソールの出力を確認してください:
        ${env.BUILD_URL}""",
        recipientProviders: [developers()]
      )
    }
  }
}