如何更改Email-ext插件以从自定义位置加载脚本

时间:2017-08-14 17:13:59

标签: jenkins groovy jenkins-pipeline jenkins-email-ext

我喜欢将我的Jenkins电子邮件脚本提交到我的工作副本,并将其与Email-ext一起使用。

所以我写了类似的东西:

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo 'Building...'
            }
        }
    }
    post {
        always {
            echo 'Sending email...'
            emailext body: '''${SCRIPT, template="${WORKSPACE}\\Src\\Scripts\\Jenkins\\groovy-html2.template"}''',
            mimeType: 'text/html',
            subject: "[Leeroy Jenkins] ${currentBuild.fullDisplayName}",
            to: "user@company.com",
            replyTo: "user@company.com",
            recipientProviders: [[$class: 'CulpritsRecipientProvider']]
        }
    }
}

但我收到以下邮件: 在$ JENKINS_HOME / email-templates中找不到Groovy模板文件[$ {WORKSPACE} SrcScriptsJenkinsgroovy-html2.template]。

3 个答案:

答案 0 :(得分:1)

出于安全原因,模板必须位于正确的目录中。如果你想将它们保存在SCM中,我建议你创建一个Jenkins作业,将SCM检出到正确的目录。从技术上讲,虽然该目录不应该是可写的,但可能是。或者,您可以在管道本身使用groovy代码

答案 1 :(得分:1)

在 Jenkins 2.190 上,使用本地工作区文件作为 jelly 模板,效果很好。在构建过程中用SCM step拉取,接收到正确的html内容。

这是我的 email-ext 配置的默认内容

${JELLY_SCRIPT,template="${WORKSPACE}/some_dir/email_template.jelly"}

答案 2 :(得分:0)

通过使用命令行手动覆盖文件来解决此问题:

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo 'Building...'
            }
        }
    }
    post {
        always {
            echo 'Sending email...'

            bat "copy /Y ${WORKSPACE}\\Src\\Scripts\\Jenkins\\groovy-html2.template \"${JENKINS_HOME}\\email-templates\\groovy-html2.template\""

            emailext body: '''${SCRIPT, template="${WORKSPACE}\\Src\\Scripts\\Jenkins\\groovy-html2.template"}''',
            mimeType: 'text/html',
            subject: "[Leeroy Jenkins] ${currentBuild.fullDisplayName}",
            to: "user@company.com",
            replyTo: "user@company.com",
            recipientProviders: [[$class: 'CulpritsRecipientProvider']]
        }
    }
}

有点粗糙,但它确实有效。