Jenkinsfile语法

1、CI/CD的基本概念介绍

  • 持续集成CI(Continuous integration): 即频繁地(一天多次)将代码集成到主干。 就是让产品可以快速迭代,同时还能保持高质量。 它主要是在开发阶段执行,它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。

举个例子:一般我们进行UI/API自动化用例部署后,只要开发那边Git提交了代码,就会自动触发我们的用例执行,然后发送测试报告,从某种意义上来说,其实就是进行冒烟测试,只是这一部直接自动集成了
那持续集成有什么优点呢?
(1)可以快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。
不像瀑布模型一样到最后产品都完成开发时,才提交测试,那到时候遗留的bug就会很多,会花费很多时间成本

(2)防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。 
一般在开发阶段,不同的开发不同的需求都会拉不同的分支,等这个分支的代码测试全部验证通过后才会合到master分支,持续集成
 

  • 持续交付CD(Continuous delivery): 频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。持续交付可以看作持续集成的下一步。可以理解为在 【预发布阶段】,它强调的是,不管怎么更新,软件是随时随地可以交付的。
  • 持续部署 CD(continuous deployment): 是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。
  • 持续部署的前提是能自动化完成测试、构建、部署等步骤。

2、Jenkinsfile语法基本介绍

语法形式有两种:

  • V2.5之后引入,结构化方式:Declarative pipeline
  • 基于groovy的语法:Scripts pipeline

3、Declarative pipeline

  • 基本使用

— 必须包含在一个pipeline块内,具体来说是:pipeline{}

— 基本的部分 是“steps”,steps即告诉Jenkins要做什么

— 语句分类具体包含 【Sections,Directives,Steps,赋值】 等几大类

3.1、agent使用

  • 基本介绍

        agent:即定义pipeline执行节点,是必须出现的指令

  • 参数:

    --    any:可以在任意agent上执行pipeline    
    --    none:pipeline将不分配全局agent,每个stage分配自己的agent    
    --    label:指定运行节点的Label    
    --    node:自定义运行节点配置
         -    指定label
         -    指定customWorkspace         
    --    docker:控制目标节点上的docker运行相关内容

  •  代码示例
# 指定运行节点为slave,工作区间为mikasaWorkspace

pipeline{
    agent{
        node{
            label "slave"
            customWorkspace "mikasaWorkspace"
        }
    }
}

3.2、[stages,stage,steps]使用

  • 基本介绍
指令作      用参数备    注
stages包含一个或多个stage的序列,Pipeline的大部分工作在此执行,必需出现每个pipeline代码区间中必须只有一个stages
stage包含在stages中,pipeline完成的所有实际工作都需要包含到stage中,必需出现需要定义stage的名字
steps包含在stage代码区间中,必需出现具体执行步骤,包含在stage代码区间中
  • 代码示例
# 外层必须包裹一个stages
# stage:定义一个步骤的名字(提交git源码)
# steps:里面写具体执行步骤(输出更新代码,git源码地址)

stages{
    stage('git pull source code')
        steps{
            echo "updated code"
            git "https://github.com/Burden1/Mikasa_pipeline_demo.git"
        }
}

3.3、post使用

  • 基本使用

post:即定义Pipeline或stage运行结束时的操作不是必须出现的指令简单来说,它就是【构建后操作】

  • 参数:

    -- always:无论Pipeline运行的完成状态如何都会运行    
    -- changed:只有当前pipeline运行的状态与先前完成的pipeline的状态不同时,才能运行   
    -- failure:只有当前pipeline处于"【失败】"状态时才能运行    
    -- success:只有当前pipeline处于"【成功】"状态时才能运行    
    -- unstable:只有当前pipeline处于"【不稳定】"状态时才能运行    
    -- aborted:只有当前pipeline处于"【中止】"状态时才能运行

  • 代码示例
# 如果前面的stage操作都运行成功后,就会执行success里面的操作,否则不进入
# always即无论前面的stage操作成功与否,每次执行都会输出'always say goobye'

post{
    success{
        echo 'goodbye mikasa'
        sleep 2
    }
    always{
        echo 'always say goobye'
    }
}

3.4、environment使用

  • 基本使用

environment: 定义pipeline或stage运行时的环境变量,无参数,不是必须出现的指令

  • 代码示例

# 环境里面定义一个mikasa变量
# stages里面输出mikasa,得到结果即:hello mikasa

environment{
    mikasa = 'hello mikasa'
}

stages {
    stage('print enviroment'){
        steps{
            echo mikasa
        }
    }
}

3.5、options使用

  • 基本使用

options: 定义pipeline的专有属性,不是必须出现的指令

  • 参数 

    --    buildDiscarder:保持构建的最大个数    
    --    disableConcurrentBuilds:不允许并行执行pipeline任务    
    --    timeout:pipeline超时时间    
    --    retry:失败后,重试整个pipeline的次数    
    --    timestamps:预定义由pipeline生成的所有控制台输出时间    
    --    skipStagesAfterUnstable:一旦构建状态进入了“Unstable”状态,就跳过此stage

  • 代码示例 
# 若失败,则重试5次

options{
    timeout(time:30,unit:'SECONDS')
    buildDiscarder(logRotator(numToKeepStr: '2'))
    retry(5)
}

3.6、parameters使用

  • 基本使用

parameters: 定义pipeline的专有参数列表,不是必须出现的指令

支持数据类型:booleanParam,choice,credentials,file,text,password,run,string,类似参数化构建的选项
 

  • 代码示例  
# 定义三个string类型的参数
# 步骤里面输出参数
parameters{
    string(name: 'PERSON',defaultValue:'Jenkins',description:'输入的文本参数')
}
    stages {
        stage{
            steps{
                echo "HELLO ${params.PERSON}"
            }
        }
    }

3.7、triggers使用

  • 基本使用

triggers: 定义了pipeline自动化触发的方式,不是必须出现的指令

  • 参数

    --    cron: 接受一个cron风格的字符串来定义pipeline触发的常规间隔

    --    pollSCM: 接受一个cron风格的字符串来定义Jenkins检查SCM源更改的常规间隔;如果存在新的更改,则pipeline将被重新触发

  • 代码示例
# 每个小时构建一次
triggers{
    pollSCM('H * * * *')
}

4、Scripts Pipeline

  • 基本使用

Scripts Pipeline:是基于groovy语法定制的一种DSL语言

  • 优点

— 灵活性更高

— 可扩展性更好

— 与Declarative pipeline 程序构成方式有不同之处,基本语句也有相似之处

4.1、流程控制之if/else使用

  • 代码示例
# node包裹起来,里面定义stage,然后判断当前分支是不是master分支,对应输出结果

node {
    stage('Example'){
        if (env.BRANCH_NAME) == 'master'{
            echo 'I ONLY EXECUTE ON THE MASTER BRANCH'
        }else{
            echo 'i execute elsewhere'
        }
    }
}

4.2、流程控制之try/catch使用

  • 代码示例
# node包裹起来,然后里面进行try catch,其实使用和java差不多

node{
    echo "this is test stage which run on the slave agent"
    try{
        echo "this is in the try block"
    }catch(exc){
        echo "Something failed,i am in the catch block"
    }finally{
        echo "Finally,i am in the finally block"
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值