如何在每个触发器的基础上更改Jenkins email-ext插件中的FROM电子邮件地址?

时间:2015-09-25 14:58:45

标签: groovy jenkins email-ext

让我从我所知道的开始。我知道您可以在Jenkins配置页面中全局更改SysAdmin电子邮件地址,这是默认的FROM地址在email-ext插件中。我也知道你可以使用pre-send groovy脚本在每个构建的基础上更改FROM地址。

我正在寻找的是在Jenkins中针对特定构建发生特定触发器(测试回归)时更改FROM电子邮件地址的方法。我不知道Groovy是否可以在构建级别基于此信息(或者甚至可以访问它)进行切换。我还尝试在特定触发器的内容部分添加一个groovy脚本但是收到错误。

对此的任何帮助或指示将不胜感激!谢谢!

2 个答案:

答案 0 :(得分:2)

presend脚本有一个名为“trigger”的变量,它是导致电子邮件发生的触发器。您可以检查其类型并根据该地址更改发件人地址。

答案 1 :(得分:1)

要点:

    预发送脚本中的
  1. 1.1 debug dumping build(和trigger / msg / other objects) 请注意此触发器对象是电子邮件触发器(例如“始终”或“失败 - 任何”)不是构建触发器(AKA构建原因)。

    1.2检查构建对象是否为构建的触发器(原因)

    1.3设置收件人电子邮件地址

  2. 从doc开始。 。 。 Post-build Actions中的Email-ext插件 - 可编辑的电子邮件通知 - 高级 在预发送脚本中。 。 。 https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin#Email-extplugin-PresendScript

    “”“预发送脚本是一个允许您编写可以在发送之前修改MimeMessage对象的脚本的功能。这将允许添加自定义标头,修改正文等。预定义变量包括:

    • msg - 可以修改的MimeMessage对象
    • logger - 一个PrintStream,将写入作业的日志。
    • build - 此消息所属的构建
    • 取消 - 布尔值,设置为true时将取消发送电子邮件 “”“

    同样可用:

    • 触发器 - 电子邮件触发器,而不是构建触发器

    <强> 1.1 这个perl Data :: Dumper等效于调试java对象很有用。 http://www.perlmonks.org/?node_id=699918 在jenkins工作的Email-Ext - 预发送脚本中试试这个:

    logger.println "MSG: " + msg;
    logger.println "ENV: " + msg;    
    import com.thoughtworks.xstream.XStream;
    import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;
    XStream dumper = new XStream(new JsonHierarchicalStreamDriver());
    logger.println "TRIGGER: " + trigger;
    logger.println(dumper.toXML(trigger));
    logger.println "BUILD: " + build;
    logger.println(dumper.toXML(build));
    

    查看部分结果(未显示构建对象的大部分内容)。这里的触发器是电子邮件“AlwaysTrigger”,但我们可以看到构建操作原因是管理员用户:

    TRIGGER: hudson.plugins.emailext.plugins.trigger.AlwaysTrigger@431ff400
    {"hudson.plugins.emailext.plugins.trigger.AlwaysTrigger": {
      "email": {
        "recipientList": "",
        "subject": "$PROJECT_DEFAULT_SUBJECT",
        "body": "$PROJECT_DEFAULT_CONTENT",
        "recipientProviders": [
          {},
          {}
        ],
        "attachmentsPattern": "",
        "attachBuildLog": false,
        "compressBuildLog": false,
        "replyTo": "$PROJECT_DEFAULT_REPLYTO",
        "contentType": "project"
      }
    }}
    BUILD: custom_email_test_gunk #14
    {"hudson.model.FreeStyleBuild": {
      "actions": [
        {
          "default": {},
          "int": 4,
          "hudson.model.CauseAction": {
            "causeBag": [
              [
                {
                  "userId": "admin"
                },
                1
              ]
            ]
          },
          "hudson.scm.CvsRevisionState": {
      .
      .
    

    从脚本触发器触发的构建运行中,我们可以看到构建对象的差异,构建操作/原因具有ScriptTrigger详细信息:

    BUILD: custom_email_test_gunk #10
    {"hudson.model.FreeStyleBuild": {
      "actions": [
        {
          "default": {},
          "int": 6,
          "org.jenkinsci.plugins.scripttrigger.ScriptTriggerRunAction": {
            "description": "\n[jenkins] $ /bin/sh -xe /tmp/hudson6220381111236932099.sh\n+ set +x\nJOB_NAME=custom_email_test_gunk\nJOB_VARS_CMD=JUNK=custom_email_test_;SYSTESTNAME=Docker;PRODUCT=gunk;REL=LATEST;DRIVER=gunk;SUT=gunk;SUSER=\nPRODUCT=gunk REL=LATEST DRIVER= SUT= SYSTESTNAME=Docker SUSER=\n./system_test/regression/run_scripts/poll_stuff.sh STDIR=yadda yada yadda \ndiff: yadda yadda \n<description>"
          },
          "org.jenkinsci.lib.xtrigger.XTriggerCauseAction": {
            "build": {
              "@class": "hudson.model.FreeStyleBuild",
              "@reference": "../../../.."
            }
          },
          "hudson.model.CauseAction": {
            "causeBag": [
              [
                {
                  "triggerName": "ScriptTrigger",
                  "causeFrom": " and <description>\n[jenkins] $ /bin/sh -xe /tmp/hudson6220381111236932099.sh\n+ set +x\nJOB_NAME=custom_email_test_gunk yadda yadda ",
                  "logEnabled": true
                },
                1
              ]
            ]
          },
          "hudson.scm.CvsRevisionState": {
          .
          .
    

    <强> 1.2 TODO:找出逻辑来区分构建原因。 我自己正在研究这个问题。

    <强> 1.3 我们可以在预发送脚本中设置这样的收件人:

    import javax.mail.Message.RecipientType
    msg.setRecipients(RecipientType.TO, 'someone+FROM_JENKINS_CUSTOM_RECIPIENT@gmail.com')