JenkinsパイプラインによるCI/CD自動化設定ガイド

Spring Bootプロジェクトのパイプライン設定

パラメータ化ビルド設定

Jenkinsでは、ビルドパラメータを柔軟に設定できます。ビルド実行時にブランチ選択、環境選択、カスタムパラメータの指定などが可能です。

パイプライン設定

以下にSpring Bootプロジェクト用のJenkinsパイプライン例を示します。ビルド環境クリーンアップ、ソースコード取得、ビルド、成果物収集、Dockerイメージ作成、Rancherへのデプロイまでを自動化しています。


pipeline {
    agent {
        kubernetes {
            label 'jenkins-worker-java'
        }
    }

    parameters {
        gitParameter branchFilter: 'origin/(.*)', defaultValue: 'main', name: 'TARGET_BRANCH', type: 'PT_BRANCH', description:'ビルド対象のブランチを選択してください'
        choice(name: 'BASE_IMAGE', choices: ['openjdk17.0.2'], description: 'ベースイメージタグ')
        choice(name: 'ENVIRONMENT', choices: ['staging'],description: 'デプロイ環境を選択')
        string(name: 'BUILD_PARAMS', defaultValue: 'none', description: 'ビルドパラメータ(デフォルトは環境と同じ)')
        choice(name: 'DEPLOY_TO_RANCHER', choices: ['YES','NO'],description: 'Rancherにデプロイするか')
        string(name: 'DB_PASSWORD_PATH', defaultValue:'none', description: 'DBパスワードファイルパス(noneの場合はデフォルトを使用)')
    }
    
    environment {
        PROJECT_NAME = "payment-gateway"
        BUILD_PARAMETER="${params.BUILD_PARAMS}"
        DEPLOY_FLAG = "${params.DEPLOY_TO_RANCHER}"
        NAMESPACE = "${params.ENVIRONMENT}"
        REPO_NAME = "123456789012.dkr.ap-northeast-1.amazonaws.com/payment-gateway"
        S3_BUCKET = "artifacts-dev"
        TARGET_BRANCH = "${params.TARGET_BRANCH}"
        DB_PASSWORD='dev-db-pass'
        BASE_IMAGE="${params.BASE_IMAGE}"
    }
    
    stages {
        stage('ワークスペースのクリーンアップ') {
            steps {
                deleteDir()
            }
        }
        
        stage('パラメータ処理') {
            steps {
                script {
                    if("${params.BUILD_PARAMS}"=="none") {
                        BUILD_PARAMETER="${NAMESPACE}"
                    }
                    if("${params.DB_PASSWORD_PATH}"=="none") {
                        DB_PASSWORD_PATH="/etc/secrets/db/password"
                    }
                }
            }
        }
        
        stage('ソースコードの取得') {
            steps {
                echo "ブランチ: ${TARGET_BRANCH}"
                git branch: "${TARGET_BRANCH}", credentialsId: 'git-credentials-id', url: 'https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/payment-gateway-repo'
            }
        }

        stage('ビルド') {
            steps{
                sh '''
                    echo "==============ビルド開始=========="
                    cd payment/common
                    mvn -DskipTests=true clean install
                    cd ../payment-order
                    mvn -DskipTests=true clean install
                    cd ../payment-logging
                    mvn -DskipTests=true clean install
                    cd ../payment-account
                    mvn -DskipTests=true clean install
                    cd ../payment-gateway
                    mvn -DskipTests=true clean install
                    echo "==============ビルド完了=========="
                '''
            }
        }
        
        stage('成果物の収集') {
            steps {
                script {
                    if(!fileExists("${PROJECT_NAME}")) {
                        sh "mkdir -p ${PROJECT_NAME}/{classes,lib,webapps}"
                    }
                    sh "cp -f /root/mavenlib/com/company/payment/payment-gateway/1.0.0-SNAPSHOT/payment-gateway-1.0.0-SNAPSHOT.jar ${PROJECT_NAME}/classes/${PROJECT_NAME}.jar"
                }
            }
        }
        
        stage('Dockerfileの処理') {
            steps {
                script {
                    sh '''
                        cp -f /root/templates/Dockerfile.template Dockerfile
                        sed -i "s/BASE_IMAGE_TAG/${BASE_IMAGE}/g" Dockerfile
                        sed -i "s#app_dir#${PROJECT_NAME}#g" Dockerfile
                    '''
                }
            }
        }
        
        stage('DockerイビルドとRancher同期') {
            steps{
                sh '''
                    IMAGE_TAG="${NAMESPACE}_${TARGET_BRANCH}_$(date '+%Y%m%d%H%M')"
                    aws ecr get-login-password | docker login --username AWS --password-stdin 123456789012.dkr.ap-northeast-1.amazonaws.com
                    docker build -t ${REPO_NAME}:${IMAGE_TAG} .
                    docker push ${REPO_NAME}:${IMAGE_TAG}
                    docker rmi ${REPO_NAME}:${IMAGE_TAG}
                    echo "==============Rancherへの同期開始: ${REPO_NAME}:${IMAGE_TAG} =========="
                    if [ "${DEPLOY_FLAG}" == "YES" ]
                    then
                        python /root/scripts/deployToRancher.py prod ${NAMESPACE} ${PROJECT_NAME} ${IMAGE_TAG}
                    fi
                '''
            }
        }
    }
}

