让我从我所知道的开始。我知道您可以在Jenkins配置页面中全局更改SysAdmin电子邮件地址,这是默认的FROM地址在email-ext插件中。我也知道你可以使用pre-send groovy脚本在每个构建的基础上更改FROM地址。
我正在寻找的是在Jenkins中针对特定构建发生特定触发器(测试回归)时更改FROM电子邮件地址的方法。我不知道Groovy是否可以在构建级别基于此信息(或者甚至可以访问它)进行切换。我还尝试在特定触发器的内容部分添加一个groovy脚本但是收到错误。
对此的任何帮助或指示将不胜感激!谢谢!
答案 0 :(得分:2)
presend脚本有一个名为“trigger”的变量,它是导致电子邮件发生的触发器。您可以检查其类型并根据该地址更改发件人地址。
答案 1 :(得分:1)
要点:
:
1.1 debug dumping build(和trigger / msg / other objects) 请注意此触发器对象是电子邮件触发器(例如“始终”或“失败 - 任何”)不是构建触发器(AKA构建原因)。
1.2检查构建对象是否为构建的触发器(原因)
1.3设置收件人电子邮件地址
从doc开始。 。 。 Post-build Actions中的Email-ext插件 - 可编辑的电子邮件通知 - 高级 在预发送脚本中。 。 。 https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin#Email-extplugin-PresendScript
“”“预发送脚本是一个允许您编写可以在发送之前修改MimeMessage对象的脚本的功能。这将允许添加自定义标头,修改正文等。预定义变量包括:
同样可用:
<强> 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')