在管道开始时循环环境指令内的环境变量列表

时间:2021-07-14 15:03:05

标签: jenkins jenkins-pipeline jenkins-plugins jenkins-groovy

我还没有找到任何有关如何执行此操作的示例。

代替这个

pipeline {
    agent { label 'docker' }
    environment {
        ENV1 = 'default'
        ENV2 = 'default'
    }

我想这样做:

pipeline {
    agent { label 'docker' }
    environment {
        for (env in envs) {
           env.name = env.value
        }
    }

也许我可以在 pipeline{} 指令之前生成地图并以某种方式将其传递给 environment{}?我不想在阶段内执行此操作,我希望在所有阶段的顶级环境指令中执行此操作。

1 个答案:

答案 0 :(得分:1)

根据 environment 指令 Documentation 不可能在 environment 块内执行 ant 代码,但是您可以通过创建自定义步骤并更新相关环境变量来实现类似的功能使用 script 阻止您想要更新包含环境值的 env 字典的任何常规代码。
类似的东西:

 pipeline {
    agent { label 'docker' }
    stages {
        stage('Prepare Environment') {
            steps {
                script{
                    envParams = ['param1': 'value1','param2': 'value2']
                    envParams.each { key ,value ->
                        env[key] = value
                    }
                }
            }
        }
        ...
    }
}

这将影响管道中所有阶段的环境参数,而不仅仅是 Prepare Environment 阶段。

另一个简单的选择是在执行开始之前在管道的顶层运行类似的代码,它与前一个选项具有相同的效果,管道本身看起来更清晰。类似的东西:

ENV_PARAMS= ['param1': 'value1','param2': 'value2']
ENV_PARAMS.each { key ,value ->
    env[key] = value
}

pipeline {
    agent { label 'docker' }
    ...
}