美文网首页web前端开发
三、Jenkinsfile语法

三、Jenkinsfile语法

作者: InsaneLoafer | 来源:发表于2021-07-04 09:47 被阅读0次

    一、Jenkinsfile语法简介

    • Jenkinsfile支持两种语法形式:
      • Declarative pipeline - v2.5之后引入,结构化方式
      • Scripts pipeline -基于groovy的语法


        image.png

    二、Jenkinsfile语法-Declarative pipeline

    • 必须包含在一个pipeline块内,具体来说是:pipeline { }
    • 基本的部分是“steps”,steps告诉Jenkins要做什么
    • 语句分类具体包含Sections,Directives,Steps,赋值等几大类

    Declarative 语句树

    image.png
    • agent:定义pipeline执行节点
    • 参数
      • 必须出现的指令
      • any:以在任意agent上执行pipeline
      • none:pipeline将不分配全局同agent,每个stage分配自己的agent
      • label:指定运行节点的Label
      • node:自定义运行节点配置,
        • 指定label
        • 指定customWorkspace
      • docker:控制目标节点上的docker运行相关内容
    • 示例代码:
    pipeline{
        agent{
            node{
                label "myslave"
                customWorkspace "myWorkspace"
            }
        }
    }
    

    必要参数

    • stages:包含一个或多个stage的序列,Pipeline的大部分工作在此执行

      • 必须出现的指令
      • 无参数
      • 每个pipeline代码区间中必须只有一个stages
    • stage:包含在stages中,pipeline完成的所有实际工作都需要包含到stage中

      • 必须出现的指令
      • 无参数
      • 需要定义stage的名字
    • steps:

      • 必须出现的指令
      • 无参数
      • 具体执行步骤,包含在 stage代码区间中
    • 示例代码:

    stages{
        stage('git pull source code'){
            steps{
                echo 'sync update code'
                git 'https://github.com/priceqjzh/iPipeline.git'
            }
        }
    }
    

    非必要参数post

    • post:定义Pipeline或stage运行结束时的操作

    • 参数

      • 不是必须出现的指令
      • always:无论Pipeline运行的完成状态如何都会运行
      • changed:只有当前Pipeline 运行的状态与先前完成的Pipeline的状态不同时,才能运行
      • failure:仅当当前Pipeline处于“失败”状态时才运行
      • success:仅当当前Pipeline具有“成功”状态时才运行
      • unstable:只有当前Pipeline具有“不稳定”状态才能运行
      • aborted:只有当前Pipeline处于“中止”状态时才能运行
    • 示例代码

    
    post{
        success{
            echo 'goodbye pipeline success'
            sleep 2
        }
        always{
            echo 'always say goodbye'
        }
    }
    

    非必要参数environment

    • environment:定义Pipeline或stage运行时的环境变量
    • 参数
      • 不是必须出现的指令
      • 无参数
    • 示例代码:
    environment{
        hlw='hello world'
    }
    stages{
        stage('Print environment_1'){
            steps{
                echo hlw
            }
        }
    }
    

    非必要参数options

    • options:定义pipeline的专有属性
    • 参数
      • 不是必须出现的指令
      • buildDiscarder:保持构建的最大个数
      • disableConcurrentBuilds:不允许并行执行pipeline任务
      • timeout:pipeline 超时时间
      • retry:失败后,重试整个Pipeline的次数
      • timestamps:预定义由Pipeline生成的所有控制台输出时间
      • skipStagesAfterUnstable:一旦构建状态进入了“Unstable”状态,就跳过此stage
    • 示例代码:
    options{
        timeout(time:30, unit:'SECONDS')
        buildDiscarder(logRotator(numToKeepStr:'2'))
        retry(5)
    }
    

    非必要参数

    • parameters:定义pipeline的专有参数列表
    • 参数
      • 不是必须出现的指令
      • 支持数据类型:booleanParam,choice,credentials,file,text,password,run,string
      • 类似参数化构建的选项
    • 示例代码:
    parameters{
        string(name:'PERSON', defaultValue:'Jenkins', description:'输入的文本参数')
        }
        stages{
            stage('Test Parameters'){
                steps{
                    echo "Hello ${params.PERSON}"
                }
            }
        }
    

    非必要参数triggers

    • triggers:定义了Pipeline自动化触发的方式
    • 参数
      • 不是必须出现的指令
      • Cron:接受—个cron风格的字符串来定义Pipeline触发的常规间隔
      • pollSCM:接受一个cron风格的字符串来定义 Jenkins检查SCM源更改的常规间隔;如果存在新的更改,则Pipeline将被重新触发。
    • 示例代码:
    triggers{
        pollSCM('H */4 * * 1-5')
    }
    

    三、Jenkinsfile语法Scripts pipeline

    • 基于groovy语法定制的一种DSL语言
      • 灵活性更高
      • 可扩展性更好
      • Script pipeline 与 Declarative pipeline程序构成方式有雷同之处,基本语句也有相似之处

    Script 语句树

    image.png

    流程控制之 - if/else

    node{
        stage('Example'){
            if (env.BRANCH_NAME == 'master'){
                echo 'I only execute on the master brach'
            }else{
                echo 'I execute elsewhere'
            }
        }
    }
    

    流程控制之 - try/catch

    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'm in the catch block"
        }finally{
            echo "Finally, I'm in the finally block."
        }
    }
    

    groovy 语句设置

    • groovy语句控制环境变量与运行命令
      • 定义maven工具变量的名称与位置
      • 定义java工具变量的名称与位置
      • 工具设置位置“Manage Jenkins” -> “Global Tool Configuration”
    image.png
    image.png
    image.png
    • script 代码中引用、配置环境变量
    • script代码中引用maven具与java工具


      image.png

    相关文章

      网友评论

        本文标题:三、Jenkinsfile语法

        本文链接:https://www.haomeiwen.com/subject/iircultx.html