在Jenkins中,我有一个使用Jenkinsfile的多分支管道作业。我已通过以下方式禁用默认SCM签出:
options {skipDefaultCheckout(true)}
这样我就可以控制每个阶段的结账,并使用GitHub中的SSH URL。我有一个工作阶段;主";分支使用:
checkout([
$class: 'GitSCM',
branches: [[name: '*/main']],
extensions: [[$class: 'LocalBranch', localBranch: 'main']],
userRemoteConfigs: [[credentialsId: 'XXX', url: 'git@github.com:XXX.git']]
])
在另一个阶段,我想签出并构建/测试被触发的分支(在本例中是一个名为"feature-0001"的特性分支)。我已经尝试过了(注意分支和扩展线的变化):
checkout([
$class: 'GitSCM',
branches: [[name: env.BRANCH_NAME]],
extensions: [[$class: 'LocalBranch']],
userRemoteConfigs: [[credentialsId: XXX, url: 'git@github.com:XXX.git']]
])
但我得到以下错误:
Error when executing failure post condition:
java.io.IOException: Cannot retrieve Git metadata for the build
此外,构建日志还包含:
git rev-parse "origin/feature-0001^{commit}" # timeout=10
git rev-parse "feature-0001^{commit}" # timeout=10
我不确定"^{commit}";来自或是否引起任何问题。
任何指导都将不胜感激,谢谢!
附言:我也尝试过BRANCH_NAME的许多变体,包括
$env.BRANCH_NAME, ${env.BRANCH_NAME}, $BRANCH_NAME, ${BRANCH_NAME}
branches: [[name: "refs/heads/${env.BRANCH_NAME}"]]
工作。
我还使用了不正确的url/凭据,导致了进一步的问题。
如果您想在SCMcheckout
步骤中以明确的方式引用分支名称,请尝试(如此处所述):
branches: [[name: 'refs/heads/${env.BRANCH_NAME}']]
因此,^{commit}
修订规范将适用于参考refs/heads/${env.BRANCH_NAME}
<rev>^{<type>}
,例如v0.99.8^{commit}
后缀
^
后面跟着一个包含在大括号对中的对象类型名称意味着递归地取消引用<rev>
处的对象,直到找到类型为<type>
的对象或无法再取消引用该对象为止(在这种情况下,为barf)。例如,如果
<rev>
是提交ish,则<rev>^{commit}
描述相应的提交对象。