流水线pipeline招式之声明式(前篇)

丈夫欲遂平生志,一载寒窗一举汤。这篇文章主要讲述流水线pipeline招式之声明式(前篇)相关的知识,希望能为你提供帮助。

流水线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指定了流水线的执行节点。
agentnodelabel labelname agetlabellabelname

参数:
  • any 在任何可用的节点上执行pipeline。none 没有指定agent的时候默认。
    pipline agent any stages ...

  • none 没有指定agent的时候默认
  • label 在指定标签上的节点上运行Pipeline。
  • node 允许额外的选项(自定义workspace)。
    agentnode 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_USRMYVARNAME_PSD
定义流水线环境变量,可以定义在全局变量或者步骤中的局部变量。这取决于 environment 指令在流水线内的位置。
agent any//全局变量 environment activeEnv = devstages 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 预测所有由流水线生成的控制台输出,与该流水线发出的时间一致。
【流水线pipeline招式之声明式(前篇)】最后我来总结一下,今天我们主要介绍了声明式的流水线。和agent,post,stages,environment和option几个指令。这里面一定要注意,今天的几个指令,他们都是在pipeline块中定义,下一篇我们开始介绍一些指令,他们既可以在pipeline块中定义,也可以定义在stages步骤中。期待与你共同进步。

    推荐阅读