赞
踩
声明式语法是Jenkins提供的一种新的选择。
代码编排在清晰的段落中,相对于只关注实现逻辑,这些流水线的主要区域描述了我们所期望的流水线的状态和输出。
优点
缺点
一个声明式流水线是由一个包含了一些指令和部分的外套代码块组成的。
代码块
部分
声明式流水线中的部分是一种方法,用于收集在整个流水线流程的某些特殊点上需要被执行的项目。
指令
流水线中的指令可以被认为是一个做任何以下事情的语句或代码块。
步骤
条件
声明式流水线的结构
pipeline
agent
用来指定整个流水线或者 一个特定的 阶段在哪 里运行。这与脚本式流水线中的 node 令用法相似 。
在靠近pipeline代码块 的顶部 ,必须要有一个 agent指令用来指 定“默认的” 执行节点。
这个 agent 指令所做 的事情,实际上就是指 明使用哪一个 节点去 执行流水线或阶 段。
常用方法:
示例:
environment
定义全局环境变量
environment {
username = 'test'
password = "123456"
}
tools
可以让我们指定哪些工具需要在我们已经选择的代理节点上自动安装在配置路径下。
options
triggers
这个指令允许你指定使用什么类型的触发器来启动你的流水线构建。当有代码改动时会通过比如 webhook 来通知 Jenkins
触发构建。
cron 语法示例:
parameters参数化构建
示例:
parameters { //参数化构建
choice choices: ['true', 'false'], description: '测试', name: 'test' //选择参数
string name: 'NEW_BRANCH', defaultValue: '', description:'', trim: true //字符串参数
listGitBranches branchFilter: '.*/feature.*||.*/dev', credentialsId: 'devops',
defaultValue: '', name: 'BRANCH', quickFilterEnabled: true, remoteURL: 'https://192.168.1.2/devops.git', selectedValue: 'NONE',
sortMode: 'DESCENDING_SMART', tagFilter: '*', type: 'PT_BRANCH' //列出git分支
}
libraries共享库
使用共享库,有关共享库的详细内容参考文章:jenkins扩展你的流水线(共享库)
stages
在 一个声明式流水线中,单个阶段的集合被封装在 stages 部分,这使得我们的声明式流水线更加结构化。
stages是一个必须的部分
定义阶段名,在流水线构建的时候能够展现出来,让使用者能够直观地知道这个阶段是做什么的
在任何阶段,你都可以有条件地执行。也就是说,你可以让Jenkins 基于一个或者多个可以评估为true 的条件去决定是否执行该阶段中的步骤。这是一个可选结构,并且不能用在流水线脚本的顶层
示例:
post
post 也是一个既可以在流水线中也可以在阶段中使用的部分。它在两个地方都是可选的。
post 部分可以放在 一个阶段的结尾或者 整个流水线的结尾
完整示例
pipeline { agent any environment { //设置全局变量 username = 'test' password = "123456" } parameters { //参数化构建 choice choices: ['true', 'false'], description: '测试', name: 'test' string name: 'NEW_BRANCH', defaultValue: '', description:'', trim: true } stages { stage('阶段一') { steps { deleteDir() //清空当前${WORKSPACE}下面的内容 sh ''' echo "执行Shell命令" ''' } } stage('阶段二') { steps { sh ''' echo "执行Shell命令" ''' } } stage('并行') { parallel { stage('Stage1') { steps { echo "Stage1" } } stage('Stage2') { steps { echo "Stage2" } } } } } post { //构建后处理 always { echo "总是执行" } failure { echo "失败后执行" } success { echo "成功后执行" } } }
流水线语法生成器
如果不知道某些插件的用法,可以通过Jenkins自带的流水线语法生成器来查看
以参数化构建为例,配置好之后,点击"Generate Dectarative Directive"
即可在下方生成代码,直接复制到Groovy脚本即可
在声明式流水线中使用非声明式的代码是会报错的,可以有以下几种方法来规避
检查你的插件
创建一个共享库
在pipeline 代码块之外放置代码
script语句(推荐)
window和linux的stage是并行执行的
stage("build, deploy and test on Windows and Linux") { parallel { stage("windows") { stages { stage("build") { steps { timestamps { echo "build on windows." } } } stage("deploy") { steps { timestamps { echo "deploy on windows." } } } } } stage("linux") { stages { stage("build") { steps { timestamps { echo "build on linux." } } } stage("deploy") { steps { timestamps { echo "deploy on linux." } } } } } } }
注释
单行注释:用双左斜线(//)
多行注释
/** 多行注释:
* 第一行
* 第二行
*/
执行shell脚本
sh '''
shell命令
'''
或者
sh """
shell命令
"""
单引号:(shell优先)
获取shell变量——${key}
不能获取groovy通过def定义的变量
可以获取参数化定义的值
shell自身定义的变量会覆盖jenkins参数化定义的变量
双引号:(def定义的优先)
获取groovy定义的变量——${key}
获取shell变量——\${key} #需要通过\进行转义
建议:声明式流水线用三单引号,脚本式流水线用三双引号
到指定目录下执行
如果指定的目录不存在,会创建
dir('docker') {
xxxxx
}
文章:《Jenkins2权威指南》
史上最全 Jenkins Pipeline流水线详解
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。