流水线pipeline招式之声明式(前篇)
Posted 小圆和他的朋友们
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了流水线pipeline招式之声明式(前篇)相关的知识,希望对你有一定的参考价值。
这一篇开始,我会聊一聊声明式流水线,由于声明式流水线的内容会比较多,所以会分几篇进行介绍。声明式也是Jenkins最重要的部分之一。它可以用一种简洁直白的方式,来定义我们构建的过程。
声明式Pipleine是官方推荐的语法,声明式语法更加简洁。所有的声明式Pipeline都必须包含一个 pipeline块中,比如:
pipeline
//run
在声明式Pipeline中的基本语句和表达式遵循Groovy的语法。但是有以下例外:
- 流水线顶层必须是一个块,特别是pipeline。
- 不需要分号作为分割符,是按照行分割的。
- 语句块只能由阶段、指令、步骤、赋值语句组成。例如: input被视为input()。
那么Jenkins pipeline支持多少哪些指令呢
pipeline的指令是有作用域的,类似于我们再配置nginx的参数,有的要放在http模块里面,有的要放在location里面,有的可以放在http和location里面,而pipeline中的也一样,有的可以放在pipeline
中,和stage是平行的。有的是放在stage中。当然也有可以两个中任意一个,基本支持如下的指令:
- environment 用于设置环境变量,可定义在stage或pipeline部分
- tools 可定义在pipline或者stage部分。他会自动下载并安装我们指定的工具,并将其假如PATH变量中
- input 定义在stage部分,会暂停pipline。提示输入内容
- option 用于配置Jenkins pipeline本身的选项,定义在stage或者pipeline部分,如重试次数,或者超时配置。
- parallel 并行多个step。
- parameters 与input不同,这个指令定意思传入的参数
- triggers 用于定义执行pipeline的触发器
- when 满足条件才执行。
agent指令
agent
指定了流水线的执行节点。
agent node label labelname
aget label labelname
参数:
- any 在任何可用的节点上执行pipeline。none 没有指定agent的时候默认。
pipline agent any stages ...
- none 没有指定agent的时候默认
-
label 在指定标签上的节点上运行Pipeline。
- node 允许额外的选项(自定义workspace)。
agent node label "master" customWorkspace "$workspace"
指定了额外的customWorkspace,需要弄node包一层。
post,运行后处理
定义了一个或者多个steps,这些阶段根据流水线或者阶段的完成情况而运行(取决于流水线中post部分的位置)。post支持以下post-condition
块中的其中之一,always 、changed、failure、success、unstable、aborted。这些条件块允许在post部分的步骤的执行取决于流水线或者阶段的完成状态。
当流水线完成后根据完成的状态做一些任务。例如:构建失败后邮件通知。
post
always
echo I will always say Hello again!
failure
email : xxxx@dxx.com
常用的状态:
- always 无论流水线或者阶段的完成状态。
- changed 只有当流水线或者阶段完成状态与之前不同时。
- failure 只有当流水线或者阶段状态为"failure"运行。
- success 只有当流水线或者阶段状态为"success"运行。
- unstable 只有当流水线或者阶段状态为"unstable"运行。例如:测试失败。
-
aborted 只有当流水线或者阶段状态为"aborted "运行。例如:手动取消。
- fixed 上次完成状态为失败或者unstable,当前完成状态为成功时执行
- regression 上次完成状态为成功,当前完成状态为失败,不稳定或aborted时执行
- cleaup 不论当前完成状态是什么,在其他所有条件块执行完成后都执行。
stages阶段
stages
是流水线的整个运行阶段,包含一个或多个 stage
, 建议 stages
至少包含一个 stage
。
stages
stage(Example)
steps
echo Hello World
environment,环境变量
environment指令指定一个键值对序列,该序列将定义为所有步骤的环境变量,或者是特定于阶段的步骤,这取决于environment指令在流水线内的位置
该指令支持一个特殊的方法credentials()
.该方法可用于在jenkins环境中通过标识符访问预定义的凭证。对于类型为Secret Text
的凭证,credentials()
将确保指定环境变量包含秘密文本内容。对于类型为SStandard username and password
的凭证,指定的环境变量指定为username:password
,并且两个额外的环境变量被自动定义。分别为MYVARNAME_USR
和MYVARNAME_PSD
。
定义流水线环境变量,可以定义在全局变量或者步骤中的局部变量。这取决于 environment 指令在流水线内的位置。
agent any
//全局变量
environment
activeEnv = dev
stages
stage(Example)
//局部变量
environment
AN_ACCESS_KEY = credentials(my-prefined-secret-text)
steps
sh printenv
options运行选项
定义流水线运行时的配置选项,流水线提供了许多选项, 比如buildDiscarder,但也可以由插件提供, 比如 timestamps。
agent any
options
timeout(time: 1, unit: HOURS)
stages
stage(Example)
steps
echo Hello World
其他部分参数:
- buildDiscarder: 为最近的流水线运行的特定数量保存组件和控制台输出。自动清理硬盘上保存的的制品和构建日志。
options buildDiscarder(logRotator(numToKeepStr: 10))
- disableConcurrentBuilds: 不允许同时执行流水线。 可被用来防止同时访问共享资源等。
options disableConcurrentBuilds(
- overrideIndexTriggers: 允许覆盖分支索引触发器的默认处理。
- skipDefaultCheckout: 在agent 指令中,跳过从源代码控制中检出代码的默认情况。
- skipStagesAfterUnstable: 一旦构建状态变得UNSTABLE,跳过该阶段。
- checkoutToSubdirectory: 在工作空间的子目录中自动地执行源代码控制检出。也就是,可以指定检出到工作空间的子目录中。
options checkoutToSubdirectory(subdir)
- timeout: 设置流水线运行的超时时间, 在此之后,Jenkins将中止流水线。
options timeout(time: 10, unit: HOURS)
- retry: 在失败时, 重新尝试整个流水线的指定次数。注意这个次数包括第一次失败。
options retry(4)
- timestamps 预测所有由流水线生成的控制台输出,与该流水线发出的时间一致。
最后我来总结一下,今天我们主要介绍了声明式的流水线。和agent,post,stages,environment和option几个指令。这里面一定要注意,今天的几个指令,他们都是在pipeline块中定义,下一篇我们开始介绍一些指令,他们既可以在pipeline块中定义,也可以定义在stages步骤中。期待与你共同进步。
以上是关于流水线pipeline招式之声明式(前篇)的主要内容,如果未能解决你的问题,请参考以下文章