1. 概述
在持续集成与持续交付(CI/CD)领域,Jenkins 流水线已经成为自动化软件开发流程的重要工具。它能够帮助我们构建、测试和部署应用程序,实现开发流程的自动化。
本文将介绍 Jenkins 流水线中全局变量的使用方法,包括常见的内置变量及其使用场景,以及如何定义自定义全局变量来增强流水线的灵活性。
2. 理解 Jenkins 流水线中的全局变量
在 Jenkins 流水线中,全局变量是预定义的对象或值,可以在整个流水线脚本中访问。这些变量通常由 Jenkins 提供,开箱即用,无需额外配置。
它们包含以下几类信息:
- 构建环境数据(如构建编号、工作目录)
- 任务参数
- Jenkins 系统的各种属性
全局变量的作用在于让流水线脚本更动态、更灵活,通过使用这些变量,我们可以编写出更具复用性和适应性的流水线代码。
此外,它们还有助于在多个流水线之间保持一致性,便于统一管理多个任务中的公共配置。
3. 常用的全局变量
3.1 env
变量
env
是一个包含环境相关信息的对象,是 Jenkins 中最常用的变量之一。以下是一些常见用法:
env.BUILD_NUMBER
:当前构建的编号env.JOB_NAME
:当前任务的名称env.WORKSPACE
:当前工作空间的路径
✅ 示例代码:
pipeline {
agent any
stages {
stage('Environment Info') {
steps {
echo "Building ${env.JOB_NAME} #${env.BUILD_NUMBER}"
echo "Workspace: ${env.WORKSPACE}"
}
}
}
}
这段代码会输出当前构建的基本信息,如任务名、构建编号和工作目录。
3.2 currentBuild
变量
currentBuild
提供当前构建的上下文信息,常用于判断构建状态或执行后处理逻辑。
常见属性:
currentBuild.result
:构建结果(如 SUCCESS、FAILURE)currentBuild.duration
:构建耗时(毫秒)currentBuild.previousBuild
:上一次构建的信息
✅ 示例代码:
pipeline {
agent any
stages {
stage('Build') {
steps {
// 构建步骤
}
}
}
post {
always {
echo "Build result: ${currentBuild.result}"
echo "Build duration: ${currentBuild.duration}ms"
}
}
}
该示例在构建完成后输出构建结果和耗时。
3.3 params
变量
params
用于访问构建参数,常用于参数化构建,使流水线更具灵活性。
✅ 示例代码:
pipeline {
agent any
parameters {
choice(name: 'DEPLOY_ENV', choices: ['dev', 'staging', 'prod'], description: '部署环境')
}
stages {
stage('Deploy') {
steps {
echo "Deploying to ${params.DEPLOY_ENV} environment"
// 部署步骤
}
}
}
}
这段代码根据用户选择的部署环境输出不同的部署信息。
4. 全局变量的访问方式
访问全局变量时需要注意语法规范:
- 使用点号访问属性:
变量名.属性
- 环境变量可通过
env.VAR_NAME
或${VAR_NAME}
访问 currentBuild
等对象有其专属的属性
✅ 示例代码:
pipeline {
agent any
stages {
stage('Variable Access') {
steps {
echo "Job name: ${env.JOB_NAME}"
echo "Build number: ${BUILD_NUMBER}"
echo "Build result: ${currentBuild.result}"
}
}
}
}
该示例展示了不同变量的访问方式。
5. 全局变量的实际应用示例
5.1 根据分支名执行条件判断
我们可以根据 env.BRANCH_NAME
的值来决定是否执行某个阶段。
✅ 示例代码:
pipeline {
agent any
stages {
stage('Deploy') {
when {
expression { env.BRANCH_NAME == 'main' }
}
steps {
echo "Deploying main branch to production"
// 部署步骤
}
}
}
}
只有当分支名为 main
时,才会执行部署阶段。
5.2 使用构建参数
定义一个字符串参数 VERSION
并在流水线中使用它。
✅ 示例代码:
pipeline {
agent any
parameters {
string(name: 'VERSION', defaultValue: '1.0.0', description: '要部署的版本')
}
stages {
stage('Deploy') {
steps {
echo "Deploying version ${params.VERSION}"
// 部署步骤
}
}
}
}
这样可以在触发构建时指定不同版本号。
5.3 构建失败时发送通知
构建失败时可以自动发送邮件通知,使用 currentBuild.fullDisplayName
和 env.BUILD_URL
。
✅ 示例代码:
pipeline {
agent any
stages {
stage('Build') {
steps {
// 构建步骤
}
}
}
post {
failure {
mail to: 'devops@example.com',
subject: "流水线失败: ${currentBuild.fullDisplayName}",
body: "请查看构建详情:${env.BUILD_URL}"
}
}
}
构建失败后会自动发送一封包含构建链接的邮件。
6. 自定义全局变量
除了使用内置变量,我们还可以根据项目需求创建自定义全局变量。
6.1 在 Jenkins 配置中定义全局变量
在 Jenkins 系统设置中可以定义全局环境变量,适用于多个流水线共享。
步骤如下:
- 进入 Jenkins 控制台
- 点击 “Manage Jenkins” -> “Configure System”
- 勾选 “Environment variables”
- 添加变量名和值(如
COMPANY_NAME=TechCorp
)
✅ 示例代码:
pipeline {
agent any
stages {
stage('Welcome') {
steps {
echo "Welcome to ${env.COMPANY_NAME}'s Jenkins Pipeline!"
}
}
}
}
6.2 使用 Groovy 脚本定义自定义变量
更灵活的方式是通过 Groovy 脚本定义变量,支持逻辑处理和动态值。
✅ 示例:生成时间戳
// 文件路径:vars/getTimestamp.groovy
def call() {
return new Date().format("yyyyMMdd_HHmmss")
}
在流水线中使用:
pipeline {
agent any
stages {
stage('Timestamp') {
steps {
script {
def timestamp = getTimestamp()
echo "Current timestamp: ${timestamp}"
}
}
}
}
}
✅ 示例:获取 Git 最新 tag
// 文件路径:vars/getLatestTag.groovy
def call() {
return sh(script: 'git describe --tags --abbrev=0', returnStdout: true).trim()
}
在流水线中使用:
pipeline {
agent any
stages {
stage('Deploy') {
steps {
script {
def latestTag = getLatestTag()
echo "Deploying version: ${latestTag}"
// 部署步骤
}
}
}
}
}
通过自定义变量,我们可以更灵活地控制流水线行为,满足项目特定需求。
7. 总结
本文介绍了 Jenkins 流水线中常用的全局变量,包括 env
、currentBuild
和 params
,并通过多个实际示例展示了它们的使用方式。
此外,我们还讲解了如何通过 Jenkins 配置和 Groovy 脚本创建自定义全局变量,从而扩展 Jenkins 的功能。
✅ 关键点总结:
- 使用全局变量可以提高流水线脚本的灵活性和可维护性
- Jenkins 提供了丰富的内置变量,满足大部分场景需求
- 自定义变量可以通过系统配置或 Groovy 脚本实现,适用于复杂或特定项目场景
掌握这些变量的使用,能帮助我们写出更智能、更可配置的 Jenkins 流水线脚本。