Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Jenkins流水线环境变量权威指南

Jenkins流水线环境变量权威指南

作者头像
DevOps云学堂
发布于 2019-11-12 12:38:10
发布于 2019-11-12 12:38:10
9.6K00
代码可运行
举报
文章被收录于专栏:DevOps持续集成DevOps持续集成
运行总次数:0
代码可运行

你是否遇到过因环境变量问题导致调试流水线很长时间?这篇文章一定能解决你的问题。本文章翻译自博客 https://e.printstacktrace.blog/jenkins-pipeline-environment-variables-the-definitive-guide/

博客作者

欢迎来到“Jenkins CookBook”系列的第一篇博客文章。今天,我们专注于有效地使用Jenkins Pipeline环境变量。您将学习如何定义env变量,如何更新它们,以及如何在布尔表达式中正确使用它们。

主要内容

  • 列出环境变量
  • 读取环境变量
  • 设置环境变量
  • 将布尔值存储在环境变量中
  • sh在env环境变量中获取输出

1列出环境变量

让我们首先列出所有可用的环境变量。您可以通过两种不同的方法进行操作。您可以${YOUR_JENKINS_HOST}/env-vars.html在Jenkins主服务器上打开页面,以获取HTML页面上列出的所有环境变量的列表。

另外,您可以通过执行printenvshell命令列出所有环境变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pipeline {
    agent any

    stages {
        stage("Env Variables") {
            steps {
                sh "printenv"
            }
        }
    }
}

注意:使用printenv | sort命令组合来获取环境变量的排序列表可能很有用。

2读取环境变量

您可以在通过env对象的管道步骤中访问环境变量,例如,env.BUILD_NUMBER将返回当前的内部版本号。您也可以使用简写版本BUILD_NUMBER,但是在此变体中,这可能会使某些用户感到困惑-它缺少BUILD_NUMBER来自环境变量的上下文。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pipeline {
    agent any

    stages {
        stage("Env Variables") {
            steps {
                echo "The build number is ${env.BUILD_NUMBER}"
                echo "You can also use \${BUILD_NUMBER} -> ${BUILD_NUMBER}"
                sh 'echo "I can access $BUILD_NUMBER in shell command as well."'
            }
        }
    }
}

3设置环境变量

可以使用environment { }block 来声明性地设置环境变量,必须使用env.VARIABLE_NAME或命令来设置环境变量withEnv(["VARIABLE_NAME=value"]) {}。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pipeline {
    agent any

    environment {
        FOO = "bar"
    }

    stages {
        stage("Env Variables") {
            environment {
                NAME = "Alan"
            }

            steps {
                echo "FOO = ${env.FOO}"
                echo "NAME = ${env.NAME}"

                script {
                    env.TEST_VARIABLE = "some test value"
                }

                echo "TEST_VARIABLE = ${env.TEST_VARIABLE}"

                withEnv(["ANOTHER_ENV_VAR=here is some value"]) {
                    echo "ANOTHER_ENV_VAR = ${env.ANOTHER_ENV_VAR}"
                }
            }
        }
    }
}

4覆盖环境变量

