在post构建步骤中设置Jenkins环境变量

时间:2017-10-23 15:19:13

标签: jenkins

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

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

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

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

我确实调查了EnInject Plugin,但它仅适用于构建步骤,而不适用于构建后。

修改

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

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

我要将EXECUTON_TAG添加到Mattermost通知中显示的网址,如下所示:

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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

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

import org.apache.spark.storage.StorageLevel
addedRDD = addedRDD.union(rdd).persist(StorageLevel.DISK_ONLY)

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