Jenkins - 根据输入参数触发电子邮件

时间:2012-05-09 20:06:14

标签: jenkins jenkins-plugins

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

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

我尝试使用谷歌搜索但尚未找到解决方案。我目前正在使用email-ext插件。

感谢。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分: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”的String或Choice参数的值,并在当前值为“QA”的情况下触发电子邮件