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

9a46ea4d724f8bbc75abf331861255e1.png

你是否遇到过因环境变量问题导致调试流水线很长时间?这篇文章一定能解决你的问题。本文章翻译自博客。

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

主要内容

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

列出环境变量

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

91bc86158a31531e6c952dcea85f8b22.png

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

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

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

413368baf169ee4c7de4cd8a5aebe076.png

读取环境变量

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

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."'            }        }    }}
f5567b52542483e649e5973f93f33505.png

设置环境变量

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

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}"                }            }        }    }}
a7c9b9519fef154e54bfcc556bf5f5a8.png

覆盖环境变量

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

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

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

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"                }            }        }    }}
99e2bce42a76f6164d56106931aaa36e.png

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

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

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"                    }                }            }        }    }}
2df28e85ba5d89b2e4e0de5ef79e3816.png

使用SH捕获变量

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

pipeline {    agent any    environment {        LS = "${sh(script:'ls -lah', returnStdout: true)}"    }    stages {        stage("Env Variables") {            steps {                echo "LS = ${env.LS}"            }        }    }}
a4339ad16f46f0237e05b399445c97a2.png

df07aac5a8330420d1785c83e5b1a176.png
d295616e2092730f6cdd3f2cea4b3c59.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈RSocket与响应式编程

简介: RSocket是高效一个二进制的网络通讯协议,能够满足很多场景下使用。另外,RSocket也是一个激进的响应式捍卫者,激进到连API都跟响应式无缝集成。本文我们将和大家分享RSocket与响应式编程。 作者 | 素渡 来源 | 阿里技术公众号…

Go语言重新开始,Go Modules 的前世今生与基本使用

随着Go语言发展与场景变化, GOPATH 引起的编译依赖、内部自签发证书、安全审计等问题相继出现,随着官方推出的Go Modules逐渐完善,用户有了新的选择。本文将会带领大家从0开始,认识并使用Go Modules。 2020 年腾讯内部的一份开发者…

MaxCompute中如何通过logview诊断慢作业

简介: MaxCompute致力于批量结构化数据的存储和计算,提供海量数据仓库的解决方案及分析建模服务,在MaxCompute执行sql任务的时候有时候作业会很慢,本文通过查看logview排查具体任务慢的原因 在这里把任务跑的慢的问题划分为以下几…

excel超级工具箱_这6个Excel高效办公插件,你都用过吗?

1.易用宝。ExcelHome出品,永久免费,让繁琐或难以实现的操作变得简单可行,甚至能够一键完成,所有这些功能都将极大地提升 Excel 的便捷以及可用性!地址:http://yyb.excelhome.net2.方方格子工具箱。大部分功…

Yurt-Tunnel 详解|如何解决 K8s 在云边协同下的运维监控挑战

简介: 伴随着 5G、IoT 等技术的快速发展,边缘计算被越来越广泛地应用于电信、媒体、运输、物流、农业、零售等行业和场景中,成为解决这些领域数据传输效率的关键方式。与此同时,边缘计算形态、规模、复杂度的日益增长,…

RTC风向标:11月最值得关注的26个热点

近年来,实时音视频快速发展,WebRTC作为实时音视频的标准也快速发展,从直播到通讯,其应用场景也在不断丰富。如果您关注实时音视频方向的技术产品应用与创新,本系列文章就将会为您分享音视频方向的技术产品动态&#xf…

克隆需要验证_[实验技巧]CRISPR实验中如何验证编辑?

在CRISPR/Cas9基因组编辑实验中,如果你已经构建好了gRNA表达载体,并利用Cas9将它引入了目标细胞,那么恭喜你!成功就在眼前,指日可待。下一步,你还要验证一下,看看细胞的编辑是否如你所愿。在此&…

基于边缘云的机器流量管理技术实战

简介: CDN是通过在全球范围内分布式地部署边缘服务器将各类互联网内容缓存到靠近用户的边缘服务器上,从而降低用户访问时延并大幅减少穿越互联网核心网的流量。互联网业务使用CDN已经成为一种必然的选择。 企业边缘应用面临的挑战 CDN是通过在全球范围…

python中的repr是什么意思_python中str和repr有什么区别

