当前位置: 首页 > 面试题库 >

Jenkins声明式管道中的条件环境变量

李胡媚
2023-03-14
问题内容

我正在尝试获得一个如下所示的声明性管道:

pipeline {
    environment {
        ENV1 = 'default'
        ENV2 = 'default also'
    }
}

问题是,我希望能够基于任意条件覆盖ENV1或ENV2的值。我目前的需求只是将其作为分支机构的基础,但我可以想象更复杂的情况。

有没有理智的方法来实现这一目标?我在网上看到了一些类似的示例:

stages {
    stage('Set environment') {
        steps {
            script {
                ENV1 = 'new1'
            }
        }
    }
}

但是我相信这并没有设置实际的环境变量,而是设置了一个局部变量,该局部变量将覆盖以后对ENV1的调用。问题是,我需要由nodejs脚本读取这些环境变量,而这些则需要是真实的机器环境变量。

有什么方法可以在jenkinsfile中将环境变量设置为动态的?


问题答案:

用于withEnv动态设置环境变量以用于管道的特定部分(例如,在运行节点脚本时)。像这样(用您的节点脚本替换sh步骤的内容):

pipeline {
    agent { label 'docker' }
    environment {
        ENV1 = 'default'
    }
    stages {
        stage('Set environment') {
            steps {
                sh "echo $ENV1" // prints default
                // override with hardcoded value
                withEnv(['ENV1=newvalue']) {
                    sh "echo $ENV1" // prints newvalue
                }
                // override with variable
                script {
                    def newEnv1 = 'new1'
                    withEnv(['ENV1=' + newEnv1]) {
                        sh "echo $ENV1" // prints new1
                    }
                }
            }
        }
    }
}


 类似资料:
  • 问题内容: 是否有任何环境变量可用于获取Jenkins管道标题? 我知道我们可以使用它来获得自由职业的头衔,但是有什么可以用来获取管道名称的东西吗? 问题答案: 您可以使用相同的名称(例如或)从groovy访问相同的环境变量。 从文档中: 可以从Groovy代码中以env.VARNAME或仅以VARNAME的形式访问环境变量。您也可以写入这些属性(仅使用env。前缀): 这些定义也将在构建期间或构

  • 问题内容: 我正在尝试这样做 结果: null / build / 如何使用全局环境创建环境? 问题答案: 我认为您应该使用: 就像在“环境”步骤中一样,您正在定义环境变量,以后可以通过 env.your-variable-name访问

  • 在jenkins声明式管道中,如何基于自定义groovy/powershell方法设置环境变量的值?例如,如果我有一个如下所示的delcarative管道,我可以使用一个共享库方法来设置这个值吗?本质上,我试图使用一个多分支声明管道jenkins作业,它有一个部署阶段,但我需要确保开发分支部署到DEV,发布分支部署到STG,但使用相同的管道。我的想法是创建一个基于自定义方法设置的环境变量(可能在共

  • 问题内容: 至于Jenkins中的声明式管道,我在使用 when 关键字 时 遇到了麻烦。 我不断收到错误消息。我对Jenkins 2声明式管道有些陌生,并且我认为我不会将脚本化管道与声明式管道混为一谈。 该管道的目标是在声纳运行成功后运行,并发送失败或成功的邮件通知。我只希望在master或release分支上部署工件。 我遇到困难的部分在 帖子 部分。该 通知 阶段是伟大的工作。请注意,我可以

  • 我是詹金斯管道的新手;我正在定义一个声明性语法管道,我不知道我是否能解决我的问题,因为我没有找到解决方案。 我在其他帖子中尝试了其他方法来测试env var是如何工作的,例如: 但是“echo env.version”返回null。 还尝试了相同的示例:-version=-version=>props.file(并尝试注入它,但没有找到如何注入)

  • 问题内容: 我是詹金斯管道技术的新手。我正在定义一个声明性语法管道,但我不知道是否可以解决我的问题,因为我没有找到解决方案。 在此示例中,我需要将变量传递给ansible插件(在旧版本中,我使用ENV_VAR或使用inject plugin将其从文件中注入),该变量来自脚本。 这是我的理想情况(但由于环境{}而无法使用): 我尝试了其他方法来测试环境变量在其他文章中的工作方式,例如: 但“ ech