我最近转换为Jenkins 2.x并且我正在尝试管道流程,但我似乎无法使用email-ext插件来处理groovy脚本模板。虽然我的标准流程仍然可以正常工作,但如果我尝试以下操作,我会收到带有意外令牌SCRIPT的错误
emailext mimeType: 'text/html', replyTo: 'xxxx', subject: "${env.JOB_NAME} - Build# ${env.BUILD_NUMBER} - ${env.BUILD_STATUS}", to: 'xxxx', body: "${SCRIPT, template='regressionfailed.groovy'}"
我知道早期的令牌扩展存在问题,但似乎从最新的维基更新中已经修复了这些问题。对于任何令牌,我仍然没有令牌扩展。有没有什么好的参考让这个再次起作用。我想切换到管道流程,但带有令牌扩展的电子邮件模板是工作流程的关键。
答案 0 :(得分:14)
在声明性管道中使用emailext没有问题。但是您的脚本将无法正确访问“build.result”参数,因为它尚未完成。就像默认脚本groovy-html.template。
一样编辑:实际上,如果您自己手动设置,可以访问build.result。
所以最好在声明性管道的末尾添加一个阶段,如下所示:
<VirtualHost *:80>
ServerName api.xxxx.com
DocumentRoot /dianxiaoer/html/two-twenty
<Directory /dianxiaoer/html/two-twenty>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
RewriteRule /notify/alipay /mobile/index.php?act=notify&op=alipay
#Options Indexes FollowSymLinks MultiViews
Options FollowSymLinks
AllowOverride None
Require all granted
Order allow,deny
allow from all
</Directory>
</VirtualHost>
另请注意,如果您使用自己的脚本,则无法将其命名为“groovy-html.template”或“groovy-text.template”,因为它们默认为emailext(因此甚至无法访问该文件)。请参阅“脚本内容”here。
答案 1 :(得分:5)
今天面对同样的问题,显然在emailext之前定义了正文似乎可以解决问题:
def emailBody = '${SCRIPT, template="regressionfailed.groovy"}'
def emailSubject = "${env.JOB_NAME} - Build# ${env.BUILD_NUMBER} - ${env.BUILD_STATUS}"
emailext(mimeType: 'text/html', replyTo: 'xxxx', subject: emailSubject, to: 'xxxx', body: emailBody)
请记住,您可能仍需要重做部分模板。
答案 2 :(得分:3)
显然每个人都知道。有两种方法可以定义管道:声明性管道(以'管道'开头)和脚本管道(以'node'开头)
使用声明性管道,必须指定脚本来执行过程,即使用def
来定义变量。所以在管道案例中:
stage('Email') {
steps {
script {
def mailRecipients = 'dc@xwave.de'
def jobName = currentBuild.fullDisplayName
emailext body: '''${SCRIPT, template="groovy-html.template"}''',
mimeType: 'text/html',
subject: "[Jenkins] ${jobName}",
to: "${mailRecipients}",
replyTo: "${mailRecipients}",
recipientProviders: [[$class: 'CulpritsRecipientProvider']]
}
}
}
我花了一些时间来做这件事,我希望这对其他人有帮助。
答案 3 :(得分:1)
令我惊讶的是,没有人指出OP报告的错误的根本原因。该错误来自Groovy编译器本身,并且由于${SCRIPT...}
出现在双引号内而使它成为GString(无效的)而引起。要解决OP中提到的错误,您只需要使用单引号即可:
emailext mimeType: 'text/html', replyTo: 'xxxx', subject: "${env.JOB_NAME} - Build# ${env.BUILD_NUMBER} - ${env.BUILD_STATUS}", to: 'xxxx', body: '${SCRIPT, template='regressionfailed.groovy'}'
即使像这样使用独立的Groovy解释器,也可以重现该错误:
$ cat << 'END' > /tmp/t.groovy
> def emailext(Map opts) {
> }
>
> emailext mimeType: 'text/html', replyTo: 'xxxx', subject: "${env.JOB_NAME} - Build# ${env.BUILD_NUMBER} - ${env.BUILD_STATUS}", to: 'xxxx', body: "${SCRIPT, template='regressionfailed.groovy'}"
> END
$ groovy /tmp/t.groovy
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
/private/tmp/t.groovy: 4: unexpected token: SCRIPT @ line 4, column 150.
TATUS}", to: 'xxxx', body: "${SCRIPT, te
^
1 error
答案 4 :(得分:-1)
脚本管道的电子邮件通知:
mail bcc: '', body: body, cc: '', from: '', replyTo: '', subject: 'Build Done', to: 'xyzh@abc.com'