Vue.jsプロジェクトのパイプライン設定

パラメータ化ビルド設定

フロントエンドプロジェクトでは、ビルド対象ブランチ、デプロイ先ホスト名、カスタムビルドコマンドなどをパラメータとして設定できます。

パイプライン設定

以下にVue.jsプロジェクト用のJenkinsパイプライン例を示します。ワークスペースのクリーンアップ、ソースコード取得、ビルド、S3へのデプロイまでを自動化しています。


pipeline {
    agent {
        kubernetes {
            label 'jenkins-worker-node'
        }
    }
    
    parameters {
        gitParameter branchFilter: 'origin/(.*)', defaultValue: 'develop', name: 'SOURCE_BRANCH', type: 'PT_BRANCH', description: 'ビルド対象のブランチを選択'
        choice(name: 'DEPLOY_HOST', choices: ['staging-admin.deepxin.com'], description: 'デプロイ先ホスト名')
        string(name: 'BUILD_COMMAND', defaultValue: 'npm install && npm run build', description:'ビルドコマンド') 
    }
    
    environment {
        DEPLOY_HOST="${params.DEPLOY_HOST}"
        S3_BUCKET = "frontend-artifacts/staging"
        BUILD_CMD="${params.BUILD_COMMAND}"
        SOURCE_BRANCH="${params.SOURCE_BRANCH}"
    }
    
    stages {
        stage('ワークスペースのクリーンアップ') {
            steps {
                deleteDir()
            }
        }  
        
        stage('ソースコードの取得') {
            steps {
                dir("${WORKSPACE}") {
                    git branch: "${params.SOURCE_BRANCH}", credentialsId: 'git-credentials-id', url: 'https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/frontend-admin'
                }
            }
        }
        
        stage('ビルド') {
            steps{
                dir("${WORKSPACE}") {
                    sh "${BUILD_CMD}"
                }
            }
        }
        
        stage('デプロイ') {
            steps {
                dir("${WORKSPACE}") {
                    sh "aws s3 sync dist/ s3://${S3_BUCKET}/${DEPLOY_HOST}/ --delete"
                }
            }
        }
    }
}

上記のパイプライン設定により、Spring BootとVue.jsプロジェクトのビルドからデプロイまでを自動化できます。パラメータを変更することで、異なる環境やブランチへのデプロイが容易になります。

タグ: Jenkins CI/CD SpringBoot vue.js DevOps

5月23日 08:03 投稿