其他分享
首页 > 其他分享> > Jenkins基础:Jenkinsfile使用实例:13:脚本中可直接使用的环境变量

Jenkins基础:Jenkinsfile使用实例:13:脚本中可直接使用的环境变量

作者:互联网

Jenkins中内置了很多环境变量,比如JENKINS_HOME,还有BUILD_NUMBER等。这篇文章将脚本方式能够使用的环境变量进行整理,同时通过一个Jenkinsfile中使用的例子进行使用的说明。

环境变量

Jenkins的脚本中能够引用的常用环境变量如下所示。

环境变量 说明 备考
BRANCH_NAME 在multibranch项目中,BRANCH_NAME用于标明构建分支的名称。 -
CHANGE_ID 在multibranch的项目中,相较于特定的变更请求,用于标明变更ID,比如Pull Request 不支持的情况下此环境变量会被unset
CHANGE_URL 在multibranch的项目中,相较于特定的变更请求,用于标明变更的URL 不支持的情况下此环境变量会被unset
CHANGE_TITLE 在multibranch的项目中,相较于特定的变更请求,用于标明变更的标题 不支持的情况下此环境变量会被unset
CHANGE_AUTHOR 在multibranch的项目中,相较于特定的变更请求,用于标明提交变更的人员的名称 不支持的情况下此环境变量会被unset
CHANGE_AUTHOR_DISPLAY_NAME 在multibranch的项目中,相较于特定的变更请求,用于标明提交变更的人员的显示名称 不支持的情况下此环境变量会被unset
CHANGE_AUTHOR_EMAIL 在multibranch的项目中,相较于特定的变更请求,用于标明提交变更的人员的邮件地址 不支持的情况下此环境变量会被unset
CHANGE_TARGET 在multibranch的项目中,相较于特定的变更请求,用于合并后的分支信息等 不支持的情况下此环境变量会被unset
BUILD_NUMBER 当前的构建编号 -
BUILD_ID 在1.597版本后引进,表示当前构建ID 使用YYYY-MM-DD_hh-mm-ss的时间戳以表示之前的构建信息
BUILD_DISPLAY_NAME 当前构建的显示信息 -
JOB_NAME 构建Job的全称,包含项目信息 -
JOB_BASE_NAME 除去项目信息的Job名称 -
BUILD_TAG 构建标签 生成的形为jenkins-JOB_NAME的构建标签
EXECUTOR_NUMBER 执行器编号,用于标识构建器的不同编号。 编号从0开始
NODE_NAME 构建节点的名称 如果在master节点上执行的话,名称为master
NODE_LABELS 节点标签 -
WORKSPACE 构建时使用的工作空间的绝对路径 -
JENKINS_HOME JENKINS根目录的绝对路径 用于指定Jenkins的Master节点数据存储的路径
JENKINS_URL Jenkins的URL信息 只有当系统配置中被设定才会显示。
BUILD_URL 构建的URL信息 只有当系统配置中被设定才会显示。
JOB_URL 构建Job的URL信息 只有当系统配置中被设定才会显示。
GIT_COMMIT git提交的hash码 -
GIT_PREVIOUS_COMMIT 当前分支上次提交的hash码 仅在信息存在的情况下才会显示
GIT_PREVIOUS_SUCCESSFUL_COMMIT 当前分支上次成功构建时提交的hash码 仅在信息存在的情况下才会显示
GIT_BRANCH 远程分支名称 仅在信息存在的情况下才会显示
GIT_LOCAL_BRANCH 本地分支名称 -
GIT_URL 远程URL地址 当存在多个URL地址的情况下,引用方式依次为GIT_URL_1、 GIT_URL_2等
GIT_COMMITTER_NAME Git提交者的名称 -
GIT_AUTHOR_NAME Git Author的名称 -
GIT_COMMITTER_EMAIL Git提交者的email地址 -
GIT_AUTHOR_EMAIL Git Author的email地址 -
MERCURIAL_REVISION Mercurial的版本ID信息 -
MERCURIAL_REVISION_SHORT Mercurial的版本ID缩写 -
MERCURIAL_REVISION_NUMBER Mercurial的版本号信息 -
MERCURIAL_REVISION_BRANCH 分支版本信息 -
MERCURIAL_REPOSITORY_URL 仓库URL信息 -
SVN_REVISION Subversion的当前版本信息 -
SVN_URL 当前工作空间中被checkout的Subversion工程的URL地址信息 -

