【问题标题】:Choose an environment variable based on the branch name and store its value to another environment variable根据分支名称选择一个环境变量并将其值存储到另一个环境变量中
【发布时间】:2020-02-28 07:04:42
【问题描述】:

我正在尝试向当前在 Jenkins 构建过程中签出其分支的特定用户发送电子邮件通知。为此,我在环境变量中使用了命名约定。

例如

  1. master_MAIL = abcd@gmail.com
  2. ABC_MAIL = xyz@gmail.com

其中MASTERABC 是实际的分支名称。

env.GIT_LOCAL_BRANCH 为我提供了当前正在签出的分支名称。

根据当前分支名称,我必须选择正确的环境变量,并将其值(邮件 ID)存储到另一个环境变量中。

pipeline {
    agent any

    environment {
        CURRENT_MAIL = "\$${env.GIT_LOCAL_BRANCH}_MAIL"
        // Here I am trying to pick the specific mail id of the branch being
        // check out and store it to new environment variable named 
        // "CURRENT_MAIL".
        // But This gives only the value "$master_MAIL" but not the value
        // stored in master_MAIL environment variable.
    }

    stages {
    }

    post {
        always {
            mail (
            from: ""
            to: "$CURRENT_MAIL"
            // Here I have to use that environment variable to send email to
            // that specific user.
            subject: "")
        }
    }

预期的结果是:CURRENT_MAIL 环境变量的值应该包含在{Branchname}_MAIL 环境变量中。

例如考虑我在配置中设置了这两个环境变量:

master_MAIL = abc@gmail.com
ABC_MAIL = xyz@gmail.com

那么,如果当前被检出的分支是master 分支,那么环境变量CURRENT_MAIL 的值应该是abc@gmail.com

【问题讨论】:

  • 在缩进问题的源代码时,我注意到管道块缺少一个大括号。在您的 jenkins 配置中也是如此,还是只是 Stack Overlow 的复制和粘贴错误?

标签: jenkins environment-variables jenkins-groovy


【解决方案1】:

您需要 groovy evaluate() helper method 来动态评估 groovy 表达式。

environment {
    CURRENT_MAIL = evaluate(env.GIT_LOCAL_BRANCH + '_MAIL')
    // OR using Groovy GStrings as
    // CURRENT_MAIL = evaluate("${env.GIT_LOCAL_BRANCH}_MAIL")
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-22
    • 2014-05-23
    相关资源
    最近更新 更多