Github組織プラグイン によって作成されたJenkinsのビルドジョブがあります。このビルドのJenkinsfile
はcheckout scm
を使用してコードをチェックアウトします。これは、PRによってトリガーされた変更をビルドするとき、またはマスターブランチにプッシュするときに、正しいブランチ/リビジョンをチェックアウトするのに適しています。
どうすればこれを作ることができます:
node {
checkout scm
}
サブモジュールをチェックアウトしますか?
sh 'git submodule...'
を使用したソリューションは、特別な認証なしのリポジトリでのみ機能します。
セットアップでは次のソリューションを使用します。
node {
checkout([
$class: 'GitSCM',
branches: scm.branches,
doGenerateSubmoduleConfigurations: true,
extensions: scm.extensions + [[$class: 'SubmoduleOption', parentCredentials: true]],
userRemoteConfigs: scm.userRemoteConfigs
])
}
Github組織プラグインで、高度なサブモジュールの動作を追加します。
そして、次のように構成します。
@oeufteteが指摘したように、サブモジュールがSSHプロトコルを使用する場合は、「SSHでのチェックアウト」動作を追加する(およびキー資格情報を提供する)必要がある場合もあります。
ここに記載されているとおり: https://wiki.jenkins.io/display/JENKINS/Git+Plugin
これを次のように変更します。
node {
checkout scm
sh 'git submodule update --init'
}
JenkinsがWindowsで実行されている場合は、bat
ではなくsh
を使用します。
同様の問題がありました。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>']]
])
}
}
多分それを行う簡単な方法があるでしょう、私はあなたから聞いてうれしいです:-)