Jenkins 管道: checkout explicit git commit

标签 jenkins jenkins-pipeline

我希望能够说这样的话:

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/

相关文章:

Jenkins 作业正在等待下一个可用的执行者

json - 无法在 JenkinsFile 中按键读取 Json 值

jenkins - 根据参数值执行构建步骤

jenkins - 如何在 jenkins 上并行运行动态阶段,并为每个阶段使用单独的 kubernetes 代理

ruby - 无法使用 bundle 安装 gems

bash - Jenkins Groovy : how to extract specific number from parameter in method?

jenkins - 如何使用 Jenkinsfile 更好地可视化大型构建步骤的工作?

java - 作业 API 的 Jenkins 扩展点

Jenkins管道条件阶段,使用 "When"作为选择参数

mysql - 脚本化 Jenkinsfile 中的多个 Docker