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和stages等相关信息
- agent用于指定执行job的节点,any为不做限制
- stages用与设定具体的stage
- stage为具体的节点,比如本文示例中模拟实际的 Build(构建)、测试(Test)、部署(Deploy)的过程。本文的示例仅仅为了演示环境变量的使用,分别在三个stage中进行显示。
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 并切换目录
命令: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