jenkins声明式流水线语法详解

打印 上一主题 下一主题

主题 1049|帖子 1049|积分 3147

最基本的语法包罗


  • pipeline:全部有用的声明式流水线必须包罗在一个 pipeline 块中
  • stages:包罗一系列一个或多个stage指令
  • stage:stage包罗在stages中举行,好比某个阶段
  • steps:在阶段中具体得实行操作,一个或多个步骤
agent

指定了整个流水线特定的机器,好比多台slave节点,可以被定义在pipeline块顶层也可以根据stage层定义利用
(jenkins提供比较常用的流水线语法天生,输入对应的参数会主动生产)



  • any:在任意可用署理上实行流水线阶段。agent any
  • label:在设置标签得jenkins环境中可用署理上实行。agent {label ‘my slave’}
  • node:agent { node { label ‘labelName’ } } 和 agent { label ‘labelName’ } 一样, 但是 node 答应额外的选项 (好比 customWorkspace )
pipeline定义:
  1. pipeline {
  2.     agent {
  3.         label 'test1'
  4.     }
  5.     stages {
  6.         stage('Hello') {
  7.             steps {
  8.                 echo 'Hello World'
  9.             }
  10.         }
  11.     }
  12. }
复制代码
stage阶段定义:
  1. pipeline {
  2.     agent any
  3.     stages {
  4.         stage('Hello') {
  5.             agent {
  6.                 label 'test1'
  7.             }
  8.             steps {
  9.                 echo 'Hello World'
  10.             }
  11.         }
  12.     }
  13. }
复制代码
post

post部分定义一个或多个steps,这些阶段根据流水线完成情况而运行


  • always:无论流水线完成状态如何,都继承运行
  • changed:当前流水线完成状态与之前差别时,运行该步骤
  • failure:当前流水线完成状态失败时,运行该步骤
  • success:当前流水线完成状态乐成时,运行该步骤
  • unstable:当前流水线完成状态不稳固时,运行该步骤
  • aborted:当前流水线完成状态停止时,运行该步骤
  1. pipeline {
  2.     agent any
  3.     stages {
  4.         stage('Hello') {
  5.             steps {
  6.                 echo 'Hello World'
  7.                 //echox 'hello world' (失败时)
  8.             }
  9.         }
  10.     }
  11.     post {
  12.         always {
  13.             echo "无论如何都运行"
  14.         }
  15.         failure {
  16.             echo "失败后运行"
  17.         }
  18.         success {
  19.             echo "执行成功后运行"
  20.         }
  21.         aborted {
  22.             echo "异常中断运行"
  23.         }
  24.     }
  25. }
复制代码
模拟差别状态
always + success

always + aborted

always + failure

stages

包罗一个或多个stage指令,至少包罗一个
stage

一个stage标识一个阶段
steps

定义一些列一个或多个步骤操作
  1. pipeline {
  2.     agent any
  3.     stages {
  4.         stage('Hello') {
  5.             steps {
  6.                 echo 'Hello World'
  7.                 sh 'date'
  8.                 sh 'pwd'
  9.             }
  10.         }
  11.     }
  12. }
复制代码
environment

定义为全部步骤的环境变量,全局变量/局部变量取决于environment在流水线的谁人位置
示例
  1. pipeline {
  2.     agent any
  3.     environment {
  4.         CC = '全局变量'
  5.     }
  6.     stages {
  7.         stage('Hello') {
  8.             environment {
  9.                 VV = '局部变量'
  10.             }
  11.             steps {
  12.                 echo "this is ${CC}"
  13.                 echo "this is ${VV}"
  14.             }
  15.         }
  16.     }
  17. }
复制代码
结果

options

答应从流水线内部设置特定的选项,好比timestamps


  • disableConcurrentBuilds:禁止并发构建
  • skipStagesAfterUnstable:构建状态不稳固时,跳过
  • timeout:运行超时时间
  • retry:失败时,重新构建的次数
  • timestamps:控制台时间输出
  • ansiColor:日记输出中启用ANSI颜色代码的支持
示例
  1. pipeline {
  2.     agent any
  3.     options {
  4.         ansiColor('xterm')
  5.         disableConcurrentBuilds()
  6.         retry(3)
  7.         timeout(time: 30, unit: 'SECONDS')
  8.         timestamps()
  9.         skipStagesAfterUnstable()
  10.     }
  11.     stages {
  12.         stage('Hello') {
  13.             steps {
  14.                 echo "hello world"
  15.                 echo "\033[32mThis text is green\033[0m"
  16.             }
  17.         }
  18.     }
  19. }
复制代码
结果

parameters

提供用户在触发流水线时应该提供的参数列表,参数化构建


  • string:字符串范例参数
  • booleanParam:布尔参数
  • choice:从预定义选项列表中选择
  • password:密码参数
示例
  1. pipeline {
  2.     agent any
  3.     parameters {
  4.         string (defaultValue: 'master', description: '主分支区分', name: 'BRANCH_NAME')
  5.         choice (choices: ['dev', 'prod', 'pre'], description: '环境区分', name: 'ENVIRONMENT')
  6.     }
  7.     stages {
  8.         stage('Example') {
  9.             steps {
  10.                 checkout scmGit(branches: [[name: '${BRANCH_NAME}']], extensions: [], userRemoteConfigs: [[credentialsId: 'ae008f10-597f-4332-b2f7-790c9b01074e', url: 'https://gitee.com/liujiangxu/dubbo-demo-web.git']])
  11.             }
  12.         }
  13.         stage('deploy') {
  14.             steps {
  15.                 script {
  16.                     echo "Deploying to ${ENVIRONMENT} environment"
  17.                 }
  18.             }
  19.         }   
  20.     }
  21. }
