声明性限制了用户具有更严格和预定义结构的可用性,使其成为更简单连续输送Pipeline的理想选择。
脚本化提供了极少的限制,因为Groovy本身只能对结构和语法进行限制,而不是任何Pipeline专用系统 。
顾名思义,Declarative Pipeline鼓励声明式编程模型。 尽管Scripted Pipeline遵循更命令性的编程模型 。
1.最外层必须由pipline{ //do something }来进行包裹
3.不能直接使用groovy语句(例如循环判断等),需要被script {}包裹
2、 超时重试 Jenkins 运行多个步骤_w3cschool
部署”阶段重试flakey-deploy.sh脚本3次,然后等待health-check.sh脚本执行最多3分钟
3、 post 当Pipeline完成执行后,您可能需要运行清理步骤或根据Pipeline的结果执行某些操作。可以在本post节中执行这些操作。 Jenkins 运行多个步骤_w3cschool
只有当前Pipeline运行的状态与先前完成的Pipeline的状态不同时,才能运行。
仅当当前Pipeline处于“失败”状态时才运行,通常在Web UI中用红色指示表示。
仅当当前Pipeline具有“成功”状态时才运行,通常在具有蓝色或绿色指示的Web UI中表示。
只有当前Pipeline具有“不稳定”状态,通常由测试失败,代码违例等引起,才能运行。通常在具有黄色指示的Web UI中表示。
只有当前Pipeline处于“中止”状态时,才会运行,通常是由于Pipeline被手动中止。通常在具有灰色指示的Web UI中表示。
4、执行环境 Jenkins 定义执行环境_w3cschool
当Pipeline执行时,Jenkins将自动启动指定的容器并执行其中定义的步骤
- // 变量定义
- def DEPLOY_ENVIRONMENT = "dev"
- // 变量定义
- def DEPLOY_VER = "1.1"
- // if对变量进行判断。
- if (DEPLOY_ENVIRONMENT == "dev") {
- CURRENT_ENVIRONMENT="development"
- // else if 的写法。
- } else if (DEPLOY_ENVIRONMENT == "test"){
- CURRENT_ENVIRONMENT="test"
- }
- // 变量定义
- def CURRENT_VER = "${CURRENT_ENVIRONMENT}-${DEPLOY_VER}"
- node {
- echo "当前的部署环境为:${CURRENT_ENVIRONMENT}"
- echo "当前的部署版本为:${CURRENT_VER}"
- }
6、证书 密码 Jenkins 使用环境变量_w3cschool
8、 agent的使用 Pipeline 语法_w3cschool
在任何可用的代理上执行Pipeline或舞台。例如: agent any
当在 pipeline块的顶层应用时,将不会为整个Pipeline运行分配全局代理,并且每个 stage部分将需要包含其自己的 agent部分。例如: agent none
使用提供的标签在Jenkins环境中可用的代理上执行Pipeline或阶段性执行。例如: agent { label 'my-defined-label' }
agent { node { label 'labelName' } }
行为相同 agent { label 'labelName' },但 node允许其他选项(如 customWorkspace)。
Pipeline,或阶段执行,用给定的容器将被动态地供应一个节点预先配置成接受基于Docker-based Pipelines,或匹配的任选定义的节点上 label的参数。 docker还可以接受一个 args可能包含直接传递给 docker run调用的参数的参数。例如: agent { docker 'maven:3-alpine' }或
: agent none在Pipeline顶层定义确保执行者不会被不必要地分配。使用 agent none也强制每个 stage部分包含自己的 agent部分
9 options Pipeline 语法_w3cschool
-
- buildDiscarder:指定build history与console的保存数量
- 用法:options { buildDiscarder(logRotator(numToKeepStr: '1')) }
- disableConcurrentBuilds:设置job不能够同时运行
- 用法:options { disableConcurrentBuilds() }
- skipDefaultCheckout:跳过默认设置的代码check out
- 用法:options { skipDefaultCheckout() }
- skipStagesAfterUnstable:一旦构建状态变得UNSTABLE,跳过该阶段
- 用法:options { skipStagesAfterUnstable() }
- checkoutToSubdirectory:在工作空间的子目录进行check out
- 用法:options { checkoutToSubdirectory('children_path') }
- timeout:设置jenkins运行的超时时间,超过超时时间,job会自动被终止
- 用法:options { timeout(time: 1, unit: 'MINUTES') }
- retry :设置retry作用域范围的重试次数
- 用法:options { retry(3) }
- timestamps:为控制台输出增加时间戳
- 用法:options { timestamps() }
备注:当options作用在stage内部的时候,可选的只能是跟stage相关的选项(skipDefaultCheckout、timeout、retry、timestamps)
10、 parameters Pipeline 语法_w3cschool
字符串类型的参数,例如: parameters { string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') }
一个布尔参数,例如: parameters { booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '') }
- // Using git without checkout
- pipeline {
- agent any
- parameters {
- gitParameter branchFilter: 'origin/(.*)', defaultValue: 'master', name: 'BRANCH', type: 'PT_BRANCH'
- }
- stages {
- stage('Example') {
- steps {
- git branch: "${params.BRANCH}", url: 'https://github.com/jenkinsci/git-parameter-plugin.git'
- }
- }
- }
- }
- properties([
- parameters([
- gitParameter(branch: '',
- branchFilter: 'origin/(.*)',
- defaultValue: 'master',
- description: '',
- name: 'BRANCH',
- quickFilterEnabled: false,
- selectedValue: 'NONE',
- sortMode: 'NONE',
- tagFilter: '*',
- type: 'PT_BRANCH')
- ])
- ])
- node {
- git branch: "${params.BRANCH}", url: 'https://github.com/jenkinsci/git-parameter-plugin.git'
- }
triggers { cron('H 4/* 0 0 1-5') }
作用:以固定的时间检查代码仓库更新(或者当代码仓库有更新时)自动触发pipeline构建
triggers { pollSCM('H 4/* 0 0 1-5') }
13 when Pipeline 语法_w3cschool
该when指令允许Pipeline根据给定的条件确定是否执行该阶段
当正在构建的分支与给出的分支模式匹配时执行阶段,例如:when { branch 'master' }。请注意,这仅适用于多分支Pipeline。
当指定的环境变量设置为给定值时执行阶段,例如: when { environment name: 'DEPLOY_TO', value: 'production' }
当指定的Groovy表达式求值为true时执行阶段,例如: when { expression { return params.DEBUG_BUILD } }
当嵌套条件为false时执行阶段。必须包含一个条件。例如:when { not { branch 'master' } }
当所有嵌套条件都为真时,执行舞台。必须至少包含一个条件。例如:when { allOf { branch 'master'; environment name: 'DEPLOY_TO', value: 'production' } }
当至少一个嵌套条件为真时执行舞台。必须至少包含一个条件。例如:when { anyOf { branch 'master'; branch 'staging' } }
14 script 在声明式 pipeline 中 使用脚本式语法