我认为这应该很简单,但显然它不是......或者我试图以错误的方式做到这一点:)
我正在使用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}
答案 0 :(得分:0)
AFAIK,不确定您是否能够使用jenkins插件解决此问题。
您可以通过多种方式发送工作通知:
答案 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)
这没关系,因为我想知道的是工作是否失败。其他状态无关紧要。