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 { // 选择一个节点 标签带有 masterlabel "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 构建取消!"}}}}
