web-dev-qa-db-ja.com

Github組織プラグインを使用したJenkinsのサブモジュールのチェックアウト

Github組織プラグイン によって作成されたJenkinsのビルドジョブがあります。このビルドのJenkinsfilecheckout scmを使用してコードをチェックアウトします。これは、PRによってトリガーされた変更をビルドするとき、またはマスターブランチにプッシュするときに、正しいブランチ/リビジョンをチェックアウトするのに適しています。

どうすればこれを作ることができます:

node {
  checkout scm 
}

サブモジュールをチェックアウトしますか?

15
fabiim

sh 'git submodule...'を使用したソリューションは、特別な認証なしのリポジトリでのみ機能します。

セットアップでは次のソリューションを使用します。

node {
    checkout([
        $class: 'GitSCM',
        branches: scm.branches,
        doGenerateSubmoduleConfigurations: true,
        extensions: scm.extensions + [[$class: 'SubmoduleOption', parentCredentials: true]],
        userRemoteConfigs: scm.userRemoteConfigs
    ])
}
16
Tuxlife

Github組織プラグインで、高度なサブモジュールの動作を追加します。

Org Setings Page

そして、次のように構成します。

enter image description here


@oeufteteが指摘したように、サブモジュールがSSHプロトコルを使用する場合は、「SSHでのチェックアウト」動作を追加する(およびキー資格情報を提供する)必要がある場合もあります。

ここに記載されているとおり: https://wiki.jenkins.io/display/JENKINS/Git+Plugin

11
Ohad

これを次のように変更します。

node {
    checkout scm
    sh 'git submodule update --init'
}

JenkinsがWindowsで実行されている場合は、batではなくshを使用します。

3
Crummy

同様の問題がありました。Jenkinユーザーはhttpsを使用してGithubからプルしますが、サブモジュールはSSHを使用しており、Jenkinsでプル要求を処理したいと考えています。私は以下のチェックアウト段階を行いました、それがここの誰かを助けることを願っています:

stage('Checkout') {
  if(env.BRANCH_NAME == "develop" || env.BRANCH_NAME == "master") {
    checkout([
      $class: 'GitSCM',
      branches: scm.branches,
      doGenerateSubmoduleConfigurations: false,
      extensions: [[$class: 'SubmoduleOption',
                    disableSubmodules: false,
                    parentCredentials: true,
                    recursiveSubmodules: true,
                    reference: '',
                    trackingSubmodules: false],
                   [$class: 'CleanBeforeCheckout'], 
                   [$class: 'CleanCheckout']],
      submoduleCfg: [],
      userRemoteConfigs: [[credentialsId: 'jenkins-ssh',
                           url: '[email protected]:<AccountName>/<RepoName.git>']]
                          ])
  }
  else if (env.CHANGE_ID) {
    checkout([
      $class: 'GitSCM',
      branches: [[name: "FETCH_HEAD"]],
      doGenerateSubmoduleConfigurations: false,
      extensions: [[$class: 'SubmoduleOption',
                    disableSubmodules: false,
                    parentCredentials: true,
                    recursiveSubmodules: true,
                    reference: '',
                    trackingSubmodules: false],
                   [$class: 'CleanBeforeCheckout'], 
                   [$class: 'CleanCheckout']],
      submoduleCfg: [],
      userRemoteConfigs: [[credentialsId: 'jenkins-ssh', 
                           refspec: "+refs/pull/${CHANGE_ID}/head:refs/remotes/Origin/${BRANCH_NAME} +refs/heads/${CHANGE_TARGET}:refs/remotes/Origin/${CHANGE_TARGET}", 
                           url: '[email protected]:<AccountName>/<RepoName.git>']]
    ])
  }
}

多分それを行う簡単な方法があるでしょう、私はあなたから聞いてうれしいです:-)

1
sys0dm1n