在手动触发的 Jenkins 作业中从 "upstream" 构建中获取 Git 提交

Get Git commit from "upstream" build in manually triggered Jenkins job

我在 Jenkins 中有一个 Build 工作,它检查特定的 Git 提交并将其打包以作为工件部署。

稍后的 Deployment 作业会获取构建的工件并实际部署代码。它还会对包含部署脚本的特定目录进行稀疏 Git 检查。成功完成后,我们写一个Git标签。

问题是标签被写入 masterHEAD,而不是用于原始上游构建的提交的散列。 (master 是作业配置中定义的分支。)

如果不是直接通过参数化触发器传递,有没有办法获取上游SCM信息?我可以看到 Jenkins 在构建目录中生成的 build.xml 文件中列出的提交;有没有办法从下游作业中读取此信息?

我意识到它并不是真的 "downstream",因为它是手动触发的。不过,我们确实有一个定义 UPSTREAM_BUILDUPSTREAM_PROJECT 的选择器。

如果您正在使用 Copy Artifact 插件,您可以在 Build 作业期间使用提交哈希写入一个文件,并在 Deployment 作业期间将其读回:

# Build
echo ${GIT_COMMIT} > COMMIT_HASH

# Deployment, after copying COMMIT_HASH into the workspace
git checkout $(cat COMMIT_HASH)