Jenkins Pipeline 语法¶
Jenkins 支持**声明式 Pipeline** 、脚本式 Pipeline,工作台主要采用**声明式 Pipeline 语法**,所以本文将重点介绍 Jenkins 声明式语法。
声明式 Pipeline 语法概述¶
Pipeline 脚本基于 Groovy 语言,但即便你不熟悉 Groovy,也可以通过简单的学习来编写基础的 Pipeline 脚本,以下是一个精简的声明式 Pipeline 示例:
pipeline {
agent any // 定义在哪里运行Pipeline,`any`表示可以在任何可用的agent上运行
parameters {
// 设置构建参数
}
environment {
// 设置环境变量
}
stages { // 定义执行的阶段
stage('Build') { // 构建阶段
steps {
// 定义在构建阶段要执行的步骤
}
}
stage('Test') { // 测试阶段
steps {
// 定义在测试阶段要执行的步骤
}
}
stage('Deploy') { // 部署阶段
steps {
// 定义在部署阶段要执行的步骤
}
}
}
}
部分模块介绍¶
Agent¶
agent
部分指定了整个流水线或特定的部分,将会在Jenkins环境中执行的位置,这取于 agent
区域的位置。该部分必须在 pipeline
块的顶层被定义,但是 stage 级别的使用是可选的。
目前工作台界面上已经支持了:
-
any
在任何可用的代理上执行流水线或阶段。例如
agent any
-
none
当在
pipeline
块的顶部没有全局代理, 该参数将会被分配到整个流水线的运行中并且每个stage
部分都需要包含他自己的agent
部分。比如agent none
-
node
agent { node { label 'labelName' } }
,有关应用工作台内置的 node 请参考文档使用内置 lable -
kubernetes
Pod 模板在 kubernetes { } 块内定义。 例如,如果您想要一个内部包含 podman 容器的 Pod,您可以按如下方式定义。 注意:一定要定义 jnlp 容器,目的是与 Jenkins 服务进行通信。
agent { kubernetes { defaultContainer 'kaniko' yaml ''' apiVersion: v1 kind: Pod metadata: labels: jenkins-pipeline: pipeline-amamba-pod spec: containers: - name: podman image: release-ci.daocloud.io/amamba/jenkins-agent/builder-base:v0.2.1-podman resources: limits: cpu: 500m memory: 1024Mi requests: cpu: 100m memory: 100Mi securityContext: privileged: true command: - cat tty: true - name: jnlp image: release-ci.daocloud.io/amamba/jenkins-agent/inbound-agent:4.10-2 resources: limits: cpu: 100m memory: 256Mi requests: cpu: 100m memory: 128Mi ''' }
environment
¶
environment
指令制定一个 键-值对序列,该序列将被定义为所有步骤的环境变量,或者是特定于阶段的步骤,
这取决于 environment
指令在流水线内的位置。
详细介绍参考 Jenkins 官方文档,简单示例如下:
pipeline {
agent any
environment {
CC = 'clang'
// 顶层流水线块中使用的 environment 指令将适用于流水线中的所有步骤。
}
stages {
stage('Example') {
environment { // 在一个 stage 中定义的 environment 指令只会将给定的环境变量应用于 stage 中的步骤。
AN_ACCESS_KEY = credentials('my-prefined-secret-text')
// environment 块有一个 助手方法 credentials() 定义,该方法可以在 Jenkins 环境中用于通过标识符访问预定义的凭证。
}
steps {
sh 'printenv'
}
}
}
}
在 environment
区域中使用凭证¶
对于 secret text、 username and password 和 secret file 类型的凭据,支持通过使用 environment
的方式直接在流水线中使用,其他的凭证使用方式参考使用凭证。
使用方式请参考:
- 通过
environment
使用 Secret text 凭证 - 通过
environment
使用 Usernames and passwords 凭证 - 通过
environment
使用 Secret files 凭证
parameters
¶
parameters
指令提供了一个用户在触发流水线时应该提供的参数列表。这些用户指定参数的值可通过 params
对象提供给流水线步骤。
详细介绍参考 Jenkins 官方文档,简单示例如下:
pipeline {
agent any
parameters {
// 支持的 parameters 类型
string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
text(name: 'BIOGRAPHY', defaultValue: '', description: 'Enter some information about the person')
booleanParam(name: 'TOGGLE', defaultValue: true, description: 'Toggle this value')
choice(name: 'CHOICE', choices: ['One', 'Two', 'Three'], description: 'Pick something')
password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'Enter a password')
}
stages {
stage('Example') {
steps {
echo "Hello ${params.PERSON}"
echo "Biography: ${params.BIOGRAPHY}"
echo "Toggle: ${params.TOGGLE}"
echo "Choice: ${params.CHOICE}"
echo "Password: ${params.PASSWORD}"
}
}
}
}
stages
¶
包含一系列一个或多个 stage 指令,stages
部分是流水线描述的大部分"work" 的位置。
建议 stages
至少包含一个 stage 指令用于连续交付过程的每个离散部分,比如构建,测试,,和部署。
steps
¶
steps
部分在给定的 stage
指令中执行的定义了一系列的一个或多个 steps。
pipeline {
agent any
stages {
stage('Example') {
steps { // steps 部分必须包含一个或多个步骤。
echo 'Hello World'
}
}
}
}
以上仅描述了部分声明式 Pipeline,详细可参考 Jenkins 官方的语法介绍。