引用方式

以JENKINS_HOME为例,在Jenkinsfile中使用环境变量的方式如下所示

引用方式:${env.JENKINS_HOME}

示例Jenkinsfile

示例

本文示例Jenkinsfile将流水线分按照功能分为逻辑上的三段:构建(Build) 、测试(Test)、部署(Deploy),顺序如下所示。

构建测试部署

示例所使用的Jenkinsfile信息如下所示,说明如下:

pipeline {
    agent any 

    stages {
        stage('Build') { 
            steps { 
                sh 'echo Build stage ...' 
                echo "[BUILD_ID]           : ${env.BUILD_ID}"
                echo "[BUILD_NUMBER]       : ${env.BUILD_NUMBER}"
                echo "[BUILD_DISPLAY_NAME] : ${env.BUILD_DISPLAY_NAME}"
            }
        }
        stage('Test'){
            steps {
                sh 'echo Test stage ...' 
                echo "[JOB_NAME]           : ${env.JOB_NAME}"
                echo "[JOB_BASE_NAME]      : ${env.JOB_BASE_NAME}"
                echo "[BUILD_TAG]          : ${env.BUILD_TAG}"
                echo "[EXECUTOR_NUMBER]    : ${env.EXECUTOR_NUMBER}"
                echo "[NODE_NAME]          : ${env.NODE_NAME}"
                echo "[NODE_LABELS]        : ${env.NODE_LABELS}"
            }
        }
        stage('Deploy') {
            steps {
                sh 'echo Deploy stage ...' 
                echo "[WORKSPACE]          : ${env.WORKSPACE}"
                echo "[JENKINS_HOME]       : ${env.JENKINS_HOME}"
                echo "[JENKINS_URL]        : ${env.JENKINS_URL}"
                echo "[BUILD_URL]          : ${env.BUILD_URL}"
                echo "[JOB_URL]            : ${env.JOB_URL}"
                echo "[GIT_COMMIT]         : ${env.GIT_COMMIT}"
            }
        }
    }
  }

获取Jenkins-Crumb

使用如下示例代码获取Jenkins-Crumb,为使用API方式生成三个Stage的Pipeline示例作准备。

liumiaocn:jenkins liumiao$ jenkins_host_url=http://localhost:32002
liumiaocn:jenkins liumiao$ user_passwd="root:liumiaocn"
liumiaocn:jenkins liumiao$ jenkins_crumb=`curl -u $user_passwd ${jenkins_host_url}'/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)' 2>/dev/null`
liumiaocn:jenkins liumiao$ echo $jenkins_crumb
Jenkins-Crumb:d5b90aaebb5c75b56e24f3bfebc8e43d
liumiaocn:jenkins liumiao$

创建Job

上述Pipeline以及相关的config.xml文件在easypack中有保存,可以直接使用。

命令:git clone https://github.com/liumiaocn/easypack.git
cd easypack/containers/alpine/jenkins

