pipeline语法基础

pipeline语法基础

Declarative:声明式
Scripted pipeline :脚本式

声明式语法包括以下核心流程:
1.pipeline : 声明其内容为一个声明式的 pipeline 脚本
2.agent: 执行节点(job 运行的 slave 或者 master 节点)
3.stages: 阶段集合,包裹所有的阶段(例如:打包,部署等各个阶段)
4.stage: 阶段,被 stages 包裹,一个 stages 可以有多个 stage
5.steps: 步骤,为每个阶段的最小执行单元,被 stage 包裹
6.post: 执行构建后的操作,根据构建结果来执行对应的操作

1. pipeline

pipeline {
    这里填写具体的语法,外面表示是一个声明式的pipeline
}

2. agent

  • 作用域:可用在全局与 stage 内
  • agent 表明此 pipeline 在哪个节点上执行
  • 是否必须:是
  • 参数:any,none, label, node,docker,dockerfile
agent any #运行在任意的可用节点上

agent none #全局不指定运行节点,由各自 stage 来决定

agent { label 'master' } #运行在指定标签的机器上,具体标签名称由 agent配置决定
agent {
 node {
   label 'my-defined-label'
   customWorkspace 'xxxxxxx'
 }
}
# node{ label 'master'} 和 agent { label 'master' }一样,但是 node 可以扩展节点信息,允许
额外的选项 (比如 customWorkspace )。

agent { docker 'python' }
#使用指定的容器运行流水线,如:
agent {
 docker {
	 image 'maven:3-alpine'
	 label 'my-defined-label'
	 args '-v /tmp:/tmp'
 }
}
# 定义此参数时,执行 Pipeline 或 stage 时会动态的在具有 label 'my-defined-label'标签的node 提供 docker 节点去执行 Pipelines。 docker 还可以接受一个 args,直接传递给 docker run 调用。

agent {
 // Equivalent to "docker build -f Dockerfile.build --build-arg version=1.0.2 ./build/
 dockerfile {
	 filename 'Dockerfile.build'
	 dir 'build'
	 label 'my-defined-label'
	 additionalBuildArgs '--build-arg version=1.0.2'
 }
}

3. environment

environment 指令指定一系列键值对,这些键值对将被定义为所有 step 或 stage-specific step的环境变量

4. options

options 指令允许在 Pipeline 本身内配置 Pipeline 专用选项。Pipeline 本身提供了许多选项,例如 buildDiscarder,但它们也可能由插件提供,例如 timestamps。
在这里插入图片描述

buildDiscarder: pipeline 保持构建的最大个数。用于保存 Pipeline 最近几次运行的数据,如:options { buildDiscarder(logRotator(numToKeepStr: '1')) }

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

skipDefaultCheckout:跳过默认设置的代码 check out。例如:options
{ skipDefaultCheckout() }

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

timeout:设置 Pipeline 运行的超时时间,超过超时时间,job 会自动被终止,例如:options { timeout(time: 1, unit: 'HOURS') }

retry:失败后,重试整个 Pipeline 的次数。例如:options { retry(3) }

timestamps:预定义由 Pipeline 生成的所有控制台输出时间。例如:options { timestamps() }

5. parameters

parameters 指令提供用户在触发 Pipeline 时的参数列表。这些参数值通过该 params 对象可用于 Pipeline stage 中,具体用法如下:
在这里插入图片描述

  • 作用域:被最外层 pipeline 所包裹,并且只能出现一次,参数可被全局使用
  • 好处:使用 parameters 好处是能够使参数也变成 code,达到 pipeline as code,pipeline 中设置的参数会自动在 job 构建的时候生成,形成参数化构建
# key:value的形式,当我们构建项目的时候,可以直接在web界面输入框输入对应key对应的value值,这个key在Pipelibe中就可以直接使用
string
    A parameter of a string type, for example: parameters { string(name:'DEPLOY_ENV', defaultValue: 'staging', description: '') }
# 单选框的形式出现
booleanParam
    A boolean parameter, for example: parameters { booleanParam(name:'DEBUG_BUILD', defaultValue: true, description: '') }
# 目前只支持[booleanParam, choice, credentials, file, text, password, run, string]这几种参数类型,其他高级参数化类型还需等待社区支持。

6. triggers

triggers 指令定义了 Pipeline 自动化触发的方式。目前有三个可用的触发器:cron 和 pollSCM 和 upstream。
在这里插入图片描述

cron
    接受一个 cron 风格的字符串来定义 Pipeline 触发的时间间隔,例如:triggers { cron('H 4/* 0 0 1-5') }
pollSCM
    接受一个 cron 风格的字符串来定义 Jenkins 检查 SCM 源更改的常规间隔。如果存在新的更改,则Pipeline 将被重新触发。例如:triggers { pollSCM('H 4/* 0 0 1-5') }

7. tools

在这里插入图片描述
Supported Tools(Global Tool Configuration)
maven
jdk
gradle

pipeline {
    agent any
    tools {
        #工具名称必须在 Jenkins 管理 Jenkins → 全局工具配置中预配置。
        maven 'apache-maven-3.0.1'
    }
    stages {
        stage('Example') {
        steps {
            sh 'mvn --version'
            }
        }
    }
}

说白了就是可以在pipeline中使用全局工具配置中配置好的工具

8. when

when 指令允许 Pipeline 根据给定的条件确定是否执行该阶段。该 when 指令必须至少包含一个条件。如果 when 指令包含多个条件,则所有子条件必须为 stage 执行返回 true。这与子条件嵌套在一个 allOf 条件中相同(见下面的例子)。更复杂的条件结构可使用嵌套条件建:not,allOf 或 anyOf。嵌套条件可以嵌套到任意深度

内置条件
branch
 当正在构建的分支与给出的分支模式匹配时执行,例如:when { branch 'master' }。请注意,这仅适用于多分支 Pipeline。
 
environment
 当指定的环境变量设置为给定值时执行,例如: when { environment name: 'DEPLOY_TO',value: 'production' }
 
expression
 当指定的 Groovy 表达式求值为 true 时执行,例如: when { expression { returnparams.DEBUG_BUILD } }
 
not
 当嵌套条件为 false 时执行。必须包含一个条件。例如:when { not { branch 'master' } }
 
allOf
 当所有嵌套条件都为真时执行。必须至少包含一个条件。例如:when { allOf { branch'master'; environment name: 'DEPLOY_TO', value: 'production' } }
 
anyOf
 当至少一个嵌套条件为真时执行。必须至少包含一个条件。例如:when { anyOf { branch'master'; branch 'staging' } }
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值