环境
我在 Jenkins 中有一系列作业,其中作业 #1 是初始构建,作业 #n 是部署到生产环境。
仅连接前几个作业,所有作业均已参数化。
我只构建一次,如果构建成功,构建后步骤会触发一项作业,将该构建部署到开发人员。
部署到开发后,我必须手动转到 Jenkins 并单击运行作业以部署到下一个区域/环境。
问题
我能够成功地将 $GIT_COMMIT
传递到下游作业,因为作为作业运行期间基于工作区的环境变量,我可以将其写入文件以供以后使用。
但是,$CHANGES
是一个 email-ext
特定变量,我在将其内容写入文件时遇到问题,我可以将其传递给下游作业以进行跟踪当前构建在给定环境中部署的内容。
我对 Groovy
的不熟悉以及我的弱 Google-fu
使得尝试预发送脚本
和后发送脚本
很难获取我想要传递给下游作业的数据。
我已经尝试过
什么有效
- 我可以使用
email-ext
发送 HTML 电子邮件 - 我能够将
$GIT_COMMIT
传递到文件并在下游作业中使用它 - 我可以使用
email-ext
将文件内容加载到电子邮件中
什么不起作用
我似乎无法在
预发送脚本
中使用 Groovy 将$CHANGES
输出到文件以供使用。尝试将
$CHANGES
输出到post-send script
中的文件也不起作用,但无论如何可能都不是最好的,因为它会可能会在任何将文件传递给下游作业的机会之后出现。
我没有尝试过的
我见过suggestions to use SCM 流程注册的变更日志,显然是用 XML 记录的,如果要将其格式化以包含在 HTML
电子邮件中,则必须由初始构建作业或下游作业对其进行解析。
帮助
如果有人对下一步尝试什么有任何建议,我将不胜感激。我正在拔头发。
最佳答案
您可以使用此 groovy 脚本访问同一 jenkins 实例上任意作业的构建环境参数。
要执行该脚本,您必须安装 groovy 插件并将该脚本作为系统 groovy 脚本执行。
import jenkins.model.Jenkins
job = Jenkins.instance.getJob("freestyle-test")
numbuilds = job.builds.size()
if (numbuilds == 0) { return }
lastbuild = job.builds[numbuilds - 1]
println 'JOB: ' + job.fullName
println ' -> lastbuild: ' + lastbuild.displayName + ' = ' + lastbuild.result
println ' -> lastbuild someEnv: ' + build.environment.get("SOME_ENV")
与作业的耦合是通过作业名称进行的。 所选版本是最新版本。
关于jenkins - 将 git 更改传递到文件以供以后的 Jenkins 作业使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43500084/