1. Jenkins Pipeline语法
1.1. 整体结构
下面是一个Pipeline的案例,一个Pipeline必须包含的agent和stages的定义。
pipeline {
agent { docker 'maven:3.3.3' }
stages {
stage('build') {
steps {
sh 'mvn --version'
}
}
}
}
1.2. 定义执行环境
如果需要使用Docker来运行执行器,需要配置权限,默认YUM安装的Jenkins使用的是Jenkins用户启动,没有读取调用Docker的权限,需要添加权限
[root@dev ~]# usermod -a -G docker jenkins
[root@dev ~]# systemctl restart jenkins
1.3. 使用环境变量
environment {
DISABLE_AUTH = 'true'
DB_ENGINE = 'sqlite'
}
1.4. 增加阶段
注意:阶段(stage)里面不要为空,至少要一个步骤(step)
stage('阶段2') {
steps {
sh 'echo hello CODING'
}
}
stage('阶段3') {
steps {
sh 'echo hello CODING'
}
1.5. 增加步骤
1.5.1. 命令执行
- 打印消息:
echo 'Hello DevOps'
- 执行Shell脚本:
sh 'echo "Hello DevOps"'
- 执行Bat脚本:
bat 'Hello Windows Bat'
- 执行Pipeline脚本:
script {
sh 'echo script'
}
- 变更目录
dir(path: './src')
- 设置休眠时间
单位:
- 秒: SECONDS
- 分: MINUTES
- 时: HOURS
- 天: DAYS
- 纳秒: NANOSECONDS
- 微妙: MICROSECONDS
- 毫秒: MILLISECONDS
sleep(time: 5, unit: 'MINUTES')
- 错误信号
error '错误信号:这是一个自定义的错误信息'
1.5.2. 流程控制
- 重试步骤
如果一个步骤经常性执行失败,可以增加重试控制,count为重试的次数。
retry(count: 3) {
echo 'Hello DevOps'
}
- 超时控制
如果要限制一个步骤的执行时间,可以增加超时控制,超时会强制终止。
timeout(time: 60, activity: true) {
echo 'Hello DevOps'
}
- 重试+超时控制
流程控制语句可以自由组合。例如我们想要重试部署任务 5 次,但是总共花费的时间不能超过 3 分钟。
steps {
timeout(time: 3, unit: 'MINUTES') {
retry(5) {
sh './flakey-deploy.sh'
}
}
}
1.5.3. 完成时控制
post {
always {
echo 'This will always run'
}
success {
echo 'This will run only if successful'
}
failure {
echo 'This will run only if failed'
}
unstable {
echo 'This will run only if the run was marked as unstable'
}
changed {
echo 'This will run only if the state of the Pipeline has changed'
echo 'For example, if the Pipeline was previously failing but is now successful'
}
}