我在Github Organization plugin创建的Jenkins中有一个构建作业。此构建的Jenkinsfile
使用checkout scm
签出代码,这很好,因为它在构建PR触发的更改或推送到主分支时计算出要检出的正确分支/修订。
我该怎么做:
node {
checkout scm
}
结帐子模块?
答案 0 :(得分:16)
sh 'git submodule...'
解决方案仅适用于没有特殊身份验证的Repositorys。
我们在设置中使用以下解决方案:
node {
checkout([
$class: 'GitSCM',
branches: scm.branches,
doGenerateSubmoduleConfigurations: true,
extensions: scm.extensions + [[$class: 'SubmoduleOption', parentCredentials: true]],
userRemoteConfigs: scm.userRemoteConfigs
])
}
答案 1 :(得分:7)
在Github组织插件中,添加高级子模块行为。
并按照以下方式配置:
正如@oeuftete指出的那样,你也可能需要通过SSH添加" Checkout"如果子模块使用SSH协议,则行为(并提供密钥凭证)。
答案 2 :(得分:2)
将其更改为:
node {
checkout scm
sh 'git submodule update --init'
}
如果Jenkins在Windows上运行,请使用bat
代替sh
。
答案 3 :(得分:1)
我们有类似的问题,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: 'git@github.com:<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: 'git@github.com:<AccountName>/<RepoName.git>']]
])
}
}
也许有一种更简单的方法,我很高兴收到您的来信:-)