Jenkins系列(二)——触发点和构建环境的介绍

前言

本篇文章主要针对jenkins任务定义的触发时机以及构建环境配置进行讲解,其中构建方式的内容也是我们定义jenkins任务中经常会用到的,希望文章的内容对各位读者有所帮助。

想要了解更多Jenkins的信息,可以从本系列的其他文章中进行查看
Jenkins系列(一)——Jenkins的安装和常见配置
Jenkins系列(三)——关于通用配置(General模块)的介绍

一、关于触发时机

(一)触发远程构建

jenkins支持我们通过URL的方式来直接构建脚本,相当于是不需要登录到jenkins的控制台,找到这个job后鼠标点击构建,而是直接访问这个URL来完成触发(当然了,访问的这个过程可以使用脚本来实现,这在一些复杂触发条件下的场景会比较好用)。

image.png

勾选触发远程构建后,会提示我们输入一个身份验证令牌,这样是为了防止非授权用户恶意调用我们的job,一般情况下建议写一个稍微复杂一些的密码,保存后我们就可以通过JENKINS_URL/xxx/{jobName}/build?token=TOKEN_NAME来直接进行job的触发了 (这里的TOKEN_NAME指的就是我们配置的令牌)。
如果token输入错误的话,页面还有相对应的提示。

image.png

(二)其他项目构建后触发

这种适用于任务和任务之间存在上下级的依赖关系,我们希望我们的任务在另外一个任务执行完成之后再执行,就可以选择使用这个触发时机。


image.png

值得一提的是,这个模块还支持我们根据上一个项目的不同执行状态来决定是否继续往下执行。

(三)定期构建(Build periodically

定期构建是jenkins一个相当常见的触发规则了,jenkins支持我们用cron表达式来配置什么时候来自动触发我们的任务,既然这里提到了cron表达式,我们也在此处对表达式的规则进行简要的说明吧。

cron表达式

Jenkins采用了著名的UNIX任务调度工具CRON所使用的配置方式。用5个字段代表5个不同的时间单位

* * * * * (分 时 日 月 周)
简要案例:
10 * * * * 表示每小时的第10分钟会触发
10 2 1-3 * * 表示每月1-3号的凌晨2点10分会触发

处于简化配置的考量,我们可以用一些特殊符号来简化我们的配置

1. *号:匹配当前域的任意值

比如说* 0 * * *就表示每月每天的零点每隔1分钟就触发1次,直到当天1点结束

2. -:表示连续的区间范围

比如说1-10 0 * * *就表示每月每天的零点1分到零点10分间每隔1分钟触发一次

3. ,:表示枚举范围(常用于不连续的区间)

比如说1,5,10 0 * * *就表示每月每天的零点1分,零点5分和零点10分会触发一次

4. n/m:表示按指定频次触发

前面的n表示从n开始触发,之后每隔m再触发一次,比如说:2/3 9 * * *,这里表示从每天九点零2分开始,每隔3分钟触发一次,直到9点59分最后一次触发。不过这里需要注意,虽然cron表达式支持我们这么配置,但是在jenkins中我们是不支持我们这样配置的。
jenkins引入了H符号的概念来让我们完成类似的操作,比如H/3 15 * * *表示从每天15时开始,每隔3分钟触发一次。

5. 关于分散负载符号H的使用

由于jenkins集成了很多个定时任务,如果存在很多定时任务的cron配置相同或者是触发的时间节点相同(或接近)的情况(比如0 0 * * *),就会给jenkins任务的调度和运行带来较大的压力。因此jenkins引入了符号H(代表“Hash”,后面用“散列”代替)来解决负载的压力问题。例如:存在十几个日常任务需要在凌晨0点至1点的时间处理,我们可以配置H 0 * * *,由jenkins来自行在符合时间要求的不同的时间点触发不同的任务,从而进行调度上的负载均衡。
符号H 在一定范围内可被认为是一个随机值,但实际上它是任务名称的一个散列而不是随机函数。符号H还可用于范围,例如,H H(0-7) * * * 代表凌晨0:00到 上午7:59这一段时间的任意时间触发一次。
注意,对于月的一天字段,由于月的长度变化,像/3或H/3这样的短周期在大多数月的末尾将不一致地工作。 例如,/3将在长月份的第1、4、…31天运行,然后再运行到下个月的第二天。 哈希值总是选择在1-28范围内,因此H/3将在月末产生3到6天的运行间隔。 (较长的周期也会有不一致的长度,但效果可能相对不那么明显。)

6. 其他注意事项

实际上,cron表达式还支持?#以及其他更加灵活的字符符号来帮助我们进行周期配置,但是实际上jenkins对于cron表达式并不是完全兼容的,它基本上只支持上文提到的这5点而已。

(四)根据Github钩子函数来触发

如果我们这个项目在github上面进行托管,那么我们可以结合github上面的钩子来实现远程仓库有人push后自动构建任务。


image.png

(五)轮询SCM

轮询远程代码仓库(可以是SVN仓库,也可以是公司内部的GIT仓库托管平台),每当有新的提交记录,就触发一次构建操作,这也是不少CICD常见的流水式部署的核心环节。需要注意的事,因为每次轮询都需要Jenkins扫描整个工作空间并使用服务器进行验证,所以这个操作是相对比较有性能开销的,建议是在后续的日程表中根据实际情况配置每次扫描的时间间隔。


image.png

从上图中我们可以看到,选择轮询SCM方式支持我们可以日程表,表示每隔多长时间jenkins帮我们去轮询一下远程仓库当前有没有新的提交记录。在没有配置日程表的情况下,这个任务只会在post commit钩子函数中进行触发,这种情况下一般是需要我们配合触发远程构建这种方式来实现的,不过个人觉得一般不会两种构建方式都同时使用的,所以这块细节可以不用太过于关注。

二、构建环境

(不同版本的Jenkins对于这里的配置会有所区别)

image.png

  • Delete workspace before build starts
    每次构建前都要删除workspace中的内容,这个用的比较少

  • Mask passwords and regexes (and enable global passwords)
    有时候我们的输出中会包含密码等密码信息,如果我们不希望在构建日志中出现密码这些敏感信息的话,可以勾选这个选项,以变量的方式来隐藏密码的输出。当然了,jenkins还支持直接通过正则的方式来过滤出需要脱敏的信息
    (这个功能其实是依赖了Mask Passwords Plugin 插件,如果没安装的话应该是用不了这个功能的)

  • Use secret text(s) or file(s)
    我们在jenkins中配置了很多凭证,如果你需要在后续的脚本中使用到这些凭证的话,可以勾选这个选项,以变量的方式来引用我们配置的凭证信息。

  • Add timestamps to the Console Output
    给Jenkins的构建日志加上时间戳,算是很实用的功能

  • Execute shell script on remote host using ssh
    这个选项支持我们在任务构建前后使用ssh命令对其他服务器进行某些命令操作,不过个人是觉得这个命令帮助不是特别大,毕竟有这种需求的话,已经可以通过后续的step配置,或者是定义上下级的job执行顺序来实现。

  • Generate Release Notes
    这个功能也用的很少,用于生成发行声明的,如果对构建日志有报告要求的话可以使用

  • 应用Ant
    为Jenkins准备使用Apache Ant运行构建的环境。注释ant特定的输出以显示已执行的目标。可选地设置Ant和/或JDK安装。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,188评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,464评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,562评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,893评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,917评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,708评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,430评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,342评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,801评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,976评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,115评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,804评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,458评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,008评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,135评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,365评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,055评论 2 355

推荐阅读更多精彩内容