Jenkins Pipeline支持覆盖环境变量。您需要注意一些规则。

  • 该withEnv(["env=value]) { }块可以覆盖任何环境变量。
  • 使用environment {}块设置的变量不能使用命令式env.VAR = "value"赋值覆盖。
  • 命令式env.VAR = "value"分配只能覆盖使用命令式创建的环境变量。

这是一个示例性的Jenkinsfile,显示了所有三种不同的用例。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pipeline {
    agent any

    environment {
        FOO = "bar"
        NAME = "Joe"
    }

    stages {
        stage("Env Variables") {
            environment {
                NAME = "Alan" // overrides pipeline level NAME env variable
                BUILD_NUMBER = "2" // overrides the default BUILD_NUMBER
            }

            steps {
                echo "FOO = ${env.FOO}" // prints "FOO = bar"
                echo "NAME = ${env.NAME}" // prints "NAME = Alan"
                echo "BUILD_NUMBER =  ${env.BUILD_NUMBER}" // prints "BUILD_NUMBER = 2"

                script {
                    env.SOMETHING = "1" // creates env.SOMETHING variable
                }
            }
        }

        stage("Override Variables") {
            steps {
                script {
                    env.FOO = "IT DOES NOT WORK!" // it can't override env.FOO declared at the pipeline (or stage) level
                    env.SOMETHING = "2" // it can override env variable created imperatively
                }

                echo "FOO = ${env.FOO}" // prints "FOO = bar"
                echo "SOMETHING = ${env.SOMETHING}" // prints "SOMETHING = 2"

                withEnv(["FOO=foobar"]) { // it can override any env variable
                    echo "FOO = ${env.FOO}" // prints "FOO = foobar"
                }

                withEnv(["BUILD_NUMBER=1"]) {
                    echo "BUILD_NUMBER = ${env.BUILD_NUMBER}" // prints "BUILD_NUMBER = 1"
                }
            }
        }
    }
}

5将布尔值存储在环境变量中

关于使用环境变量,存在一种普遍的误解。存储为环境变量的每个值都将转换为String。当您存储布尔false值时,它将转换为"false"。如果要在布尔表达式中正确使用该值,则需要调用"false".toBoolean()method。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pipeline {
    agent any

    environment {
        IS_BOOLEAN = false
    }

    stages {
        stage("Env Variables") {
            steps {
                script {
                    if (env.IS_BOOLEAN) {
                        echo "You can see this message, because \"false\" String evaluates to Boolean.TRUE value"
                    }

                    if (env.IS_BOOLEAN.toBoolean() == false) {
                        echo "You can see this message, because \"false\".toBoolean() returns Boolean.FALSE value"
                    }
                }
            }
        }
    }
}

6使用sh捕获环境变量

您还可以将shell命令的输出捕获为环境变量。请记住,您需要使用sh(script: 'cmd', returnStdout:true)格式来强制sh步骤返回输出,以便可以捕获它并将其存储在变量中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pipeline {
    agent any

    environment {
        LS = "${sh(script:'ls -lah', returnStdout: true)}"
    }

    stages {
        stage("Env Variables") {
            steps {
                echo "LS = ${env.LS}"
            }
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps持续集成 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
聊一聊如何在CI流水线中落地接口测试(Jenkins)
安装 allure-pytest:pip install allure-pytest
漫谈测试
2025/06/07
960
聊一聊如何在CI流水线中落地接口测试(Jenkins)
10分钟搞定让你困惑的 Jenkins 环境变量
Jenkins, DevOps 技术栈的核心之一,CI/CD 离不开编写 Pipeline 脚本,上手 Jenkins ,简单查一下文档,你就应该不会被 agent,stages,step 这类关键词弄懵,也能很快构建出 pipeline 的骨架
用户4172423
2021/01/13
1.3K0
10分钟搞定让你困惑的 Jenkins 环境变量
史诗级整理 Jenkins 流水线详解
jenkins 有 2 种流水线分为声明式流水线与脚本化流水线,脚本化流水线是 jenkins 旧版本使用的流水线脚本,新版本 Jenkins 推荐使用声明式流水线。文档只介绍声明流水线。
我的小碗汤
2023/03/19
8.1K0
史诗级整理 Jenkins 流水线详解
Jenkins(五)
查看全局变量:http://「Jenkins服务器地址」:「端口」/pipeline-syntax/globals
zx钟
2019/07/18
7980
Jenkins(五)
Jenkins环境变量(上)
环境变量可以被看作是pipeline与Jenkins交互的媒介。比如,可以在pipeline中通过BUILD_NUMBER变量知道构建任务的当前构建次数。环境变量可以分为Jenkins内置变量和自定义变量。
陈不成i
2021/06/03
7820
Jenkins2 学习系列12 -- 创建和使用共享库
当有大量的pipeline项目构建任务,有很多代码是重复的,这时需要提取和复用共同的逻辑。 其实pipeline本质就是一个Groovy脚本,所以可以在pipeline中自定义函数,并使用Groovy语言自带的特性。 比如下面的Jenkinsfile,我们自定义了一个 createVersion 函数,并使用了内置的Date类。
mafeifan
2019/07/22
3K0
Jenkins2 学习系列12 -- 创建和使用共享库
Jenkins Pipeline流水线详解,建议收藏!
Jenkins 流水线(Pipeline)是一种持续集成和交付(CI/CD)工具,它以代码的方式定义整个软件开发过程中的构建、测试和部署流程。与传统的 Jenkins 项目和自由风格项目相比,Jenkins 流水线具有以下显著特点和优势:
测试开发技术
2025/06/08
1840
Jenkins Pipeline流水线详解,建议收藏!
2.Jenkins进阶之流水线pipeline语法入门学习
Q: 什么是 Groovy 语言 答: Groovy 是 Apache 旗下的一门基于 JVM 平台的动态/敏捷编程语言,在语言的设计上它吸纳了 Python、Ruby 和 Smalltalk 语言的优秀特性,语法非常简练和优美,开发效率也非常高(编程语言的开发效率和性能是相互矛盾的,越高级的编程语言性能越差,因为意味着更多底层的封装,不过开发效率会更高,需结合使用场景做取舍)
全栈工程师修炼指南
2022/09/29
18.2K0
2.Jenkins进阶之流水线pipeline语法入门学习
Jenkins2 学习系列6 -- 环境变量
环境变量可以被看作是pipeline与Jenkins交互的媒介。比如,可以在pipeline中通过BUILD_ NUMBER变量知道构建任务的当前构建次数。环境变量可以分为Jenkins内置变量和自定义变量。
mafeifan
2019/07/10
1.6K0
Jenkins2 学习系列6 -- 环境变量
Electron 应用的流水线设计
Electron 是由 Github 开发,用 HTML,CSS 和 JavaScript 来构建跨平台桌面应用程序的一个开源库。
LinuxSuRen
2019/04/19
8580
Jenkins2 学习系列28 -- 优化多分支流水线任务
Multibranch Pipeline Job 应该是最常见的了。非常适用于一个项目中,不同分支对于不同构建任务。
mafeifan
2019/09/19
1.3K0
基于 Jenkins 的 Android 持续集成
有多个 Android 项目,希望通过放在 Git 上的通用 pipeline 脚本实线出包 出包成功之后,上传到蒲公英并推送到企业微信。
DevOps时代
2021/03/15
1.5K0
Jenkins_流水线语法_001
本节是建立在 流水线入门内容的基础上,而且,应当被当作一个参考。 对于在实际示例中如何使用流水线语法的更多信息, 请参阅本章在流水线插件的2.5版本中的 使用 Jenkinsfile部分, 流水线支持两种离散的语法,具体如下对于每种的优缺点, 参见语法比较。
Cyylog
2020/08/19
1.5K0
Jenkins流水线
之前采用Jenkins的自由风格构建的项目,每个步骤流程都要通过不同的方式设置,并且构建过程中整体流程是不可见的,无法确认每个流程花费的时间,并且问题不方便定位问题。
程序猿川子
2022/08/24
7310
pipeline配置前端项目
vue pipeline { agent { label 'master'} options { timestamps() disableConcurrentBuilds() buildDiscarder( logRotator( numToKeepStr: '20', daysToKeepStr: '30', ) ) } parameters
陈不成i
2021/06/04
4680
Jenkins_流水线语法_002
parameters 指令提供了一个用户在触发流水线时应该提供的参数列表。这些用户指定参数的值可通过 params 对象提供给流水线步骤, 了解更多请参考示例。
Cyylog
2020/08/19
1.9K0
pipeline配置java项目
pipeline { agent { label 'slave' } options { timestamps() disableConcurrentBuilds() buildDiscarder( logRotator( numToKeepStr: '20', daysToKeepStr: '30', ) ) } parameters {
陈不成i
2021/06/04
4630
Jenkins流水线构建并发布.Net项目
在Jenkins中实现CI / CD的方法有很多,例如Blue Ocean,Free Style项目和Declarative Pipeline。在本文中,我将解释如何使用带有声明式管道的Jenkins自动化集成和部署过程。我试图用.net核心应用程序明确解释所有步骤。
DevOps云学堂
2020/05/22
1.4K0
Jenkins流水线构建并发布.Net项目
Jenkins流水线即代码之扩展共享库
Jenkin的多分支流水线,允许Jenkinsfile与需要 Jenkins 构建的应用程序代码放在一起,然后 Jenkins 从源代码管理系统中检出 Jenkinsfile 文件作为流水线项目构建过程的一部分并接着执行你的流水线。
追马
2020/07/15
1.9K0
Jenkins流水线即代码之扩展共享库
Jenkins打造多分支流水线指南
Jenkins pipeline-as-code 使您可以在项目/应用程序源代码存储库中维护CI / CD工作流逻辑,而无需在Jenkins中为每个分支维护其配置。用于构建/测试/部署的流水线代码始终和你的项目/应用程序源代码同步。在仓库中我们用jenkinsfile对流水线代码进行描述。关于jenkinsfile,其简介及语法可参考官方文档
东溪陈姓少年
2020/08/06
3.5K0
相关推荐
聊一聊如何在CI流水线中落地接口测试(Jenkins)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验