流水线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_USRMYVARNAME_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招式之声明式(前篇)的主要内容,如果未能解决你的问题,请参考以下文章

Spring(十五)之声明式事务

Jenkins系列-Pipeline语法全集

Spring之声明式事务

jenkins的Pipeline代码流水线管理

spring笔记--事务管理之声明式事务

数据库事务之声明式事务