1987WEB视界-分享互联网热点话题和事件

您现在的位置是:首页 > WEB开发 > 正文

WEB开发

JenkinsPipeline环境变量使用指南

1987web2023-10-06WEB开发53

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

今天,我们专注于有效地使用Jenkins Pipeline环境变量。您将学习如何定义env变量,如何更新它们,以及如何在布尔表达式中正确使用它们。

主要内容

  • 列出环境变量

  • 读取环境变量

  • 设置环境变量

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

  • sh在env环境变量中获取输出

1

列出环境变量

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

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

pipeline{agentanystages{stage("EnvVariables") {steps{sh"printenv"}}}}

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

2

读取环境变量

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

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

3

设置环境变量

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

pipeline {agent anyenvironment {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,显示了所有三种不同的用例。

pipeline {agent anyenvironment {FOO ="bar"NAME ="Joe"}stages {stage("Env Variables") {environment {NAME ="Alan"// overrides pipeline level NAME env variableBUILD_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 cant override env.FOO declared at the pipeline (or stage) levelenv.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 variableecho"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。

pipeline{agentanyenvironment{IS_BOOLEAN=false}stages{stage("EnvVariables") {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步骤返回输出,以便可以捕获它并将其存储在变量中。

pipeline{agentanyenvironment{LS="${sh(script:ls -lah, returnStdout: true)}"}stages{stage("EnvVariables") {steps{echo"LS = ${env.LS}"}}}}

关于我们

泽阳,DevOps领域实践者。专注于企业级DevOps运维开发技术实践分享,主要以新Linux运维技术、DevOps技术课程为主。丰富的一线实战经验,课程追求实用性获得多数学员认可。课程内容均来源于企业应用,在这里既学习技术又能获取热门技能,欢迎您的到来!(微信ID: devopsvip)

运行管道

创建指向 Jenkins 文件的 Jenkins 管道作业类型(示例如下) :

单击 Build 时,您将在控制台日志中看到相应的输出:

结论

用配置作为代码设置Jenkins实例(使用Yaml配置)

本文介绍了如何使用yaml通过ConfigurationasCode插件设置Jenkins实例

  • 下一篇Jenkins配置-学习笔记

    Jenkins配置-学习笔记

    修改默认工作目录Homedirection