liumiaocn:jenkins liumiao$ ls demo/pipeline/env/config.xml
demo/pipeline/env/config.xml
liumiaocn:jenkins liumiao$ cat demo/pipeline/env/config.xml
<?xml version='1.1' encoding='UTF-8'?>
<flow-definition plugin="workflow-job@2.32">
  <actions>
    <org.jenkinsci.plugins.pipeline.modeldefinition.actions.DeclarativeJobAction plugin="pipeline-model-definition@1.3.8"/>
  </actions>
  <description>Pipeline Job Sample</description>
  <keepDependencies>false</keepDependencies>
  <properties>
    <hudson.plugins.jira.JiraProjectProperty plugin="jira@3.0.7"/>
    <com.dabsquared.gitlabjenkins.connection.GitLabConnectionProperty plugin="gitlab-plugin@1.5.12">
      <gitLabConnection></gitLabConnection>
    </com.dabsquared.gitlabjenkins.connection.GitLabConnectionProperty>
  </properties>
  <definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="workflow-cps@2.69">
  <script>pipeline {
    agent any 

    stages {
        stage('Build') { 
            steps { 
                sh 'echo Build stage ...' 
                echo "[BUILD_ID]           : ${env.BUILD_ID}"
                echo "[BUILD_NUMBER]       : ${env.BUILD_NUMBER}"
                echo "[BUILD_DISPLAY_NAME] : ${env.BUILD_DISPLAY_NAME}"
            }
        }
        stage('Test'){
            steps {
                sh 'echo Test stage ...' 
                echo "[JOB_NAME]           : ${env.JOB_NAME}"
                echo "[JOB_BASE_NAME]      : ${env.JOB_BASE_NAME}"
                echo "[BUILD_TAG]          : ${env.BUILD_TAG}"
                echo "[EXECUTOR_NUMBER]    : ${env.EXECUTOR_NUMBER}"
                echo "[NODE_NAME]          : ${env.NODE_NAME}"
                echo "[NODE_LABELS]        : ${env.NODE_LABELS}"
            }
        }
        stage('Deploy') {
            steps {
                sh 'echo Deploy stage ...' 
                echo "[WORKSPACE]          : ${env.WORKSPACE}"
                echo "[JENKINS_HOME]       : ${env.JENKINS_HOME}"
                echo "[JENKINS_URL]        : ${env.JENKINS_URL}"
                echo "[BUILD_URL]          : ${env.BUILD_URL}"
                echo "[JOB_URL]            : ${env.JOB_URL}"
                echo "[GIT_COMMIT]         : ${env.GIT_COMMIT}"
            }
        }
    }
  }</script>
  <sandbox>false</sandbox>
  </definition>
  <triggers/>
  <disabled>false</disabled>
</flow-definition>
liumiaocn:jenkins liumiao$ curl -X POST -u $user_passwd -H ${jenkins_crumb} -H "Content-Type:application/xml"  --data-binary  "@demo/pipeline/env/config.xml" ${jenkins_host_url}/createItem?name=pipeline_job_env
liumiaocn:jenkins liumiao$ echo $?
0
liumiaocn:jenkins liumiao$

执行Job

使用如下命令或者直接在Jenkins上点击构建

liumiaocn:jenkins liumiao$ curl -X POST -u $user_passwd -H ${jenkins_crumb} ${jenkins_host_url}/job/pipeline_job_env/build
liumiaocn:jenkins liumiao$ echo $?
0
liumiaocn:jenkins liumiao$

确认执行结果

使用如下命令可以确认相关的执行日志信息。

liumiaocn:jenkins liumiao$ curl -u $user_passwd ${jenkins_host_url}/job/pipeline_job_env/1/consoleText
Started by user root
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /data/jenkins/workspace/pipeline_job_env
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Build)
[Pipeline] sh
+ echo Build stage ...
Build stage ...
[Pipeline] echo
[BUILD_ID]           : 1
[Pipeline] echo
[BUILD_NUMBER]       : 1
[Pipeline] echo
[BUILD_DISPLAY_NAME] : #1
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] sh
+ echo Test stage ...
Test stage ...
[Pipeline] echo
[JOB_NAME]           : pipeline_job_env
[Pipeline] echo
[JOB_BASE_NAME]      : pipeline_job_env
[Pipeline] echo
[BUILD_TAG]          : jenkins-pipeline_job_env-1
[Pipeline] echo
[EXECUTOR_NUMBER]    : 0
[Pipeline] echo
[NODE_NAME]          : master
[Pipeline] echo
[NODE_LABELS]        : master
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Deploy)
[Pipeline] sh
+ echo Deploy stage ...
Deploy stage ...
[Pipeline] echo
[WORKSPACE]          : /data/jenkins/workspace/pipeline_job_env
[Pipeline] echo
[JENKINS_HOME]       : /data/jenkins
[Pipeline] echo
[JENKINS_URL]        : http://localhost:32002/
[Pipeline] echo
[BUILD_URL]          : http://localhost:32002/job/pipeline_job_env/1/
[Pipeline] echo
[JOB_URL]            : http://localhost:32002/job/pipeline_job_env/
[Pipeline] echo
[GIT_COMMIT]         : null
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
liumiaocn:jenkins liumiao$  

参考内容

http://localhost:32002/env-vars.html/

标签:13,URL,Pipeline,echo,BUILD,env,jenkins,Jenkins,Jenkinsfile
来源: https://blog.csdn.net/liumiaocn/article/details/94381034