获取email-ext脚本模板以使用Jenkins管道

时间:2016-10-06 03:34:42

标签: jenkins jenkins-pipeline email-ext

我最近转换为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'}"

我知道早期的令牌扩展存在问题,但似乎从最新的维基更新中已经修复了这些问题。对于任何令牌,我仍然没有令牌扩展。有没有什么好的参考让这个再次起作用。我想切换到管道流程,但带有令牌扩展的电子邮件模板是工作流程的关键。

5 个答案:

答案 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'