在手动触发的 Jenkins 作业中从 "upstream" 构建中获取 Git 提交
Get Git commit from "upstream" build in manually triggered Jenkins job
我在 Jenkins 中有一个 Build
工作,它检查特定的 Git 提交并将其打包以作为工件部署。
稍后的 Deployment
作业会获取构建的工件并实际部署代码。它还会对包含部署脚本的特定目录进行稀疏 Git 检查。成功完成后,我们写一个Git标签。
问题是标签被写入 master
的 HEAD
,而不是用于原始上游构建的提交的散列。 (master
是作业配置中定义的分支。)
如果不是直接通过参数化触发器传递,有没有办法获取上游SCM信息?我可以看到 Jenkins 在构建目录中生成的 build.xml
文件中列出的提交;有没有办法从下游作业中读取此信息?
我意识到它并不是真的 "downstream",因为它是手动触发的。不过,我们确实有一个定义 UPSTREAM_BUILD
和 UPSTREAM_PROJECT
的选择器。
如果您正在使用 Copy Artifact 插件,您可以在 Build
作业期间使用提交哈希写入一个文件,并在 Deployment
作业期间将其读回:
# Build
echo ${GIT_COMMIT} > COMMIT_HASH
# Deployment, after copying COMMIT_HASH into the workspace
git checkout $(cat COMMIT_HASH)
我在 Jenkins 中有一个 Build
工作,它检查特定的 Git 提交并将其打包以作为工件部署。
稍后的 Deployment
作业会获取构建的工件并实际部署代码。它还会对包含部署脚本的特定目录进行稀疏 Git 检查。成功完成后,我们写一个Git标签。
问题是标签被写入 master
的 HEAD
,而不是用于原始上游构建的提交的散列。 (master
是作业配置中定义的分支。)
如果不是直接通过参数化触发器传递,有没有办法获取上游SCM信息?我可以看到 Jenkins 在构建目录中生成的 build.xml
文件中列出的提交;有没有办法从下游作业中读取此信息?
我意识到它并不是真的 "downstream",因为它是手动触发的。不过,我们确实有一个定义 UPSTREAM_BUILD
和 UPSTREAM_PROJECT
的选择器。
如果您正在使用 Copy Artifact 插件,您可以在 Build
作业期间使用提交哈希写入一个文件,并在 Deployment
作业期间将其读回:
# Build
echo ${GIT_COMMIT} > COMMIT_HASH
# Deployment, after copying COMMIT_HASH into the workspace
git checkout $(cat COMMIT_HASH)