1

在我的管道脚本中,我添加了一些环境变量,但无法在 email-ext 插件中访问它

env.MYVAR = 'HELLO'

emailext body: '${ENV,var="MYVAR"}', subject: 'subject', to: 'hello@world.com'

由于我正在从文件中读取电子邮件正文,因此我也尝试替换字符串,但在 org.codehaus.groovy.runtime.StringGroovyMethods.replaceAll 获得了 java.lang.NullPointerException

def myvariable = 'HELLO WORLD'
def content = readFile 'template.html'
content = content.replaceAll('MYVAR',myvariable)
...

任何想法?谢谢!

4

3 回答 3

0

经过几个小时的尝试,我使用字符串连接做到了:

  pipeline {
    agent any
    stages {
       ....
  }
  post {
    always {
      script {
        env.LAST_COMMIT = sh (
            script: 'git log -n 3',
            returnStdout:true
        ).trim()
      }
      echo "Last 3 commits: $LAST_COMMIT"
      emailext (
          attachLog: true,
          body: '''$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS:
                   Build Url: $BUILD_URL
                   Last 3 commits: '''
                   + env.LAST_COMMIT,
          postsendScript: '$DEFAULT_POSTSEND_SCRIPT',
          presendScript: '$DEFAULT_PRESEND_SCRIPT', 
          replyTo: '$DEFAULT_REPLYTO', 
          subject: '*$BRANCH_NAME - $BUILD_STATUS* - $DEFAULT_SUBJECT', 
          to: '''
            name@domain.com, name@domain.com
            ''',
          from: 'jenkins@domain.com'
      )
    }
  }
}
于 2020-01-30T18:24:25.210 回答
0

尝试使用双引号,例如:

emailext body: "${env.MYVAR}", subject: 'subject', to: 'hello@world.com'
于 2017-04-22T15:58:29.163 回答
-1

您可以为电子邮件正文指定一个单独的 Groovy 脚本文件,如下所示:

emailext body: '${SCRIPT, template="build-result.groovy"}', subject 'subject', to: 'hello@world.com'

模板文件需要位于 Jenkins 安装的 email-templates 文件夹中。

然后,您可以在 Groovy 脚本中使用以下内容来访问管道中设置的环境变量:

<% 
def envOverrides = it.getAction("org.jenkinsci.plugins.workflow.cps.EnvActionImpl").getOverriddenEnvironment()
if (envOverrides.containsKey("MYVAR"))
{
    println "myvar = " + envOverrides["MYVAR"]
}
%>
于 2018-04-15T16:51:33.167 回答