jenkinsfile语法与全局变量

    技术2022-07-11  83

    jenkins 学习

    jenkinsfile 有两种格式 声明式和 脚本式

    主要学习声明式

    pipeline { agent any //提供代理执行流水线 environment { //设置整个流水线的环境变量 } stages { stage('步骤名') { when { //条件判断 } steps{ //步骤具体执行 } } } post{ } }

    agent:

    指定运行代理环境

    位置:

    在 pipeline 内的最前, 必填

    指定整个 pipeline 的运行代理环境

    在 stage 内的最前, 非必填

    指定当前 stage 的运行代理环境

    选项:

    any: 在任何可用的代理上执行 pipeline 或 stage

    lable: 根据 jenkins 集群节点名称设置代理,

    pipeline { agent {label 'master'} stages { stage('步骤名') { steps{ //步骤具体执行 } } } }

    node: 指定 jenkins 集群节点设置代理, lable指定集群节点名称 customWorkspace自定义工作空间

    pipeline { agent {node { label 'master' customWorkspace '/opt/modules/workspace/' } } stages { stage('步骤名') { steps{ //步骤具体执行 } } } }

    none:

    pipeline 中使用 agent none 表示全局不指定代理, 但每个 stage 需要指定自己的 agent

    pipeline { agent none stages { stage('步骤名') { agent { lable 'slave-1' } steps{ //步骤具体执行 } } } }

    docker

    dockerfile

    environment

    设置环境变量

    位置: 用在 pipeline中 或 stage中

    选项:

    在 pipeline 中定义 environment, 表示 pipeline 全局使用的环境变量

    在 stage 中定义 environment, 表示当前 stage 的环境变量

    environment 中提供了一个 credentials()辅助方法, 用以获取 jenkins 中预先定义的凭证

    pipeline { agent any environment { EVN_PARAM='env-param' ONE_ACCESS_KEY=credentials('custom-secret') } stages { stage('步骤名') { steps{ //步骤具体执行 } } } }

    options

    在 pipeline 内或 stage 内 提供附加的控制

    位置:

    pipeline 内, 最多只能出现一次stage内, 选项只能是 stage 相关: skipDefaultCheckout, timeout, retry, timestamps

    选项:

    buildDiscarder

    持久化工件和控制台输出,用于保存Pipeline最近几次运行的数据例如:options { buildDiscarder(logRotator(numToKeepStr: '1')) }

    checkoutToSubdirectory

    在工作区的子目录中执行源代码检出。例如:options { checkoutToSubdirectory('foo') }

    disableConcurrentBuilds

    不允许并行执行Pipeline。可用于防止同时访问共享资源等。例如:options { disableConcurrentBuilds() }

    preserveStashes

    保留已完成构建的存储,用于stage重新启动。例如:options { preserveStashes() }保存最近完成的构建中的stash,或者options { preserveStashes(5) }保留最近五个完成的构建中的stash。

    quietPeriod

    设置pipeline的静默期(以秒为单位),覆盖全局默认值。例如:options { quietPeriod(30) }

    retry

    pipline 或 stage 如果失败,请按指定的次数重试。例如:options { retry(3) }

    skipDefaultCheckout

    在pipline 或 stage指令中默认跳过源代码检出。例如:options { skipDefaultCheckout() }

    skipStagesAfterUnstable

    一旦构建状态进入了“不稳定”状态,就跳过stage。例如:options { skipStagesAfterUnstable() }

    timeout

    设置Pipeline或 stage运行的超时时间,之后Jenkins应该中止Pipeline。例如:options { timeout(time: 1, unit: 'HOURS') }

    timestamps

    当执行时,预处理由Pipeline或 stage生成的所有控制台输出运行时间。例如:options { timestamps() }

    parameters

    启动 pipeline 之前可以输入的参数

    位置: pipeline 内

    选项:

    string

    字符串类型的参数,例如: parameters { string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') }

    text

    文本参数,例如: parameters { text(name: 'DEPLOY_TEXT', defaultValue: 'One\nTwo\nThree\n', description: '') }

    booleanParam

    布尔参数,例如: parameters { booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '') }

    choice

    选项参数,例如: parameters { choice(name: 'CHOICES', choices: ['one', 'two', 'three'], description: '') }

    file

    文件参数,指定用户在计划构建时要提交的文件,例如: parameters { file(name: 'FILE', description: 'Some file to upload') }

    password

    密码参数,例如: `parameters { password(name: ‘PASSWORD’, defaultValue: ‘SECRET’, description: ‘A secret password’) }

    Jenkinsfile pipeline { agent any parameters { string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?') text(name: 'BIOGRAPHY', defaultValue: '', description: 'Enter some information about the person') booleanParam(name: 'TOGGLE', defaultValue: true, description: 'Toggle this value') choice(name: 'CHOICE', choices: ['One', 'Two', 'Three'], description: 'Pick something') password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'Enter a password') file(name: "FILE", description: "Choose a file to upload") } stages { stage('Example') { steps { echo "Hello ${params.PERSON}" echo "Biography: ${params.BIOGRAPHY}" echo "Toggle: ${params.TOGGLE}" echo "Choice: ${params.CHOICE}" echo "Password: ${params.PASSWORD}" } } } }

    when

    在 stage 内根据 when 条件决定是否执行

    位置: stage 内

    选项:

    branch: 表示分支条件

    stage{ when {branch 'master'} steps{echo '分支是 master 才执行'} }

    environment: 环境变量条件

    stage{ when {environment name: 'EVN_PARAM', value:'env-param'} steps{echo '环境变量 EVN_PARAM == env-param 才执行'} }

    expression: 表达式条件

    stage{ when {expression { return true }} steps{echo '表达式求值为 true 时 执行'} }

    not: 条件不成立时执行, 条件嵌套使用

    stage{ when { not {branch 'master'}} steps{echo '非 master 才执行'} }

    allOf: 复合条件都成立执行, 条件嵌套使用, 多个条件; 分割

    stage { when {allOf {branch 'master'; environment name:'ENV_PARAM', value:'env-param' }} steps {echo '条件都成立执行'} }

    anyOf: 复合条件存在成立的就执行, 条件嵌套使用

    stage { when {anyOf {branch 'master'; environment name:'ENV_PARAM', value:'env-param' }} steps {echo '条件存在成立执行'} }

    stages stage parallel

    stages 可以包含多个 stage

    parallel 可以包含多个 stage

    stage只能包含一个 steps 或 stages 或 parallel

    parallel 是并行执行的, 包含 parallel 的 stage 不能声明 agent 和 tools, 因为此处声明与 steps 没有关系

    pipeline { agent any environment { SYSTEM_PARA='abc' } stages{ stage('none parallel') { agent{label 'master'} steps{ echo '这不是并行步骤' } } stage('parallel') { parallel{ stage('parallel-1'){ agent{label 'salve-1'} steps{ echo '并行步骤-1' } } stage('parallel-2'){ agent{label 'salve-2'} steps{ echo '并行步骤-2' } } stage('parallel-3'){ agent{label 'salve-3'} steps{ echo '并行步骤-3' } } } } } }

    post

    表示 pipeline 执行结束后需要做的操作

    位置: 放在 pipeline 最后 或 stage 最后

    选项:

    always: 无论什么情况下都会运行changed: 只有当前运行结果状态与之前运行结果状态不同时才会执行failure: 只有 pipeline 执行失败时才会执行success: 只有 pipeline 执行成功时才会执行unstable:aborted: 手动终止 pipeline 时执行, 一般 webUI 显示为灰色的图标cleanup: 无论 pipeline 执行如何, 其它所有 post条件执行结束后执行 cleanup pipeline { agent any stages { stage('步骤名') { steps{ //步骤具体执行 } } } post { always { echo 'pipeline 执行完' } faiure { echo '执行失败' } success { echo '执行成功' } cleanup { echo '清理' } } }

    可以使用 post 部分执行通知操作, 如邮件通知等

    环境变量

    环境变量解释BUILD_NUMBER唯一标识一次buildBUILD_ID基本上等同于BUILD_NUMBER,但是是字符串,用于在1.597+中创建的构建, 旧版本使用时间戳JOB_NAME创建的 jenkins 任务的名称JOB_BASE_NAME此建立项目的名称将剥离文件夹路径BUILD_TAG“jenkins- $ {JOB_NAME} - $ {BUILD_NUMBER} ”的字符串。JOB_NAME中的所有正斜杠(/)都会用破折号( - )替换。方便放入资源文件,jar文件等,以方便识别。NODE_NAME代理的名称NODE_LABELS空格分隔的节点分配的标签列表。JAVA_HOMEWORKSPACE分配给构建作为工作区的目录的绝对路径HUDSON_URL等同于 JENKINS_URLJENKINS_URL完整的Jenkins网址BUILD_URL此任务当前构建的完整URLJOB_URL此任务的完整URLBRANCH_NAME对于多分支项目,这将被设置为正在构建的分支的名称CHANGE_ID对于与某种更改请求相对应的多分支项目,这将被设置为更改ID,例如拉取请求号。CHANGE_URL对于与某种更改请求相对应的多分支项目,这将被设置为更改URL。CHANGE_TITLE对于对应于某种变更请求的多分支项目,这将被设置为更改的标题。CHANGE_AUTHOR对于对应于某种变更请求的多分支项目,这将被设置为拟议更改的作者的用户名。CHANGE_AUTHOR_DISPLAY_NAME对于对应于某种变更请求的多分支项目,这将被设置为作者的人名。CHANGE_AUTHOR_EMAIL对于对应于某种变更请求的多分支项目,这将被设置为作者的电子邮件地址。CHANGE_TARGET对于对应于某种变更请求的多分支项目,这将被设置为可以合并更改的目标或基本分支。BUILD_DISPLAY_NAME当前版本的显示名称EXECUTOR_NUMBER识别执行此构建的当前执行程序(在同一台计算机的执行程序中)的唯一编号。这是您在“构建执行者状态”中看到的数字,但数字从0开始,而不是1。NODE_LABELS空格分隔的节点分配的标签列表。JENKINS_HOMEJenkins主节点上分配的目录绝对路径存储数据。

    各类插件脚本

    创建 pipeline, 编写 jenkinsfile 下有流水线语法, 可以通过这里生成各种插件的集成语法. 并且还有 docker, scm, param等的全局环境变量解释

    Processed: 0.010, SQL: 9