【问题标题】:Jenkins: how to set body content from a variable詹金斯:如何从变量设置正文内容
【发布时间】:2018-10-25 02:16:52
【问题描述】:

我有一个脚本化的管道。在我的一个步骤中,我想根据测试结果发送不同的邮件。这是我现在的做法:

if (buildResult == 'SUCESSS' 
    def email_body="TEST_SUCESS.template"
else
    def email_body="TEST_FAILURES.template"

    emailext(
            subject:  "Job '${env.JOB_NAME} [${env.BUILD_NUMBER}] finished",
            body: "${SCRIPT,template=$email_body}", // LINE A
            recipientProviders: [[$class: 'DevelopersRecipientProvider']],
            to: 'XXXX',
            from: 'YYYY',
            replyTo: 'ZZZZ',
            mimeType: 'text/html',
)

我不能让 Jenkins 扩展变量 email_body 的值。我在 A 行尝试了各种方法:

  1. "${SCRIPT,template=$email_body}"
  2. "${SCRIPT,template=${email_body}}"
  3. '''${SCRIPT,template=$email_body}'''
  4. '''${SCRIPT,template=${email_body}}'''

它们都不起作用。我在电子邮件中得到的只是:

在 $JENKINS_HOME/email-templates 中找不到 Groovy 模板文件 [$email_body]。

${SCRIPT,template=$email_body}。

如果电子邮件内容存储在变量中,设置电子邮件内容的正确方法是什么?

【问题讨论】:

  • @xxxvodnikxxx,我看不出它对我有什么帮助。我不想在 bash 脚本中看到变量,而是在 groovy 管道中。
  • ${SCRIPT,template=${email_body}}''' 正在 $JENKINS_HOME/email-templates 中搜索模板文件。所以,这不是身体。阅读here
  • @JoaoVitorino,我已经读过它。我在 $JENKINS_HOME/email-templates 目录中放置了一个模板,如果我不使用 email_body 变量,我可以使用它。以下对我很有效:正文:'''${SCRIPT,template="PM_TEST_FAILURES.template"}'''。但是,我希望能够根据测试结果动态设置电子邮件的正文(模板)。
  • 我认为最好把这个逻辑放在模板上。将构建的状态传递给模板,并在模板中根据需要设置主体。 Email template example

标签: string variables jenkins groovy jenkins-pipeline


【解决方案1】:

尝试使用这个例子:

String subject = "${env.JOB_NAME} was " + currentBuild.result.toString();
String email_body="TEST_" + currentBuild.result.toString() + ".template"
String body = "SCRIPT,template=" + email_body;
String to="some_mail@mail.com" 
String reply="ZZZ"
emailext(subject: subject, body: body, to: to, replyTo: reply);

【讨论】:

    猜你喜欢
    • 2016-04-07
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    相关资源
    最近更新 更多