【问题标题】:Set Jenkins environment variable in the post build step在构建后步骤中设置 Jenkins 环境变量
【发布时间】:2018-04-04 05:05:10
【问题描述】:

我认为这应该很简单,但显然不是......或者我试图以错误的方式做这件事:)

我正在使用 Mattermost 插件在作业运行结束时发送聊天通知。这很好用。

现在我想在通知中添加一个 URL。此 URL 的一部分是在构建后步骤中的作业运行期间生成的。我的方法是在后期构建步骤中将动态生成的部分导出到环境变量中,然后将其传递给 Mattermost 插件。该插件可以与 ${} 变量一起使用。尽管如此,传递的变量是空的/不可访问,尽管它在脚本执行期间被正确设置。

所以问题是:如何在构建后脚本执行中设置环境变量,以便其他步骤/插件可以使用它?

我确实查看了EnInject Plugin,但它仅在构建步骤中有效,在构建后无效。

编辑

后期构建脚本是一个简单的 bash 脚本,它运行 curl 命令并将其输出保存在变量 POST_RESULT 中。我从这个结果中提取了一个“BLA-123”形式的子字符串。这就是保存到EXECUTION_TAG 并导出的内容:

export EXECUTION_TAG=$(echo $POST_RESULT | grep -oP "(BLA-\d+)")

EXECUTON_TAG 是我想要添加到 Mattermost 通知中显示的 URL 的内容,如下所示:

Execution URL: http://some.random.link/execution/${EXECUTION_TAG}

【问题讨论】:

  • 这很容易实现。您可能会遇到范围界定问题,或者设置一个 groovy 变量,而不是环境变量。贴一些代码,帮助会更容易。

标签: jenkins


【解决方案1】:

AFAIK,不确定您是否能够使用 jenkins 插件解决此问题。

您可以通过多种方式发送工作通知:

  1. 使用传入的网络挂钩向最重要的渠道发送通知,而不是使用插件。
  2. 创建了一个子作业(可以对所有作业通用),您可以将该作业称为 notify_matter_most。将此作业作为上述作业的子作业触发,并确保将父作业详细信息传递给子作业,子作业反过来使用这些详细信息并使用mattermost插件向mattermost发送通知

【讨论】:

    【解决方案2】:

    这是我想出的最终解决方案:

    根据 prudviraj 的建议,我创建了另一个作业(作业 B),它只处理 Mettermost 通知。实际作业(作业 A)运行所有构建步骤,将所有需要的信息作为环境变量保存在文件中。最后,作业 A 触发作业 B 传递带有变量的文件。作业 B 使用变量构建通知文本并将其发送到 Mattermost。

    一个有点棘手的事情是同时传递作业 A 的状态(成功或失败),以便在作业 B 中创建的通知基于此获得正确的颜色(绿色或红色)。在用 Groovy 尝试了几个解决方案后,我决定在作业 A 的构建阶段使用条件步骤。这一步根据作业状态设置了另一个环境变量 BULID_STATUS。然后将此变量传递给作业 B,其中一个简单的 bash if 块使作业失败或成功:

    if [ "$BUILD_STATUS" != 'SUCCESS' ]
        then 
            exit 1
    fi
    

    这没关系,因为我只想知道作业是否失败。其他状态无关紧要。

    【讨论】:

      猜你喜欢
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多