知识的领域是无限的,我们的学习也是无限期的。这篇文章主要讲述流水线pipeline招式之声明式(后篇)相关的知识,希望能为你提供帮助。
流水线pipeline招式之声明式(前篇)
流水线pipeline招式之声明式(中篇)
【流水线pipeline招式之声明式(后篇)】大家好,今天是pipeline声明式的最后一篇。如果之前的内容还没有看,可以点击上方的的连接。那么废话不多说,开始今天的内容。
when条件判断
when 指令允许流水线根据给定的条件决定是否应该执行阶段。 when 指令必须包含至少一个条件。比如,我们想根据环境去判断执行不同的构建,那么我们可以下成如下样子
stage("test")
when
branch teststeps
echo "deploy test!"stage("prod")
when
branch prodsteps
echo "deploy prod!"
那么when都支持哪些条件的判断呢,我们下面来一一介绍:
branch,当正在构建的分支与模式给定的分支匹配时,执行这个阶段,也就是上面我们说的,通过分支去判断。这只适用于多分支流水线例如:
whenbranch master
environment,当指定的环境变量是给定的值时,执行这个步骤,例如:
whenenvironment name: DEPLOY_TO, value: production
expression, 当指定的Groovy表达式评估为true时,执行这个阶段, 例如:
whenexpressionreturn params.DEBUG_BUILD
not,当嵌套条件是错误时,执行这个阶段,必须包含一个条件,例如:
whennotbranch master
allOf,当所有的嵌套条件都正确时,执行这个阶段,必须包含至少一个条件,例如:
whenallOfbranch master;
environment name: DEPLOY_TO, value: production
anyOf,当至少有一个嵌套条件为真时,执行这个阶段,必须包含至少一个条件,例如:
whenanyOfbranch master;
branch staging
equals,如果期望值和给定的值相同,则执行
when
equals expected: 2, actual: currentBuild.number
buildingTag,如果pipeline所执行的代码被打了tag,则执行。
whne
buildingTag()
tag,如果pipeline所执行的代码被打了tag,并且tag名符合规则,才执行。如果tag值为空,可以写成
tag()
,这个效果和buildingTag()
一样,不论tag名称为什么,都执行。那么tag有几种匹配的方式呢?- EQUALS: 简单的文本比较
when tag pattern: "release-3.1", comparator: "EQUALS"
- GLOB (默认值): Ant风格的路径表达式。由于是默认的使用的时候可以忽略
when
tag pattern: "release-*"
或者写成完整版
when
tag pattern: "release-*", comparator: "GLOB"
- REGEXP: 正则表达式
when tag pattern: "release=\\\\\\d+", comparator: "REGEXP"
parameters
string(name: TEST, defaultValue: ABCD, description: code is adbcd)
设置一个when的条件
whenenvironment name: TEST, value: ABCD
steps
script
println("获取代码")
构建
文章图片
我们可以看到构建成功
文章图片
这个时候我们把参数改变,改为abcde
文章图片
虽然也构建成功了,但是Checkout阶段被跳过了
parallel并行
声明式流水线的阶段可以在他们内部声明多隔嵌套阶段, 它们将并行执行。 注意,一个阶段必须只有一个 steps 或 parallel的阶段。 嵌套阶段本身不能包含 进一步的 parallel 阶段, 但是其他的阶段的行为与任何其他 stageparallel 的阶段不能包含 agent 或 tools阶段, 因为他们没有相关 steps。
stage("CheckOut")
failFast true
parallel
stage("GetCode")
steps
script
println("获取代码")stage("CheckEnv")
steps
script
println("检查环境")
failFast true 当其中一个进程失败时,强制所有的 parallel 阶段都被终止。
这里一定要注意,一般结构是
steges
里面套了多个步骤也就是套了多个stage
,但是呢parallel
模块是在stage
里面所以,相当于一个stage
里面套了多个stage
文章图片
并发的构建,从jenkins的页面看的不是很清楚,我们可以Blue Ocean的插件去看,效果如下
文章图片
script脚本标签
script步骤需要scripted-pipline块并在声明式流水线中执行,对于大多数用例来说,应该声明式流水线中的“脚本”步骤是不必要的,但是它可以提供一个有用的" 逃生出口" ,非平凡的规模和/或复杂性的script块应该被转移到共享库
可以通过此标签嵌入脚本式语法。
stage("Build")
steps
script
println("运行构建")
post
success
script
println("流水线成功后,要做的事情")
currentBuild.description = "\\n 构建成功"
效果如下
文章图片
最后我来总结一下,今天介绍了,三个指令when、parallel和script。Jenkinsfile主要的标签已经介绍完毕。这里需要注意的是它们运行的位置,是在其他指令中,还是在pipline块中。
推荐阅读
- maven构建本地仓库
- 几个常用一键部署脚本
- #yyds干货盘点# linux动态磁盘(raid5)的创建扩容缩容等操作以及各个名词参数的解释,命令详解
- #yyds干货盘点#Golang 字符编码UTF-8Unicode之间的关系
- #yyds干货盘点#--k8s-controller-nginx热更新
- #yyds干货盘点#--linux-VNC安装
- WordPress functions.php-管理html注入和提交表单
- WordPress function.php自动更改
- WordPress function.php为自定义帖子类型添加代码