目录

1、触发任务—指定流水线代码的触发事件

2、用户输入

3、构建后处理


本次,我们介绍jenkins流水线的DSL语言所提供的的用于控制流水线的不同的结构。从指定属性值触发任务和如何接收用户的输入开始。然后介绍如何灵活使用一些结构,例如超时、重试、并行的运行任务。

1、触发任务—指定流水线代码的触发事件

在web界面项目的基本配置中指定吃法条件。

如果是脚本式流水线可以在代码中指定properties代码块(常在流水线开始之前)来定义触发条件(将会和web界面定义的触发条件合并,且web定义的优先)。

如果是声明式流水线,有一个triggers指令来定义流水线的触发类型。

1.1 其他任务构建后触发

web界面实例:

脚本式流水线,在job1成功构建之后并且与阈值匹配时,当前的流水线就会重新构建:

properties([pipelineTriggers([upstream([threshold: hudson.model.Result.SUCCESS,upstreamProjects: 'Job1/master' 【多个任务逗号分隔】])])
])

1.2 周期构建

web界面配置:

脚本式流水线语法,任务在周一至周五上午九点

properties([pipelineTriggers([ cron('0 9 * * 1-5') ])])

1.3 轮询SCM

web界面设置

脚本式流水线

properties([pipelineTriggers([ pollSCM('0 9 * * 1-5') ])])

1.4 远程触发构建

2、用户输入

2.1、用户可以输入密码(password)、选项型(choice)、凭证、文件(file)、多行字符串(text)、字符串(string)

def selectFile = input message:'请选择文件',parameters:[file(description:'选择文件上传',name:'local')]

参考:Pipeline Syntax 强烈推荐看一看

