GitHub 在 Jenkinsfile 中检查环境变量

GitHub checkout with environmental variable in Jenkinsfile

在 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']]
    ])

对于另一个阶段,我想检出并 build/test 触发的分支(在本例中是名为“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}”来自哪里,或者它是否导致了任何问题。

任何指导将不胜感激,谢谢!

P.S。我还尝试了 BRANCH_NAME 的多种变体,包括

$env.BRANCH_NAME, ${env.BRANCH_NAME}, $BRANCH_NAME, ${BRANCH_NAME}

如果您希望在 SCM checkout step, try (as explained here 中以明确的方式引用您的分支名称:

branches: [[name: 'refs/heads/${env.BRANCH_NAME}']]

^{commit} revision specification 因此适用于参考 refs/heads/${env.BRANCH_NAME}

<rev>^{<type>}, e.g. v0.99.8^{commit}

A suffix ^ followed by an object type name enclosed in brace pair means dereference the object at <rev> recursively until an object of type <type> is found or the object cannot be dereferenced anymore (in which case, barf).

For example, if <rev> is a commit-ish, <rev>^{commit} describes the corresponding commit object.

分支机构:[[名称:“refs/heads/${env.BRANCH_NAME}”]] 有效。

我还使用了不正确的 url/credentials 导致了更多问题。 (抱歉,刚接触软件世界。)感谢您的帮助!