jenkins - 将 git 更改传递到文件以供以后的 Jenkins 作业使用

标签 jenkins email-ext

环境
我在 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/

相关文章:

java - 如何通过避免注册表设置来加速 Selenium/Junit 测试执行

java - 为什么 InetAddress.getLocalHost().getHostName() 返回的值与 bash "hostname"不同?

找不到 Jenkins 共享库依赖项

电子邮件扩展插件 - 无法让 BUILD_LOG_EXCEPT 工作

jenkins - 获取 email-ext 脚本模板以与 Jenkins 管道配合使用

jenkins - 如何加快 Sonar 分析工作?

Jenkins 多分支管道不安排标记作业

jenkins - 将 JSHint 集成到 Jenkins 中,无需使用 Checkstyle 或 JSLint 报告器

Jenkins email-ext 会针对未按预期工作的罪魁祸首触发电子邮件

java - Jenkins 将构建参数传递给 email-ext 模板