实例如何获取参数和使用
pipeline {agent anyparameters {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')}stages {stage('Example') {steps {echo "Hello ${params.PERSON}"echo "Biography: ${params.BIOGRAPHY}"echo "Toggle: ${params.TOGGLE}"echo "Choice: ${params.CHOICE}"echo "Password: ${params.PASSWORD}"}}}
}

2.2 使用jenkins应用来参数化构建 ,可以在脚本式流水线里面引用。 ${params.<参数名称>}

还可以在流水线开头把参数定义为属性,这种方法是用于流水线和声明式,例如:

properties([parameters([upstream([string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')])])
])
pipeline {agent anystages {stage('Example') {steps {echo "Password: ${params.PERSON}"}}}
}

2.2.5 流程控制选项【略,本来写了的没有保存】

timeout、retry、sleep、waitUntill(等待直到)。

timeout(time:60, unit:'SECONDS'){ // 代码}   默认单位秒

retry(<n>){  // 代码}

sleep time:5, until: 'MINUTES'  默认单位秒

waitUntil {  // 返回true 或者 false的过程}  第一次等待时间0.25 , 后面失败 重试*1.2的因子

2.3 并行与并发

并发实例,分支1简单的睡眠10s后输出消息,分支2睡眠5秒后,抛出异常。failFast=true表示有一个分支出现异常就结束其他所有分支。可以使用于,你需要做部署和测试时,只要部署失败了测试需要停止,测试失败了,部署需要停止。

pipeline{agent anystages{stage('Parallel'){steps{parallel('group1': {timestamps{catchError{sleep 10echo '完成进程1!'}}},'group2': {sleep 5error '进程2失败!'},failFast:true)}}}
}

2.4 有条件的执行功能

Conditional BuildStep plugin条件性构建步骤插件可以让用户在自由风格类型的任务上添加一些有条件执行功能。允许选择一种方法来测试某些条件,然后基于结果执行一个或者多个步骤。

在脚本式流水线代码中,如同使用Groovy/Java 语言的条件语言一样。实例:

node('worker_node1'){def responce = nullstage('selection'){responce = input message:'请选择分支和构建类型', parameters:[string(defaultValue:'master', description:'选择分支', name:'BRANCH_NAME'),choice(choice:'DEBUG\nRELEASE\nTEST',description:'构建类型',name:'BUILD_TYPE')]}stage('Process'){if((responce.BRANCH_NAME == 'master') && (responce.BUILD_TYPE == 'RELEASE')){echo '启动生产'}}
}

脚本式流水线语法如下:when 和 allOf 的意思是里面的条件都满足才执行后面的步骤。

pipeline{agent anyparameters {string(defaultValue:'master', description:'选择分支', name:'BRANCH_NAME')choice(choice:'DEBUG\nRELEASE\nTEST',description:'构建类型',name:'BUILD_TYPE')}stages{stage('process'){when{allOf{expression {responce.BRANCH_NAME == 'master'}exoression {responce.BUILD_TYPE == 'RELEASE'}}}steps{echo '开始启动进程'}}}
}

3、构建后处理

3.1 脚本式流水线构建后处理--

A、使用try-catch-finally机制: 无论最终构建的状态如何,最终总是可以执行某些行为。

def err = null
try{// 流水线代码node('node-name'){stage('stage-name'){...    }// 最后一个阶段}
}catch(err){currentBuild.result = "FAILURE"
}finally{(currentBuild.result != 'Aborted'){// 发送邮件等操作}
}

B、catchError:jenkisn流水线语法支持。catchError提供了一个方法,可以探测异常改变构建状态,还能继续执行流水线进程。

3.2 声明式流水线构建后处理

构建后操作(post),可以放在一个阶段的后面,或者流水线的结尾。下表是构建后声明式构建条件

条件 描述
always 总是执行
changed 当前构建状态与之前构建状态不同则执行1
sucess 当前构建状态成功执行
failure 当前构建状态失败执行
unstable 当前构建状态不稳定执行
// 阶段的末尾
post{always{echo "构建完成"}success{echo "构建成功"mail body:'构建成功', subject:'构建成功', to:'xxx@xxx.com'}
}

这是我最近写的一个流水线部署的方式:jekins+ansible

pipeline {agent anyoptions {skipStagesAfterUnstable()}parameters {string(defaultValue: 'dev', description: 'Enter the GIT branch to build', name: 'branch')}environment {PROJECT = "futureCountry"TARGET_SERVER = "ltServer"ZIP_MNAME = "dist.tar.gz"}tools {maven 'Maven3.6.3'}stages {// 准备阶段stage('Preparation') { steps {git branch: "${params.branch}", credentialsId: 'admin', url: 'ssh://git@10.1.0.3:7999/village/futurecountry-h5.git'timeout(time: 5, unit: 'MINUTES') {sh 'npm install'sh 'npm run build'}}}// 构建和打包、备份stage('Build') {steps {sh 'npm run build'// 压缩sh 'tar -czf ${ZIP_MNAME} -C dist/ .'// 创建目录文件sh 'ansible "${TARGET_SERVER}" -m file -a "path=\\${APP_DIR}/${PROJECT}/html state=directory"'// 删除原有的文件sh 'ansible "${TARGET_SERVER}" -m shell -a "(test ! -d \\${APP_DIR}/${PROJECT}/html/ || rm -rf \\${APP_DIR}/${PROJECT}/html/*)"'// 备份原有压缩包sh 'ansible "$TARGET_SERVER" -m shell -a "(mv \\${APP_DIR}/${PROJECT}/${ZIP_MNAME} \\${APP_DIR}/${PROJECT}/${ZIP_MNAME}.bak || true)"'}}// 发布stage('Deliver') {steps {timeout(time: 3, unit: 'MINUTES') {sh 'ansible "${TARGET_SERVER}" -m copy -a "src=dist.tar.gz dest=\\${APP_DIR}/${PROJECT}"'sh 'ansible "${TARGET_SERVER}" -m shell -a "tar -zxvf \\${APP_DIR}/${PROJECT}/dist.tar.gz -C \\${APP_DIR}/${PROJECT}/html/"'}}}}
}

二、流水线的执行流程相关推荐

  1. PHP yii 框架源码阅读(二) - 整体执行流程分析

    转载链接:http://tech.ddvip.com/2013-11/1384432766205970.html 一  程序入口 <?php// change the following pat ...

  2. data spring 指定时区_Spring 框架基础(05):Mvc架构模式,执行流程详解

    本文源码:GitHub || GitEE 一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面, ...

  3. spring mvc返回页面显示空白_Spring 框架基础(06):Mvc架构模式简介,执行流程详解...

    一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面,在改进和个性化定制界面及用户交互的同时,不 ...

  4. 步步深入:MySQL架构总览-gt;查询执行流程-gt;SQL解析顺序

    转载自 https://www.cnblogs.com/annsshadow/p/5037667.html 前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料 ...

  5. Spring 框架基础(06):Mvc架构模式简介,执行流程详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集 ...

  6. mysql数据库总览_MySQL架构总览-查询执行流程-SQL解析顺序

    从上图中我们可以看到,整个架构分为两层,上层是MySQLD的被称为的'SQL Layer',下层是各种各样对上提供接口的存储引擎,被称为'Storage Engine Layer'.其它各个模块和组件 ...

  7. .net mvc actionresult 返回字符串_Spring 框架基础(06):Mvc架构模式简介,执行流程详解

    一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面,在改进和个性化定制界面及用户交互的同时,不 ...

  8. Java-Mybatis(二): Mybatis配置解析、resultMap结果集映射、日志、分页、注解开发、Mybatis执行流程分析

    Java-Mybatis-02 学习视频:B站 狂神说Java – https://www.bilibili.com/video/BV1NE411Q7Nx 学习资料:mybatis 参考文档 – ht ...

  9. Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/53939176 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭 ...

最新文章

  1. 精通python爬虫框架-精通Python爬虫框架Scrapy.pdf
  2. 请写出一段Python代码实现删除一个list里面的重复元素
  3. Win10系统电脑不会一键还原系统怎么解决
  4. 《贪玩蓝月》年入10亿?背后的玩法也太“流氓”了
  5. jQuery easyui中combox 自定义样式 去掉下拉框的空白
  6. 南方周末:阿里巴巴的大数据梦
  7. [转载] AUML——FIPA Modeling Technical Committee
  8. [Bzoj1003][ZJOI2006]物流运输(spfa+dp)
  9. Java 中override、overload、overwrite区别,以及与多态的关系
  10. 电影院开工在即,第一部电影就看他
  11. Linux下音乐播放器的实现
  12. 新昌中学2021高考成绩查询,新昌中学教育集团向2020年参加高考被第一批录取的553名学子表示热烈祝贺...
  13. Java越学越迷茫,应该怎么办?
  14. 爆音(杂音)问题的推论与解决
  15. html桂花酿网页,桂花酒的做法
  16. java privatekey输出字符串_[Java教程]根据字符串(String)生成公钥(PublicKey)和私钥(PrivateKey)对象_星空网...
  17. win7系统自带的录像在哪里 Win7问题步骤记录器教程详解
  18. IMP-00003 ORA-00942 IMP-00023 IMP-00000
  19. JVM:JVM常见参数配置
  20. MIPS指令集处理器设计(支持64条汇编指令)

热门文章

  1. Nginx支持TCP端口转发
  2. android 画板功能
  3. C#开发基于ESMTP协议的邮件发送系统经验总结
  4. CreateCompatibleDC 说明
  5. 安卓可能被淘汰?谷歌的新系统,和鸿蒙太像了
  6. postman里面的mockserver使用方法
  7. [百度笔试]百度笔试大集锦
  8. 关于Mac版Mysql的my.cnf配置文件
  9. 使用pip安装模块时提示: No module named pip
  10. 王国维的人生3大境界