Pipeline语法介绍
简介
Pipeline 是一种用于定义和自动化软件交付过程的工具,它可以通过代码进行持续集成和持续交付。Pipeline 主要有两种模式:Declarative Pipeline 和 Scripted Pipeline。Declarative Pipeline 提供了一种更简单、结构化的方式来定义构建过程,适合大多数用户;而 Scripted Pipeline 则允许更大的灵活性,采用 Groovy 语言编写,适合需要复杂逻辑的场景
Declarative Pipline
demo演示
pipeline {
agent { label 'test_XXX' }
stages {
stage('测试阶段1') {
steps {
echo '安装虚拟机'
}
}
stage('测试阶段2') {
steps {
echo '功能测试'
}
}
}
post {
always {
echo "清理环境"
}
}
}
上面是一个简单的流水线,其中包含两个测试阶段,在我们实际工作中可以根据不同的使用场景,设计不同的阶段,每个stage代表一个测试阶段,Jenkins会按照从上到下的顺序依次执行每个stage,当前两个测试阶段执行完成后,最后执行post内操作,以上示例只是为了让大家先简单感受一下Pipeline的玩法,下面会详细介绍Pipeline的重点语法
语法讲解
含义:包括一个或者多个stage的序列,Pipeline的大部分工作在此执行,必须出现的指令,每个Pipeline代码区间中必须只有一个stages
含义:包含在stages中,Pipeline完成的所有实际工作都需要包含在stage中,必须出现的指令,需要定义stage的名字
含义:具体执行步骤,包含stage代码区间中,必须出现的指令
stages{
stage('描述本阶段的任务') {
step{
echo "开始下载代码"
git "https:XXXXXXX"
}
}
}
含义:定义全局变量,不是必须出现的指令
environment {
version = "1070"
version_a = "1070a"
}
post {
always {
echo "总是运行"
}
success {
echo "成功了,运行起来"
}
}
使用示例:
options {
timestamps() //日志会显示时间 需要安装timestamps插件
skipDefaultCheckout() //删除隐式的checkout scm语句,比如说,流水线中有代码库,他会查看你是否下载,帮你下载,设置后会取消这些操作
disableConcurrentBuilds() //禁止并行
timeout(time:1,unit:'HOURS') //流水线超时时间设置为1h
}
skipStagesAfterUnstable使用示例,此情景会跳过Deploy测试阶段:
Pipeline {
agent any
options {
skipStagesAfterUnstable() // 启用这个选项
}
stages {
stage('Build') {
steps {
echo 'Building...'
}
}
stage('Test') {
steps {
script {
// 定义实际的条件,例如:
def someCondition = true
// 模拟测试不稳定
if (someCondition) {
currentBuild.result = 'UNSTABLE'
}
}
}
}
stage('Deploy') {
steps {
echo 'Deploying...'
}
}
}
}
-
parameters
含义:
定义Pipeline的触发参数,不是必须出现的指令,支持数据类型:booleanParam(布尔),choice(选择),credentials(证书),file(文件),text(文本),password(密码),run(运行时参数),string(字符串)
定义参数PERSON,触发jenkins工程的时候,需要输入参数的值,才能成功触发工程
parameters {
string(name:'PERSON',defaultValue:'zuohanxu',description:'左含旭')
}
-
triggers
含义:
定义了Pipeline自动触发的方式
参数:
- cron:接受一个cron风格的字符串来定义Pipeline触发的常规间隔
- pollSCM:接受一个cron风格的字符串来定义jenkins检查SCM源更改的常规间隔,如果存在新的更改,则Pipeline将被重新触发
cron demo:
triggers{
cron('* * * * *')
}
日志显示:

pollSCM demo:
triggers{
pollSCM('H */4 * * 1-5')
}
日志显示:

-
parallel
含义:
可以让多个stage并行执行
demo:
pipeline {
agent any
stages {
stage('并行测试阶段') {
parallel {
stage('测试阶段1') {
steps {
echo '安装虚拟机1'
}
}
stage('测试阶段2') {
steps {
echo '安装虚拟机2'
}
}
}
}
}
}
运行流程:

Scripts Pipeline
demo演示
node {
stage('构建') {
echo '正在构建项目...'
// 这里可以添加构建命令,例如 Maven 或 Gradle
}
stage('测试') {
echo '正在运行测试...'
// 这里可以添加测试命令,例如单元测试
}
stage('部署') {
echo '正在部署应用...'
// 这里可以添加部署命令
}
}
Scripts Pipeline相比Declarative Pipline更加灵活,支持条件判断、循环语句等,下面主要讲解一下重点语句用法:
Declarative Pipline和Scripts Pipeline结合使用
实际工作中,流水线的设计大多会将Declarative和Scripts结合起来使用,这样设计的流水线,在保证结构清晰、简单的情况下,还可以灵活的满足多种场景。结合使用的写法也很简单,主体框架采用Declarative的结构书写方式,在需要Scripts语句的时候,只需要把Scripts语句写在script当中即可,下面是一个简单的demo:
pipeline {
agent any
stages {
stage('Preparation') {
steps {
script {
echo 'Preparing the environment...'
// 这里可以使用 Scripted Pipeline 的逻辑
def branch = 'main'
echo "Checking out branch: ${branch}"
}
}
}
stage('Build') {
steps {
script {
// 使用 Scripted Pipeline 来执行循环
for (int i = 1; i <= 3; i++) {
echo "Building iteration ${i}..."
}
}
}
}
stage('Test') {
steps {
script {
// 使用 Scripted Pipeline 的条件判断
def testsPassed = true
if (testsPassed) {
echo 'All tests passed.'
} else {
echo 'Some tests failed.'
}
}
}
}
stage('Deploy') {
steps {
echo 'Deploying application...'
// 可以继续使用 Declarative 的方式
}
}
}
post {
always {
echo 'Cleaning up...'
}
}
}