我希望能够说这样的话:
git branch: commitHash, credentialsId: credentialsId, url: url
用例:我正在不同平台上进行并行构建和测试运行,并希望确保每个平台都获得相同的代码。它是 C++,我们在不同的平台上进行构建,并在这些平台上进行构建。
如果我执行上述操作,它会失败 - 底层代码假设给定的分支实际上是一个分支,或者您会得到类似的内容:
[Linux64 Build] > git rev-parse origin/e4b6c976a0a986c348a211579f1e8fd32cf29567^{commit} # timeout=10
[Pipeline] [Linux64 Build] }
[Pipeline] [Linux64 Build] // dir
[Pipeline] [Linux64 Build] }
[Pipeline] [Linux64 Build] // node
[Pipeline] [Linux64 Build] }
[Linux64 Build] Failed in branch Linux64 Build
我之前见过这个问题的各种变体,尽管没有实际的答案 - 只是建议隐藏源代码等。这并不是我真正想要的。
文档表明应该可以给出显式提交哈希,可能使用分支来代替,但我无法计算出语法,也找不到任何示例。当我这样做时,我得到了 master 分支,我想 - 在我们的设置中,master 不起作用。
到目前为止,我找到的唯一解决方案是 checkout 分支,然后显式调用 git 来获取提交:
git branch: branch, credentialsId: credentialsId, url: url
sh 'git checkout ' + commitHash
(其中分支是我最初在作业顶部获得哈希值的分支。它可以工作,但不是最简洁的。
谁有更好的方法吗?
最佳答案
使用 general scm步骤
checkout([$class: 'GitSCM', branches: [[name: commitHash ]],
userRemoteConfigs: [[url: 'http://git-server/user/repository.git']]])
关于 Jenkins 管道: checkout explicit git commit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43611673/