Overview

全局变量直接在 Pipeline 中可用,而不是作为步骤。它们公开了要在 Pipeline 脚本中访问的方法和变量。

Global Variable Reference

pipeline

该 pipeline 步骤允许您以更结构化的方式定义您的管道。有关更多信息,请参阅 wiki

env

环境变量可以从 Groovy 代码中作为 env.VARNAME 或简称为 VARNAME 进行访问。您也可以写入此类属性(仅使用 env. 前缀)

在 pipeline 中使用 ${env.BRANCH_NAME},在 shell 中使用 $BRANCH_NAME

env.MYTOOL_VERSION = '1.33'
node {
  sh '/usr/local/mytool-$MYTOOL_VERSION/bin/start'
}

这些定义也将在构建期间或完成后通过 REST API 以及使用该 build 步骤从上游管道构建中获得。

但是,以这种方式设置的任何变量对于 Pipeline 构建都是全局的。对于具有节点特定内容的变量(例如:文件路径),您应该改用该 withEnv 步骤,将变量仅绑定在一个 node 块内。

一组环境变量可供所有 Jenkins 项目使用,包括流水线。以下是可用变量名称的一般列表:

变量名作用
BRANCH_NAME对于多分支项目,这将设置为正在构建的分支的名称,例如,如果您希望从主分支而不是从功能分支部署到生产;如果对应于某种更改请求,则名称通常是任意的(参考 CHANGE_IDCHANGE_TARGET
BRANCH_IS_PRIMARY对于多分支项目,如果 SCM 源报告正在构建的分支是主分支,则将其设置为 “true”; 否则未设置。一些 SCM 来源可能将多个分支报告为主要分支,而其他来源可能不提供此信息
CHANGE_ID对于与某种变更请求对应的多分支项目,如果支持,这将设置为变更 ID,例如:拉取请求编号;否则未设置
CHANGE_URL对于对应于某种变更请求的多分支项目,如果支持,将设置为变更 URL;否则未设置
CHANGE_TITLE对于与某种变更请求对应的多分支项目,如果支持,这将设置为变更的标题;否则未设置
CHANGE_AUTHOR对于与某种变更请求对应的多分支项目,如果支持,这将设置为提议变更作者的用户名;否则未设置
CHANGE_AUTHOR_DISPLAY_NAME对于与某种变更请求对应的多分支项目,如果支持,这将设置为作者的人名;否则未设置
CHANGE_AUTHOR_EMAIL对于与某种变更请求对应的多分支项目,如果支持,这将设置为作者的电子邮件地址;否则未设置
CHANGE_TARGET对于与某种变更请求对应的多分支项目,如果支持,这将设置为可以合并变更的目标或基础分支;否则未设置
CHANGE_BRANCH对于与某种变更请求相对应的多分支项目,这将设置为源代码控制系统上实际负责人的名称,该名称可能与 BRANCH_NAME。例如:在 GitHub 或 Bitbucket 中,这将具有原始分支的名称,而 BRANCH_NAME 类似于 PR-24
CHANGE_FORK对于与某种变更请求对应的多分支项目,如果更改源自一个,则将其设置为分叉 repo 的名称;否则未设置
TAG_NAME对于与某种标签对应的多分支项目,如果支持,这将设置为正在构建的标签的名称;否则未设置
TAG_TIMESTAMP对于与某种标签对应的多分支项目,如果支持,这将设置为标签的时间戳,以 Unix 纪元以来的毫秒数为单位;否则未设置
TAG_UNIXTIME对于与某种标签对应的多分支项目,如果支持,这将设置为标签的时间戳,以 Unix 纪元以来的秒数为单位;否则未设置
TAG_DATE对于与某种标签对应的多分支项目,如果支持,这将设置为 java.util.Date#toString() 定义的格式的时间戳(例如:2020 年 1 月 1 日星期三 00:00:00 UTC);否则未设置
JOB_DISPLAY_URL将重定向到首选用户界面中的作业的 URL
RUN_DISPLAY_URL将重定向到首选用户界面中的构建的 URL
RUN_ARTIFACTS_DISPLAY_URL将重定向到首选用户界面中构建的工件的 URL
RUN_CHANGES_DISPLAY_URL将重定向到首选用户界面中构建的变更日志的 URL
RUN_TESTS_DISPLAY_URL将重定向到首选用户界面中构建的测试结果的 URL
CI静态设置为字符串 “true”,表示 “持续集成” 执行环境
BUILD_NUMBER当前内部版本号,例如:“153”。
BUILD_ID当前构建 ID,与 1.597+ 中创建的构建的 BUILD_NUMBER 相同,但旧版本的时间戳为 YYYY-MM-DD_hh-mm-ss
BUILD_DISPLAY_NAME当前构建的显示名称,默认类似于 “#153”
JOB_NAME此构建的项目名称,例如:“foo” 或 “foo/bar”
JOB_BASE_NAME此构建的项目的短名称剥离文件夹路径,例如:“bar/foo” 的 “foo”
BUILD_TAGjenkins-${JOB_NAME}-${BUILD_NUMBER} 的字符串。JOB_NAME 中的所有正斜杠 (“/”) 都替换为破折号 (“-”)。方便放入资源文件、jar 文件等,便于识别
EXECUTOR_NUMBER标识正在执行此构建的当前执行程序(在同一台机器的执行程序中)的唯一编号。这是你在 “构建执行器状态” 中看到的数字,只是数字是从 0 开始的,而不是 1
NODE_NAME如果构建在代理上,则代理的名称,如果在内置节点上运行,则为 built-in(或在 Jenkins 2.306 之前为 master
NODE_LABELS分配给节点的标签的空格分隔列表
WORKSPACE作为工作空间分配给构建的目录的绝对路径
WORKSPACE_TMP工作区附近的临时目录,不可浏览且不会干扰 SCM 签出。最初可能不存在,因此请务必根据需要创建目录(例如:在 Linux 上 mkdir -p)。当常规工作区是驱动器根时未定义
JENKINS_HOME控制器文件系统上分配给 Jenkins 存储数据的目录的绝对路径
JENKINS_URLJenkins 的完整 URL,例如:http://server:port/jenkins/(注意:仅在系统配置中设置 Jenkins URL 时可用)
BUILD_URL此构建的完整 URL,例如:http://server:port/jenkins/job/foo/15/(必须设置 Jenkins URL)
JOB_URL此作业的完整 URL,例如:http://server:port/jenkins/job/foo/(必须设置 Jenkins URL)

特定于 SCM 的变量,例如:GIT_COMMIT 不会自动定义为环境变量;相反,您可以使用 checkout 步骤的返回值。

作为从 Groovy 加载变量值的示例:

mail to: 'devops@acme.com',
    subject: "Job '${JOB_NAME}' (${BUILD_NUMBER}) is waiting for input",
    body: "Please go to ${BUILD_URL} and verify the build"

params

在 pipeline 中使用 ${params.NAME},在 shell 中使用 $NAME

将构建中定义的所有参数公开为具有各种类型值的只读映射。例子:

if (params.BOOLEAN_PARAM_NAME) { doSomething() }

或提供一个重要的默认值:

if (params.getOrDefault('BOOLEAN_PARAM_NAME', true)) { doSomething() }

多分支(Jenkinsfile)使用注意事项:该 properties 步骤允许您定义作业属性,但这些属性在步骤运行时生效,而构建参数定义通常在构建开始之前进行咨询。为方便起见,当前在作业中定义的任何具有默认值的参数也将在此映射中列出。这允许您编写,例如:

properties([parameters([string(name: 'BRANCH', defaultValue: 'master')])])
git url: '…', branch: params.BRANCH

并确保 master 即使在分支项目的初始构建中,或者如果先前的构建没有指定参数或使用不同的参数名称,分支也会被签出。

currentBuild

currentBuild 变量属于 RunWrapper 类型,可用于引用当前正在运行的生成。它具有以下可读属性:

currentBuild 变量属性作用
getBuildCauses返回当前构建的构建原因的 JSON 数组
getBuildCauses(String causeClass)实验性-可能改变,获取表示完全限定 Cause 类的字符串,并返回按该类型为当前构建筛选的构建原因的 JSON 数组,如果指定类型的原因不适用于当前构建,则返回空 JSON 数组
number内部版本号(整数)
result通常是 SUCCESS,UNSTABLE,或 FAILURE(对于正在进行的构建可能为空)
currentResult通常是 SUCCESS,UNSTABLE 或 FAILURE,永远不会为空
resultIsBetterOrEqualTo(String)将当前生成结果与提供的结果字符串(SUCCESS,UNSTABLE 或 FAILURE)进行比较,如果当前构建结果优于或等于提供的结果,则返回 true
resultIsWorseOrEqualTo(String)将当前生成结果与提供的结果字符串(SUCCESS,UNSTABLE 或 FAILURE)进行比较,如果当前构建结果差于或等于提供的结果,则返回 true
displayName通常是 #123 但有时设置为例如:SCM 提交标识符
fullDisplayName通常是 folder1 » folder2 » foo #123
projectName本次构建的项目名称,如:foo
fullProjectName本次构建的项目全名,包括文件夹,例如:folder1/folder2/foo
description有关构建的其他信息
id通常是 number 作为字符串
timeInMillis自计划构建时起的时间
startTimeInMillis自构建开始运行以来的时间
duration构建持续时间(以毫秒为单位)
durationString构建持续时间的可读表示
previousBuild项目的先前版本,或 null
previousBuildInProgress当前正在构建的项目的先前构建,或 null
previousBuiltBuild已构建的项目的先前构建(可能当前正在构建),或 null
previousCompletedBuild上次完成构建的项目的先前构建,或 null
previousFailedBuild上次构建失败的项目的先前构建,或 null
previousNotFailedBuild没有失败的项目的先前构建(例如:结果是 successful(成功的) 或 unstable(不稳定的)),或 null
previousSuccessfulBuild已成功构建的项目的先前构建,或 null
nextBuild项目的下一个版本,或 null
absoluteUrl构建索引页面的 URL
buildVariables对于非管道下游构建,提供对已定义构建变量映射的访问;对于 Pipeline 下游构建,在构建结束时在 env 上全局设置的任何变量。子管道作业可以通过在 env 中设置变量向父作业报告其他信息。请注意,buildVariables 中没有显示构建参数
changeSets来自不同 SCM 检出的 变更集 列表;每个都有一种类型,并且是一个提交列表;每个提交都有一个 commitIdtimestampmsgauthoraffectedFiles,每个提交都有一个 editType 和路径;该值通常不可序列化,因此您只能在标记 @NonCPS 的方法内访问它
upstreamBuilds上游 构建 列表。这些是上游项目的构建,其工件将反馈到此构建中
rawBuildahudson.model.Run 带有更多 API,仅适用于受信任的库或沙盒外管理员批准的脚本;该值将不可序列化,因此您只能在标记 @NonCPS 的方法内访问它
keepLog如果应保留而不是删除此生成的日志文件,则为 true

此外,仅对于此构建(但不适用于其他生成),以下属性是可写的:

  • result
  • displayName
  • description
  • keepLog

scm

表示多分支项目构建中的 SCM 配置。使用 checkout scm 检出与 Jenkinsfile 匹配的源。

您也可以在使用 SCM 中的管道配置的独立项目中使用它,不过在这种情况下,检出将只是分支中的最新版本,可能比加载管道的版本更新。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