jenkins pipeline详解
jenkins声明式pipeline
1、什么是pipeline
-
pipeline是jenkins的核心功能,提供一组可扩展的工具
-
通过pipeline的DSL语法可以完成简单到复杂的交付流水线实现
-
声明式是jenkins流水线更友好的特性。
-
jenkins可以定义jenkins的执行步骤
2、为什么使用pipeline

本质上,jenkins是一个自动化引擎,它支持许多自动模式。流水线向Jenkins添加了一组强大的工具,支持用例、简单的持续集成到全面的持续交付流水线。 通过对一系列的发布任务建立标准的模板,用户可以利用更多流水线的特性,比如:
- 代码化: 流水线是在代码中实现的,通常会存放到源代码控制,使团队具有编辑、审查和更新他们项目的交付流水线的能力。
- 耐用性:流水线可以从Jenkins的master节点重启后继续运行。
- 可暂停的:流水线可以由人功输入或批准继续执行流水线。
- 解决复杂发布: 支持复杂的交付流程。例如循环、并行执行。 可扩展性: 支持扩展DSL和其他插件集成。
pipeline整体结构
jenkinsfile使用2种不同的语法编写,分别是声明式和脚本式
- 声明式和脚本式的流水线从根本上是不同的。
- 声明式是jenkins流水线更友好的特性。
- 脚本式的流水线语法,提供更丰富的语法特性。
- 声明式流水线使编写和读取流水线代码更容易设计。
一个完整的声明式pipeline的整体结构如下图:
-
实线是必须的
-
虚线是可选的

一个声明式pipeline的基本示例:
#!groovy
String workspace = "/var/lib/jenkins"
pipeline {
agent {
node { // 选择一个节点 标签带有 master
label "master"
customWorkspace "$workspace"
}
}
options {
timestamps() //日志会有时间
skipDefaultCheckout() //删除隐式checkout scm语句
disableConcurrentBuilds() //禁止并行,禁止一次执行多个任务,前一个任务执行完后,才能执行下一个任务
timeout(time: 1, unit: 'HOURS')
}
triggers {}
parameters {}
environment {}
tools {}
stages {
//下载代码
stage("GetCode"){ //为阶段指定名称
steps{ //步骤
timeout(time:5,unit:"MINUTES"){
script{ //具体的运行代码
println('获取代码')
}
}
}
}
//构建
stage("Build"){
steps{
timeout(time:20, unit:"MINUTES"){
script{
println('应用打包')
}
}
}
}
//代码扫描
stage("CodeScan"){
steps{
timeout(time:30, unit:"MINUTES"){
script{
print("代码扫描")
}
}
}
}
}
post {
always {
script {
println("always")
}
}
success {
script {
currentBuild.description = "\n 构建成功!"
}
}
failure {
script {
currentBuild.description = "\n 构建失败!"
}
}
aborted {
script {
currentBuild.description = "\n 构建取消!"
}
}
}
}

浙公网安备 33010602011771号