声明性限制了用户具有更严格和预定义结构的可用性,使其成为更简单连续输送Pipeline的理想选择。
脚本化提供了极少的限制,因为Groovy本身只能对结构和语法进行限制,而不是任何Pipeline专用系统 。
顾名思义,Declarative Pipeline鼓励声明式编程模型。 尽管Scripted Pipeline遵循更命令性的编程模型 。
1、 声明式 VS 脚本式 steps
声明式特点:
1.最外层必须由pipline{ //do something }来进行包裹
2.不需要分好作为分隔符,每个语句必须在一行内
3.不能直接使用groovy语句(例如循环判断等),需要被script {}包裹
脚本式特点:
1.最外层有node{}包裹
2.可直接使用groovy语句
2、 超时重试 Jenkins 运行多个步骤_w3cschool
部署”阶段重试flakey-deploy.sh脚本3次,然后等待health-check.sh脚本执行最多3分钟
3、 post 当Pipeline完成执行后,您可能需要运行清理步骤或根据Pipeline的结果执行某些操作。可以在本post节中执行这些操作。 Jenkins 运行多个步骤_w3cschool
always
运行,无论Pipeline运行的完成状态如何。
changed
只有当前Pipeline运行的状态与先前完成的Pipeline的状态不同时,才能运行。
failure
仅当当前Pipeline处于“失败”状态时才运行,通常在Web UI中用红色指示表示。
success
仅当当前Pipeline具有“成功”状态时才运行,通常在具有蓝色或绿色指示的Web UI中表示。
unstable
只有当前Pipeline具有“不稳定”状态,通常由测试失败,代码违例等引起,才能运行。通常在具有黄色指示的Web UI中表示。
aborted
只有当前Pipeline处于“中止”状态时,才会运行,通常是由于Pipeline被手动中止。通常在具有灰色指示的Web UI中表示。
4、执行环境 Jenkins 定义执行环境_w3cschool
当Pipeline执行时,Jenkins将自动启动指定的容器并执行其中定义的步骤
5、 环境变量
6、证书 密码 Jenkins 使用环境变量_w3cschool
7、 通知 post
8、 agent的使用 Pipeline 语法_w3cschool
any
在任何可用的代理上执行Pipeline或舞台。例如: agent any
none
当在 pipeline块的顶层应用时,将不会为整个Pipeline运行分配全局代理,并且每个 stage部分将需要包含其自己的 agent部分。例如: agent none
label
使用提供的标签在Jenkins环境中可用的代理上执行Pipeline或阶段性执行。例如: agent { label 'my-defined-label' }
node
agent { node { label 'labelName' } }
行为相同 agent { label 'labelName' },但 node允许其他选项(如 customWorkspace)。
docker
Pipeline,或阶段执行,用给定的容器将被动态地供应一个节点预先配置成接受基于Docker-based Pipelines,或匹配的任选定义的节点上 label的参数。 docker还可以接受一个 args可能包含直接传递给 docker run调用的参数的参数。例如: agent { docker 'maven:3-alpine' }或
: agent none在Pipeline顶层定义确保执行者不会被不必要地分配。使用 agent none也强制每个 stage部分包含自己的 agent部分
9 options Pipeline 语法_w3cschool
options指令能够提供给脚本更多的选项
备注:当options作用在stage内部的时候,可选的只能是跟stage相关的选项(skipDefaultCheckout、timeout、retry、timestamps)
10、 parameters Pipeline 语法_w3cschool
可用参数
串
字符串类型的参数,例如: parameters { string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') }
booleanParam
一个布尔参数,例如: parameters { booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '') }
实战案例 版本分支参数:
声明式:
脚本:
11、 触发器
cron
作用:以指定的时间来运行pipeline
triggers { cron('H 4/* 0 0 1-5') }
pollSCM
作用:以固定的时间检查代码仓库更新(或者当代码仓库有更新时)自动触发pipeline构建
triggers { pollSCM('H 4/* 0 0 1-5') }
12 tools
支持的工具
maven
jdk
gradle
13 when Pipeline 语法_w3cschool
该when指令允许Pipeline根据给定的条件确定是否执行该阶段
作用: stage指令内
内置条件
branch
当正在构建的分支与给出的分支模式匹配时执行阶段,例如:when { branch 'master' }。请注意,这仅适用于多分支Pipeline。
environment
当指定的环境变量设置为给定值时执行阶段,例如: when { environment name: 'DEPLOY_TO', value: 'production' }
expression
当指定的Groovy表达式求值为true时执行阶段,例如: when { expression { return params.DEBUG_BUILD } }
not
当嵌套条件为false时执行阶段。必须包含一个条件。例如:when { not { branch 'master' } }
allOf
当所有嵌套条件都为真时,执行舞台。必须至少包含一个条件。例如:when { allOf { branch 'master'; environment name: 'DEPLOY_TO', value: 'production' } }
anyOf
当至少一个嵌套条件为真时执行舞台。必须至少包含一个条件。例如:when { anyOf { branch 'master'; branch 'staging' } }
14 script 在声明式 pipeline 中 使用脚本式语法
15 if else 流控
16 、input:input指令允许暂时中断pipeline执行,等待用户输入,根据用户输入进行下一步动作