上面讲过流水线支持两种语法,即声明式和脚本式,这两种语法都支持构建持续交付流水线。并且都可以用来在 Web UI 或 Jenkinsfile 中定义流水线,不过通常将 Jenkinsfile 放置于代码仓库中(当然也可以放在单独的代码仓库中进行管理)。
创建一个 Jenkinsfile 并将其放置于代码仓库中,有以下好处:
- 方便对流水线上的代码进行复查/迭代;
- 对管道进行审计跟踪;
- 流水线真正的源代码能够被项目的多个成员查看和编辑。
一、环境变量
静态变量
Jenkins 有许多内置变量可以直接在 Jenkinsfile 中使用,可以通过 JENKINS_URL/pipeline-syntax/globals#env 获取完整列表。目前比较常用的环境变量如下:
- BUILD_ID:当前构建的 ID,与 Jenkins 版本 1.597+中的 BUILD_NUMBER 完全相同;
- BUILD_NUMBER:当前构建的 ID,和 BUILD_ID 一致;
- BUILD_TAG:用来标识构建的版本号,格式为:jenkins- J O B N A M E − {JOB_NAME}- JOBNAME−{BUILD_NUMBER},可以对产物进行命名,比如生产的 jar 包名字、镜像的 TAG 等;
- BUILD_URL:本次构建的完整 URL,比如:http://buildserver/jenkins/job/MyJobName/17/;
- JOB_NAME:本次构建的项目名称;
- NODE_NAME:当前构建节点的名称;
- JENKINS_URL:Jenkins 完整的 URL,需要在 System Configuration 设置;
- WORKSPACE:执行构建的工作目录。
上述变量会保存在一个 Map 中,可以使用 env.BUILD_ID 或 env.JENKINS_URL 引用某个内置变量:
Jenkinsfile (Declarative Pipeline)
pipeline {agent anystages {stage('Example') {steps {echo "Running ${env.BUILD_ID} on ${env.JENKINS_URL}"}}}
}
对应的脚本式流水线如下:
Jenkinsfile (Scripted Pipeline)
node {echo "Running ${env.BUILD_ID} on ${env.JENKINS_URL}"
}
除了上述默认的环境变量,也可以手动配置一些环境变量: