将 git 更改传递给一个文件,以便在以后的 Jenkins 作业中使用
Passing git changes to a file for use in later Jenkins jobs
环境
我在 Jenkins 中有一系列工作,其中工作 #1 是初始构建,工作 #n 是部署到生产环境。
只连接前几个作业,所有作业都参数化。
我只构建一次,如果构建成功 post 构建步骤会触发一个作业,将该构建部署到开发人员。
部署到开发后,我必须手动转到 Jenkins 并单击 运行 作业以部署到下一个 region/environment。
问题
我能够成功地将 $GIT_COMMIT
传递给下游作业,因为在作业期间作为基于工作区的环境变量-运行 我可以将它写入文件供以后使用。
但是,$CHANGES
是一个 email-ext
特定变量,我在将其内容写入文件时遇到问题,我可以传递给下游作业以跟踪当前构建正在部署的内容给定的环境。
我对 Groovy
的不熟悉和我的弱点 Google-fu
使得尝试 pre-send script
和 post-send script
很难获得我想要传递给下游作业的数据。
我尝试了什么
有效方法
- 我可以使用
email-ext
发送 HTML 电子邮件
- 我能够将
$GIT_COMMIT
传递给文件并在下游作业中使用它
- 我可以使用
email-ext
将文件内容加载到电子邮件中
什么不起作用
我似乎无法在 pre-send script
中使用 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 中有一系列工作,其中工作 #1 是初始构建,工作 #n 是部署到生产环境。
只连接前几个作业,所有作业都参数化。
我只构建一次,如果构建成功 post 构建步骤会触发一个作业,将该构建部署到开发人员。
部署到开发后,我必须手动转到 Jenkins 并单击 运行 作业以部署到下一个 region/environment。
问题
我能够成功地将 $GIT_COMMIT
传递给下游作业,因为在作业期间作为基于工作区的环境变量-运行 我可以将它写入文件供以后使用。
但是,$CHANGES
是一个 email-ext
特定变量,我在将其内容写入文件时遇到问题,我可以传递给下游作业以跟踪当前构建正在部署的内容给定的环境。
我对 Groovy
的不熟悉和我的弱点 Google-fu
使得尝试 pre-send script
和 post-send script
很难获得我想要传递给下游作业的数据。
我尝试了什么
有效方法
- 我可以使用
email-ext
发送 HTML 电子邮件
- 我能够将
$GIT_COMMIT
传递给文件并在下游作业中使用它 - 我可以使用
email-ext
将文件内容加载到电子邮件中
什么不起作用
我似乎无法在
pre-send script
中使用 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")
与作业的耦合是通过作业名称进行的。 所选版本是最新的。