GitLab Merge RequestトリガJenkins pipeline

6847 ワード

文書ディレクトリ

  • GitLab Merge RequestトリガJenkins pipeline
  • 前言
  • Build Triggers
  • の構成
  • Jenkins webhook
  • の構成
  • 構成Merge request settings(オプション)
  • 配置Jenkins流水線
  • テスト
  • 参照文書
  • GitLab Merge RequestトリガJenkins pipeline


    前言


    GitLab push自動トリガJenkins構築と持続的統合の論文では,GitLab pushトリガJenkins構築について述べた.
    PushトリガJenkinsコンストラクションと比較して、merge requestトリガJenkinsコンストラクションは、コードがターゲットブランチにマージされる前に変更されたコードがCIに失敗するかどうかを確認することができ、コードレビューに重要な根拠を提供します.
    他の手順は、上記のGitLab pushを参照してJenkins構築と継続的な統合記事を自動的にトリガーすることができます.
    以下は特に注意しなければならない点だけを言います.

    ビルドTriggersの構成


    Jenkins jobを開く
    Build when a change is pushed to GitLabをチェックする.GitLab webhook URL
    「Opened Merge Request Events」をチェック
    「Advanced...」を開き、Allow branchesでFilter branch by regexをチェックして、Source branchとTarget branchを入力します.一部のsource branchまたはtarget branchのみがJenkins構築をトリガーします.

    Jenkins webhookの構成


    上記の記事を参考に、GitLabでJenkins webhookを構成しますが、TriggerをMerge Request Eventsとして選択するのとは異なり、Enable SSL verificationのチェックを外します.
    GitLabでwebhookがJenkinsに正常に通知できるかどうかをテストします.

    Merge request settingsの構成(オプション)


    GitLabで、プロジェクト構成を開き、Settings/General/Merge request settingsを開きます.
    「Only allow merge requests to be merged if the pipeline succeeds」をチェックし、Jenkins pipelineの実行に成功した場合にのみインタフェースでmergeを許可します.
    この機能にはJenkins pipelineの特別サポートが必要です.
  • https://github.com/jenkinsci/gitlab-plugin

  • Jenkinsパイプラインの構成


    GitLab Connectionの構成:
    options {
    	gitLabConnection('GitlabAccess')
    }
    

    Checkout merge requestのコード:
    stage('Checkout') {
        steps {
            checkout changelog: true, poll: true, scm: [
              $class: 'GitSCM',
              branches: [[name: "origin/${env.gitlabSourceBranch}"]],
              doGenerateSubmoduleConfigurations: false,
              extensions: [[
                $class: 'PreBuildMerge',
                options: [
                  fastForwardMode: 'FF',
                  mergeRemote: 'origin',
                  mergeStrategy: 'default',
                  mergeTarget: "${env.gitlabTargetBranch}"
                ]
              ]],
              extensions: [[
                $class: 'UserIdentity', 
                email: "${env.gitlabUserEmail}", 
                name: "${env.gitlabUserName}"
              ]],
              submoduleCfg: [],
              userRemoteConfigs: [[
                credentialsId: "${GIT_CREDENTIALS_ID}",
                name: 'origin',
                url: "${env.gitlabSourceRepoURL}"
              ]]
            ]
        }
    }
    

    そのうちPreBuildMergeはsource branchのコードを引き出した後、Jenkins workspaceの下でローカルのgit merge操作を行います.
    GitLabステータスを更新するpost-actions:
    post {
        success {
            updateGitlabCommitStatus(name: 'build', state: 'success')
        }
        failure {
            updateGitlabCommitStatus(name: 'build', state: 'failed')
            addGitLabMRComment comment: "Something unexpected happened. Please inspect Jenkins logs."
        }        
    }
    

    テスト


    GitLabに新しいmerge requestを作成し、Jenkins pipelineが自動的にトリガーされるかどうかをテストします.
    注意:GitLab merge requestがオープン状態の場合、このmerge requestのsource branchにコードをコミットするたびに、新しいmerge request event通知がJenkinsにトリガーされます.

    リファレンスドキュメント

  • https://blog.ljdelight.com/gitlab-trigger-jenkins-builds-on-merge-request/
  • https://github.com/jenkinsci/gitlab-plugin
  • https://wiki.jenkins.io/display/JENKINS/Git+Plugin#GitPlugin-AdvancedFeatures
  • https://vetlugin.wordpress.com/2017/01/31/guide-jenkins-pipeline-merge-requests/
  • https://medium.com/@teeks99/continuous-integration-with-jenkins-and-gitlab-fa770c62e88a
  • https://docs.bitnami.com/aws/how-to/create-ci-pipeline/
  • https://www.diycode.cc/projects/jenkinsci/gitlab-plugin
  • https://support.cloudbees.com/hc/en-us/articles/226122247-How-to-Customize-Checkout-for-Pipeline-Multibranch-