Groovy 如何更改Jenkins email ext插件中每个触发器的发件人电子邮件地址?

Groovy 如何更改Jenkins email ext插件中每个触发器的发件人电子邮件地址?,groovy,jenkins,email-ext,Groovy,Jenkins,Email Ext,让我从我知道的开始。我知道您可以在Jenkins配置页面中全局更改系统管理员电子邮件地址,这是email ext插件中的默认发件人地址。我还知道,您可以使用pre-send groovy脚本在每个构建的基础上更改FROM地址 我正在寻找的是一种在Jenkins中的特定构建发生特定触发器(测试回归)时更改发件人电子邮件地址的方法。我不知道Groovy是否可以在构建级别根据这些信息进行切换(或者它是否可以访问这些信息)。我还尝试在特定触发器的内容部分添加groovy scrip,但收到一个错误 在此

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

我正在寻找的是一种在Jenkins中的特定构建发生特定触发器(测试回归)时更改发件人电子邮件地址的方法。我不知道Groovy是否可以在构建级别根据这些信息进行切换(或者它是否可以访问这些信息)。我还尝试在特定触发器的内容部分添加groovy scrip,但收到一个错误


在此方面的任何帮助或指导都将不胜感激!谢谢

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

摘要:

  • 在发送前脚本中:

    import javax.mail.Message.RecipientType
    msg.setRecipients(RecipientType.TO, 'someone+FROM_JENKINS_CUSTOM_RECIPIENT@gmail.com') 
    
    1.1调试转储生成(和触发器/msg/其他对象) 请注意,此触发器对象是电子邮件触发器(例如“始终”或“故障-任何”)而不是生成触发器(又称生成原因)

    1.2检查生成对象是否存在生成的触发器(原因)

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

  • 从…的文档开始。 生成后操作中的电子邮件ext插件-可编辑电子邮件通知-高级 在预发送脚本中。

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

    • msg-可以修改的mimessage对象
    • 记录器-打印流,将写入作业日志
    • build-此消息所属的生成
    • cancel-一个布尔值,设置为true时将取消发送电子邮件 “”“
    还提供:

    • 触发器-电子邮件触发器,而不是生成触发器
    1.1 这个perl Data::Dumper等价物对于调试java对象非常有用。 在jenkins作业的电子邮件Ext-Pre-send脚本中尝试以下操作:

    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": {
      .
      .
    
    从由脚本触发器触发的生成运行中,我们可以看到生成对象中的差异,生成操作/原因具有脚本触发器详细信息:

    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": {
          .
          .
    

    电子邮件触发器与生成触发器不同。电子邮件触发器可能类似于“始终”、“故障-任何”、e.t.c。生成触发器可能由用户触发GUI中的生成、SCM更改、触发脚本插件等引起。我也想做同样的事情。如果在测试SCM中发生更改时触发生成,则仅向测试人员发送电子邮件。如果在软件SCM中发生更改时触发生成,则通过电子邮件发送软件+测试。如果版本触发了构建(新版本的ScriptTrigger插件轮询),则将结果通过电子邮件发送给所有人。