Jenkins高级篇之Pipeline语法篇-7-Declarative Pipeline指令:triggers/stage/tool
本篇继续学习Declarative Pipeline的相关指令,本篇学习三个指令,分别是触发器(triggers),stage和tool。触发器主要是方便周期控制自动化提交,stage是在stages{...}下的一个指令,我们平台的大部分代码都在stage内完成,tool主要就是为了三大工具(jdk, gradle,maven)提供环境变量服务的。
指令1:triggers
该triggers指令定义了Pipeline应重新触发的自动化方式。对于与源代码集成的Pipeline,如GitHub或BitBucket,triggers可能不需要基于webhook的集成可能已经存在。目前有三个可用的触发器是cron和pollSCM 和 upstream。
这个triggers是触发器的意思,所以这块是设置什么条件下触发pipeline代码执行,以及触发的频率。看到这里,如果你学习过Jenkins UI功能部分,你应该记得有下面这个图,用来控制轮询频率的,特别适合周期的自动化提交。
这篇介绍的触发器知识点就和这个有关。先记住这个点,在一个pipeline{…}代码中,只运行出现一次triggers{…},而且这个指令不是必须存在的。
cron
接受一个cron风格的字符串来定义Pipeline应重新触发的常规间隔,例如: triggers { cron('H 4/* 0 0 1-5') }
pollSCM
接受一个cron风格的字符串来定义Jenkins应该检查新的源更改的常规间隔。如果存在新的更改,则Pipeline将被重新触发。例如:triggers { pollSCM('H 4/* 0 0 1-5') }
upstream
接受逗号分隔的作业字符串和阈值。 当字符串中的任何作业以最小阈值结束时,将重新触发pipeline。例如:triggers { upstream(upstreamProjects: 'job1,job2', threshold: hudson.model.Result.SUCCESS) }
举例一个可能利用scm的场景,如果一个公司做到了很好的代码覆盖测试,一般都会,如果监控到有人提交代码,就会自动化触发启动相关的单元测试。这个场景就是适合在pipeline代码里使用triggers指令,下面代码举例一个pollSCM的基本使用。
pipeline {agent anytriggers {pollSCM (‘H H(9-16)/2 * * 1-5)’)}stages {stage('Example') {steps {echo 'Hello World'}}}
}
解释下“H H(9-16)/2 * * 1-5)”的含义,这个你可以在上面截图这个页面点击右侧这个问号,出来具体含义。第一步,先根据空格,把字符串切割成5段。这5部分在下面这张图有解释。
所以,H H(9-16)/2 * * 1-5) 的含义就是:
第一部分“H” 表示hash,记住不是表示hour,是一个散列值,含义就是在一个小时之内,会执行一次,但是这次是一个散列值,而且不会并发执行。
第二部分“H(9-16)/2”,表示白天在早上9点到下午5点,每间隔2小时执行一次。
第三部分“*“,每天执行
第四部分“*“表示每月执行
第五部分“1-5“ 表示周一到周五执行
所以上面这个表达式“H H(9-16)/2 * * 1-5) “的含义就是,在每个月的周一到周五的白天,从早上9点到下午5点,每间隔两个小时去触发一次自动化构建。 这个就比较适合,我们每天上班,间隔两个小时去跑一次单元自动化测试。间隔时间长短,取决服务器压力和业务具体场景。
指令2:stage
该stage指令在该stages部分中,应包含步骤部分,可选agent部分或其他特定于阶段的指令。实际上,Pipeline完成的所有实际工作都将包含在一个或多个stage指令中。
特点:stage一定是在stages{…}里面,一个pipeline{…}中至少有一个stages{…}和一个stage{…}.这里多说一句,一个stage{…}中至少有一个steps{…}。Stage{…}还有一个特点就是,里面有一个强制的字符串参数,这个字符串参数就是描述这个stage是干嘛的,这个字符串参数是不支持变量的,只能你自己取名一个描述字段。
代码举例:
pipeline {agent anystages {stage('Example') {steps {echo 'Hello World'}}}
}
指令3:tool
定义自动安装和放置工具的部分PATH。如果agent none指定,这将被忽略。
特点:
只支持定义maven jdk gradle三种工具的环境变量。
代码举例:
pipeline {agent anytools {jdk 'jdk8' }stages {stage('Example') {steps {sh 'java -version'}}}
}
注意:工具名称必须在Jenkins 管理Jenkins → 全局工具配置中预配置。例如,上面代码我写了jdk,那么我必须在jenkins管理的全局工具配置中有jdk配置。
Jenkins高级篇之Pipeline语法篇-7-Declarative Pipeline指令:triggers/stage/tool相关推荐
- 18-Jenkisn-Pipelin-声明式流水线语法-triggers/stage/tool
目录 前言 triggers stage tool 脚本示例 前言 本篇继续学习新的指令triggers/stage/tool triggers 指令定义了流水线被重新触发的自动化方法,当前可用的触发 ...
- Jenkins高级篇之Pipeline语法篇-2-第一个Pipeline脚本练习
前面一篇,介绍了什么是Pipeline,和Pipeline的基本概念,和几个关键字的基本含义的介绍,真正的涉及到Pipeline的语法还没有开始介绍.这篇先来介绍第一个Pipeline代码,分别用两种 ...
- Jenkins高级篇之Pipeline技巧篇-1-小白搭建Pipeline项目开发环境
之前,有人和我说,pipeline教程这里,关于如何创建pipeline的git项目和,如何在jenkins上做pipeline的测试这块,在前面文章交代不清楚.这里我补上一篇,通过这一篇,小白也能开 ...
- Postgresql学习笔记-高级语法篇
Postgresql学习笔记-高级语法篇 Postgresql 约束 Postgresql约束用于规定表中的数据规则. 如果存在违反约束的数据行为,行为会被约束终止. 约束可以在创建表的时候就规定(通 ...
- Jenkins Pipeline 语法
目录 声明性pipeline Sections agent pipeline与stage中的不同 参数 常用选项 发布 post stages steps Directives environment ...
- FPGA笔记之verilog语言(基础语法篇)
文章目录 FPGA笔记之verilog语言(基础语法篇) 1. verilog 的基础结构 1.1 verilog设计的基本单元--module 1.2 module的使用 1.3 I/O的说明 1. ...
- Linux开发者的CI/CD(3)jenkins pipeline语法学习
备注:由于我不是专职的devops工程师,所以学习jenkins本着够用的原则即可.但作为一个高级软件工程师,学会写pipeline是必须的. pipeline翻译成流水线,在Unix/Linux系统 ...
- Flutter开发指南之理论篇:Dart语法04(库,异步,正则表达式)
总目录 Flutter开发指南之理论篇:Dart语法01(数据类型,变量,函数) Flutter开发指南之理论篇:Dart语法02(运算符,循环,异常) Flutter开发指南之理论篇:Dart语法0 ...
- Xamarin XAML语言教程基础语法篇大学霸
Xamarin XAML语言教程基础语法篇大学霸 前 言 Xamarin是一个跨平台开发框架.它可以用来开发iOS.Android.Windows Phone和Mac的应用程序.使用Xamarin框 ...
最新文章
- ubuntu php7 memcache,linux ubuntu下安装php memcache扩展
- Microsoft Azure Site Recovery (1) 安装VMM服务器代理
- 桌面云实验环境的部署配置
- ARP***绑定 linux/windows 下解决方案
- Java命令行界面(第25部分):JCommando
- C# 动态创建数据库三(MySQL)
- oracle set autocommit,Oracle Sqlplus SET AUTOCOMMIT
- php省城联动_thinkPHP实现的省市区三级联动功能示例
- OpManager-企业网络问题分析及故障排除
- 使用PaddlePaddle轻松实现语音合成
- 快速入门 | 篇十九:正运动技术运动控制器多轴同步与电子凸轮指令简介
- java裂变_微信现金红包单一红包、裂变红包(Java版)
- 【归档】Kata Containers 2.0 介绍
- Office 2016 Pro Plus \ Project 专业版 \ Visio 专业版 \ 64 位vol版本方便KMS小马oem
- UVA 10306 e-Coins(二维完全背包)
- 云原生Java架构师——KubeSphere DevOps流水线部署RuoyiCloud
- 初识pyQt5之简易翻译软件
- oracle计算两个日期相隔月数,计算日期相差
- c++裸函数naked解析
- 身体语言密码_“我根本不知道她到底想要什么”,《身体语言密码》告诉你
热门文章
- razer鼠标测试软件,驱动软实力对比测试_Razer 炼狱蝰蛇2013鼠标_键鼠评测-中关村在线...
- 03前端第三章Javascript
- 三种平摊分析的方法分别为_关于平摊分析、表的扩增、势能分析初步理解
- java:字符和字节区别
- Cloud Programming Simplified: A Berkeley View on Serverless Computing
- tf.repeat(), Tensorflow2.1.0以上
- C++多态的好处和作用(用实例说话)
- 【Android 10 源码】healthd 模块 BatteryService 初始化
- 护卫神mysql初始密码_护卫神MySQL密码重置器(MySQL密码重置工具)V1.3 最新免费版...
- python unicode 标点范围_Unicode 编码 范围