jenkins 在管道开始时循环遍历环境指令中的环境变量列表

a0x5cqrl  于 12个月前  发布在  Jenkins
关注(0)|答案(1)|浏览(147)

我没有找到任何例子来说明如何做到这一点。
而不是这个

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

我想这样做:

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

也许我可以在pipeline{}指令之前生成一个Map,并以某种方式将其传递给environment{}?我不想在一个阶段内这样做,我想在所有阶段的顶层环境指令。

ig9co6j1

ig9co6j11#

根据environment指令文档,不可能在environment块内执行任何代码,但是您可以通过创建自定义步骤并使用script块更新相关环境变量以及任何用于更新包含环境值的env字典的groovy代码来实现类似的功能。
例如:

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

相关问题