python中str和repr有什么区别?下面给大家详细介绍: 1、内建函数str()和repr() 或反引号操作符()可以方便地以字符串的方式获取对象的内容、类型、数值属性等信息。 2、str()函数得到的字符串可读性好(故被print调用&am…

Go语言入门分享

简介: Go语言出自Ken Thompson、Rob Pike和Robert Griesemer之手,起源于2007年,并在2009年正式对外发布。Go的主要目标是“兼具Python等动态语言的开发速度和C/C等编译型语言的性能与安全性”,旨在不损失应用程序性能的情况下降低…

瑞欧威尔联合创始人兼CEO 李波博士:“工业元宇宙”是为了更好赋能实体经济

2021年12月10日,由广东省游戏产业协会、广东省虚拟现实产业技术创新联盟、深圳市科学技术协会、深圳市互联网文化市场协会指导,陀螺科技主办,深圳市科技开发交流中心、恒悦创客魔方协办,行业头部媒体游戏陀螺、VR陀螺、陀螺电竞、…

加载模型图_Tensorflow ckpt模型加载时的命名映射

tensorflow代码在加载ckpt模型时一般会使用如下代码:saver tf.train.Saver() with tf.Session() as sess:saver.restore(sess, "model.ckpt")那么问题来了,如果想把开源的ckpt模型加载到自己代码里不同的变量命名空间中, 应该如何…

Flink + Iceberg + 对象存储,构建数据湖方案

简介: 上海站 Flink Meetup 分享内容,如何基于Flink、对象存储、Iceberg 来构建数据湖生态。 本文整理自 Dell 科技集团高级软件研发经理孙伟在 4 月 17 日 上海站 Flink Meetup 分享的《Iceberg 和对象存储构建数据湖方案》,文章内容为&…

fdisk 分区_【linux】循序渐进学运维-基础篇-分区命令fdisk

大家好,我是高胜寒,本文是Linux运维-循序渐进学运维-基础篇的第47篇文章。本文我们来讨论一下fdisk命令的使用,使用fdisk可以做分区管理。1. 命令概述:fdisk 作用: 磁盘分区,是Linux发行版本中最常用的分区…

自动生成考勤表_可自动变色的考勤表,逢周末自动更新,你会制作吗?

员工考勤表对于许多职场HR来说,应该是再熟悉不过。一般情况下的考勤表都是按照月份进行统计,比如说11月分1-30号每天会对人员出勤情况进行登记。为了方便我们对表格的查看,我们经常会看到周末两天的单元格颜色会不同。如上图所示,…

通盘无妙手,恒生电子落子 Light 云,三大新品持续提升金融科技生产力

据普华永道《2020年与未来的金融服务技术:拥抱颠覆者》报告显示,全球 81% 银行 CEO 在众多领域中十分关注科技发展。在“无科技不金融”的趋势下,科技深度影响金融行业改革。 伴随云计算、大数据、人工智能、区块链等关键技术的发展&#xf…

实时数仓入门训练营:基于 Apache Flink + Hologres 的实时推荐系统架构解析

简介: 《实时数仓入门训练营》由阿里云研究员王峰、阿里云资深技术专家金晓军、阿里云高级产品专家刘一鸣等实时计算 Flink 版和 Hologres 的多名技术/产品一线专家齐上阵,合力搭建此次训练营的课程体系,精心打磨课程内容,直击当下…

沙盒化容器:是容器还是虚拟机

作者 | Addo Zhang来源 | 云原生指北随着 IT 技术的发展,AI、区块链和大数据等技术提升了对应用毫秒级扩展的需求,开发人员也面临着的功能快速推出的压力。混合云是新常态,数字化转型是保持竞争力的必要条件,虚拟化成为这些挑战的…

实时数仓入门训练营:实时计算 Flink 版 SQL 实践

简介: 《实时数仓入门训练营》由阿里云研究员王峰、阿里云资深技术专家金晓军、阿里云高级产品专家刘一鸣等实时计算 Flink 版和 Hologres 的多名技术/产品一线专家齐上阵,合力搭建此次训练营的课程体系,精心打磨课程内容,直击当下…

Web3.0 兴起之际,元宇宙这杯羹怎么分?

作者 | aNumak & Company译者 | 弯月出品 | CSDN(ID:CSDNnews)在听到元宇宙时,你首先想到的可能是科幻小说,或另一个宇宙。你的联想没有错,元宇宙是科幻作家尼尔斯蒂芬森在小说《雪崩》中创造的词语。意…