Post-build Actions 部分看不到注入的环境变量

Posted

技术标签:

【中文标题】Post-build Actions 部分看不到注入的环境变量【英文标题】:Post-build Actions part does not see injected environment variable 【发布时间】:2019-12-14 06:36:26 【问题描述】:

脚本在Build 部分的Execute shell 块中生成properties 文件到工作空间。这个文件在脚本执行后在工作空间可用,如果是Failed 构建(Conditional steps (multiple) 块在Build 部分),这个属性文件将被注入。我的 Jenkins 工作会发送一封电子邮件(Editable Email Notification 块),以防Failed 构建并且它应该包含属性文件中的变量但它看不到这个变量。仅供参考:此块可以使用其他环境变量。 我已经交叉检查了属性文件,它在每种情况下都包含所需的变量。

工作区中的属性文件:

从属性文件注入环境变量:

Steps to to run if condition is met 块包含更多其他操作,这些操作正常。表示跑步可以到达这个block。

后期构建中的可编辑电子邮件通知块:

如果我在构建中选中 Environment Variables 选项,我可以看到变量:

但是当我收到邮件时,它不包含变量:

知道如何解决它或我应该改变什么吗?

注意:该变量是唯一的,与Gerrit 没有真正的关系,所以我不能使用来自Gerrit 的另一个变量。只是 var 的名字有点棘手。

【问题讨论】:

尝试使用 $env.GERRIT_CHANGE_LINK 感谢您的回答,但问题是在Failed 状态的情况下,作业无法到达Conditional steps (multiple) 块。我找到了解决方案,并回答了我的问题。 【参考方案1】:

我找到了我的问题的答案。 Jenkins 或插件有限制。它无法处理失败状态。如果之前的execute shell 块失败,那么运行将不会到达Conditional steps (multiple) 块。

另一方面,我找到了解决此问题的“解决方法”。

1.步骤

您需要使用特定的返回码退出 Execute shell 块。例如:111

2。步骤

您需要将Exit code to set build unstable 字段设置为您的特定退出代码。 (您可以在Execute shell 块的高级选项中找到此字段。)如下图所示。

3.步骤

设置Conditional steps (multiple) 块以处理Unstable 状态。使用此解决方案,运行能够运行到Conditional steps (multiple) 块。

4.步骤

Conditional steps (multiple) 块内创建一个Execute shell在您准备好一切后,以防工作失败。这意味着在此块之后,您的工作状态会从 Unstable 更改为 Failed

使用此解决方案,您可以处理失败的工作,最终您将获得真正失败的工作(不是不稳定的)。

不是最优雅的解决方案,但它确实有效。

【讨论】:

以上是关于Post-build Actions 部分看不到注入的环境变量的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio Post-build 事件:for %f in (set) command

Visual Studio Post-Build 事件调用带有空格的参数的批处理文件

GitHub CI/Actions - 找不到模块。确保已安装此软件包

GitHub Actions 上 Windows 环境中的测试容器:“找不到有效的 Docker 环境。请查看日志并检查配置”

vue技术栈进阶(05. mutations, actions)

vuex---actions做异步操作的属性