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

Jenkins 如何更改Email ext插件以从自定义位置加载脚本,jenkins,groovy,jenkins-pipeline,jenkins-email-ext,Jenkins,Groovy,Jenkins Pipeline,Jenkins Email Ext,我喜欢将我的Jenkins电子邮件脚本提交到我的工作副本中,并与email-ext一起使用 所以我写了这样的东西: pipeline { agent any stages { stage('Build') { steps { echo 'Building...' } } } post { always { echo

我喜欢将我的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模板中找不到Groovy模板文件[${WORKSPACE}SrcScriptsJenkinsgroovy-html2.Template]。

使用命令行手动覆盖该文件以解决此问题:

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']]
        }
    }
}

有点粗糙,但它可以工作。

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

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']]
        }
    }
}

有点粗糙,但它可以工作。

出于安全原因,模板必须位于正确的目录中。如果您想将它们保存在SCM中,我建议您创建一个Jenkins作业,将SCM签出到正确的目录。从技术上讲,该目录不应该是可写的,但很可能是可写的。或者,您可以在管道本身中使用groovy代码,出于安全原因,模板必须位于正确的目录中。如果您想将它们保存在SCM中,我建议您创建一个Jenkins作业,将SCM签出到正确的目录。从技术上讲,该目录不应该是可写的,但很可能是可写的。或者,您可以在Jenkins 2.190上使用管道本身中的groovy代码,使用本地工作区文件作为jelly模板,效果很好。在构建过程中,它通过SCM步骤拉取,并接收正确的html内容

这是我的电子邮件外部配置的默认内容:

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

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

这是我的电子邮件外部配置的默认内容:

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

你确定是出于安全原因吗?关于它有一个公开的问题:是的,我是插件的维护者。我以wontfix的身份关闭了该票证。你确定这是出于安全原因吗?关于它有一个公开的问题:是的,我是插件的维护者。我以wontfix的身份关闭了这张罚单。