jenkins:环境变量(四)

4环境变量

环境变量可以被看作是pipeline与Jenkins交互的媒介。比如,可以在pipeline中通过BUILD_NUMBER变量知道构建任务的当前构建次数。环境变量可以分为Jenkins内置变量和自定义变量。

4.1 内置变量

Jenkins 流水线通过全局变量 env 提供环境变量,它在 Jenkinsfile 文件的任何地方都可以使用。Jenkins 流水线中可访问的完整的环境变量列表记录在 ${YOUR_JENKINS_URL}/pipeline-syntax/globals#env。在pipeline执行时,Jenkins通过一个名为env的全局变量,将Jenkins内置环境变量暴露出来。其使用方法有多种,示例如下:

pipeline {

  agent any

  stages {

    stage('Example') {

      steps {

         echo "Running ${env.BUILDNUMBER} on ${env.JENKINS_URL}" # 方法1 推荐

         echo "Running $env.BUILDNUMBER on $env.JENKINS_URL"  # 方法2

         echo "Running ${BUILDNUMBER} on ${JENKINS_URL}"   # 方法3 不推荐,难排查

      }

    }

  }

}

通过访问<Jenkins master的地址>/pipeline-syntax/globals#env来获取完整列表。在列表中,当一个变量被声明为"For a multibranch project"时,代表只有多分支项目才会有此变量。

下面简单介绍几个在实际工作中经常用到的变量。

 

*BUILD_ID 当前构建的 ID,与 Jenkins 版本 1.597+ 中创建的构建号 BUILD_NUMBER 是完全相同的。

*BUILD_NUMBER 当前构建号,比如 “153”。

*BUILD_TAG 字符串 jenkins-${JOB_NAME}-${BUILD_NUMBER}。可以放到源代码、jar 等文件中便于识别。

*BUILD_URL 可以定位此次构建结果的 URL(比如 http://buildserver/jenkins/job/MyJobName/17/ )

*EXECUTOR_NUMBER 用于识别执行当前构建的执行者的唯一编号(在同一台机器的所有执行者中)。这个就是你在“构建执行状态”中看到的编号,只不过编号从 0 开始,而不是 1。

 

*JAVA_HOME 如果你的任务配置了使用特定的一个 JDK,那么这个变量就被设置为此 JDK 的 JAVA_HOME。当设置了此变量时,PATH 也将包括 JAVA_HOME 的 bin 子目录。

*JENKINS_URL Jenkins 服务器的完整 URL,比如 https://example.com:port/jenkins/ (注意:只有在“系统设置”中设置了 Jenkins URL 才可用)。

*JOB_NAME 本次构建的项目名称,如 “foo” 或 “foo/bar”。

*NODE_NAME 运行本次构建的节点名称。对于 master 节点则为 “master”。

*WORKSPACE workspace 的绝对路径。

 

备注:引用或使用这些环境变量就像访问 Groovy Map 的 key 一样。在使用env变量时,需要注意不同类型的项目,env变量所包含的属性及其值是不一样的。比如普通pipeline任务中的GIT_BRANCH变量的值为origin/master,而在多分支pipeline任务中GIT_BRANCH变量的值为master。
所以,在pipeline中根据分支进行不同行为的逻辑处理时,需要留意。

4.2 自定义pipeline环境变量

当pipeline变得复杂时,我们就会有定义自己的环境变量的需求。声明式pipeline提供了environment指令,方便自定义变量。比如:

pipeline {

    agent any

    environment {

        CC = "clang"

    }

    stages {

        stage("Example") {

            environment {

                DEBUG_FLAGS = "-g"

            }

            steps {

                sh "${CC} ${DEBUG_FLAGS}"

                sh "printenv"

            }

        }

    }

}

environment指令可以用在pipeline中定义,作用域就是整个pipeline,当定义在stage阶段,只在当前stage有效。

但是这些变量都不是跨pipeline的,比如pipeline a访问不到pipeline b的变量。在pipeline之间共享变量可以通过参数化pipeline来实现。

环境变量的互相引用:

environment {

    __server_name = 'mail-server'

    __version = "${BUILD_NUMBER}"

    __artifact_name = "${__server_name}-${__version}.jar"

}

小技巧 :

在调试pipeline时,可以在pipeline的开始阶段加一句:sh 'printenv',将env变量的属性值打印出来。这样可以帮助我们避免不少问题。

自定义变量时,为避免命名冲突,可根据项目或公司加上统一前缀,如__server_name,__就是前缀。

4.3 自定义全局环境变量

定义全局环境变量可以跨pipeline使用。
进入Jenkins→Manage Jenkins→Confiure System找到Global properties→勾选"Environment variables"复选框,单击“Add”按钮,在输入框中输入变量名和变量值即可。

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值