美文网首页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