1

我有几个 Jenkins 工作,我希望根据输入参数触发(或不触发)电子邮件。

用例是每个项目都有一个部署作业,但该作业针对每个环境进行了参数化。我们运行您可以选择部署到哪个环境的作业(Dev1、Dev2、QA 等)。理想情况下,我想在将新版本发送给 QA 时发送通知电子邮件,但我不想在将新版本发送给 Dev 时发送通知电子邮件,因为这种情况一直在发生(每个开发人员提交)和会淹没邮箱。

我试过谷歌搜索,但还没有找到解决方案。我目前正在使用 email-ext 插件。

谢谢。

4

2 回答 2

1

这是解决问题的一种非常讨厌的方法,但是如果您不能通过任何其他方式来解决...

创建一个依赖作业,该作业主要基于参数的传递/失败,该参数将作为参数传递给作业。然后,您可以将作业做出的决定链接到电子邮件通知。

当然,如果您打算这样做,最好只使用 javax.mail 编写一个小的参数化电子邮件发件人,然后让 Jenkins 通过“构建”一个实际调用“java”任务的 ANT 项目来运行它。然后,您拥有自己的电子邮件发件人(完全控制),并可以使其成为其他任务的依赖工作。

我希望有人能以更简单的方式加入...

于 2012-05-09T22:32:37.320 回答
0

在 email-ext 中,您可以添加“脚本 - 构建前”或“脚本 - 构建后”触发器,这将触发指定的 groovy 脚本返回 true 还是 false。该脚本的帮助内容如下:

使用该区域在 groovy 中实现自己的触发逻辑。最后一行将被评估为布尔值,以确定触发器是应该导致发送电子邮件还是现在。

他们没有提供脚本中可用内容的很多细节,但从 Github 上的源代码来看,您至少有“构建”和“项目”,并且为您完成了一些常见的导入:

    cc.addCompilationCustomizers(new ImportCustomizer().addStarImports(
            "jenkins",
            "jenkins.model",
            "hudson",
            "hudson.model"));

    Binding binding = new Binding();
    binding.setVariable("build", build);
    binding.setVariable("project", build.getParent());
    binding.setVariable("rooturl", JenkinsLocationConfiguration.get().getUrl());
    binding.setVariable("out", listener.getLogger());

警告,我没有尝试过,但这应该作为示例脚本工作:

build.buildVariables.get("MY_DEPLOYMENT_ENV") == "QA"

这应该获取您创建的名为“MY_DEPLOYMENT_ENV”的字符串或选择参数的值,如果当前值为“QA”,则触发电子邮件

于 2016-04-14T10:37:04.273 回答