复制代码
结果


triggers

定义流水线被重新触发的主动化方式


  • cron:实行隔断,雷同任务筹划
  • pollSCM:在设置隔断中,jenkins会查抄新的源代码更新,如果更新,会被触发
  • upstream:其他工程构建后触发
cron示例
  1. pipeline {
  2.     agent any
  3.     triggers {
  4.         cron 'H(29-30) */4 * * * '
  5.     }
  6.     stages {
  7.         stage('Example') {
  8.             steps {
  9.                 echo 'Hello World'
  10.             }
  11.         }
  12.     }
  13. }
复制代码
upstream示例
  1. pipeline {
  2.     agent any
  3.     triggers {
  4.         upstream 'ceshi-pip'
  5.     }
  6.     stages {
  7.         stage('Example') {
  8.             steps {
  9.                 echo '当ceshi-pip任务执行后,触发我自动执行'
  10.             }
  11.         }
  12.     }
  13. }
复制代码
pollSCM示例
  1. pipeline {
  2.     agent any
  3.     triggers {
  4.         pollSCM '* * * * *'
  5.     }
  6.     stages {
  7.         stage('checkout') {
  8.             steps {
  9.                 checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'ae008f10-597f-4332-b2f7-790c9b01074e', url: 'https://gitee.com/liujiangxu/dubbo-demo-web.git']])
  10.                 echo "源代码已更新"
  11.             }
  12.         }
  13.         stage('build') {
  14.             steps {
  15.                 sh 'mvn clean package -DskipTests=true'
  16.             }
  17.         }
  18.         stage('deploy') {
  19.             steps {
  20.                 echo "实际部署步骤,如执行脚本部署等操作"
  21.             }
  22.         }
  23.     }
  24. }
复制代码
tools

定义主动安装和放置PATH的工具一部分,根据全局工具设置选项自定义选择(比方差别业务需要差别的jdk8大概jdk11)如果 agent none 指定,则忽略该操作


  • maven:编译环境
  • jdk:java环境
示例
  1. pipeline {
  2.     agent any
  3.     tools {
  4.         jdk 'openjdk11.0.18'
  5.         maven 'maven1'
  6.     }
  7.     stages {
  8.         stage('Example') {
  9.             steps {
  10.                 sh 'mvn --version'
  11.                 sh 'java -version'
  12.             }
  13.         }
  14.     }
  15. }
复制代码
when

指令答应流水线根据给定的条件决定是否实行该阶段。when必须包罗一个条件,当包罗多个条件时,全部子条件必须返回true才会实行


  • branch:用于查抄当前构建的分支是否与指定的分支模式匹配时实行
  • environment:用于查抄环境变量是否满意给定的名称和值。如果环境变量存在且值匹配时实行
  • not:用于反转另一个条件的结果。如果内部条件不满意(即返回false)时实行
  • allOf:用于组合多个条件,只有当全部子条件都满意时(即都返回true)时实行
  • anyOf:用于组合多个条件,但与allOf差别,只要至少一个子条件满意(即返回true),就会实行
bracnch示例
  1. pipeline {
  2.     agent any
  3.     stages {
  4.         stage('build on master') {
  5.             when {
  6.                 branch 'master'
  7.             }
  8.             steps {
  9.                 echo '构建为master分支时执行' //跳过执行
  10.             }
  11.         }   
  12.     }
  13. }
复制代码
environment示例
  1. pipeline {
  2.     agent any
  3.    
  4.     stages {
  5.         stage('deploy to prod') {
  6.             environment {
  7.                 DEPLOY_X = 'dev'
  8.             }
  9.             when {
  10.                 environment name: 'DEPLOY_X', value: 'prod'
  11.             }
  12.             steps {
  13.                 echo '当变量参数为prod环境时执行' //跳过执行
  14.             }
  15.         }   
  16.     }
  17. }
复制代码
not示例
  1. pipeline {
  2.     agent any
  3.     environment {
  4.         DEPLOY_X = "dev"
  5.     }
  6.    
  7.     stages {
  8.         stage('not build on master') {
  9.             when {
  10.                  not {
  11.                     environment name: 'DEPLOY_X', value: 'prod'
  12.                 }
  13.             }
  14.             steps {
  15.                 echo '当变量参数不为prod环境时执行' //会执行
  16.             }
  17.         }   
  18.     }
  19. }
复制代码
allOf 示例
  1. pipeline {
  2.     agent any
  3.     environment {
  4.         DEPLOY_X = "prod"
  5.     }
  6.    
  7.     stages {
  8.         stage('not build on master') {
  9.             when {
  10.                 allOf {
  11.                     environment name: 'DEPLOY_X', value: 'prod'
  12.                     not {
  13.                         branch 'master'
  14.                     }
  15.                 }
  16.             }
  17.             steps {
  18.                 echo '当环境变量等于prod 和 分支不属于master时执行(即所有条件都满足)'//会执行
  19.             }
  20.         }   
  21.     }
  22. }
复制代码
anyOf 示例
  1. pipeline {
  2.     agent any
  3.     environment {
  4.         DEPLOY_X = "prod"
  5.     }
  6.    
  7.     stages {
  8.         stage('not build on master') {
  9.             when {
  10.                 anyOf {
  11.                     branch 'master'
  12.                     environment name: 'DEPLOY_X', value: 'prod'
  13.                 }
  14.             }
  15.             steps {
  16.                 echo '当环境变量等于prod 或者 分支属于master时执行(即所有条件满足一项即可)' //会执行
  17.             }
  18.         }   
  19.     }
  20. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

络腮胡菲菲

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表