深入浅出DevOps:Jenkins构建器

2022-09-16  本文已影响0人  Kyriez7

前言

我们从开始学习Jenkins到现在,大家肯定已经尝试了很多次构建项目的过程

但其实我想说的是,大家在构建的时候是不是觉得目前的构建方式比较繁琐:

这样才能开始构建当前任务,但是如果有这样一种方式,不需要上述繁琐的过程,是不是会比较舒服呢:

别说,这样想想都挺开心的对不对

别急,功能强大的Jenkins早就为我们准备好了一切。这不就要跟大家介绍关于Jenkins的另一大便捷的功能,容我卖个关子,大家继续往下看

构建触发器

image.png

触发器是任务配置中的一个核心模块,它实现了我们在上面的一切设想。接下来我们就来好好聊一聊这个触发器

我们挑几种比较常用的触发器来介绍

其他工程构建后触发

如果我们的项目需要依赖其他项目才能正常执行,此时在构建的时候就有一个先后顺序,我们基于该触发器下的配置项进行构建项目,根据我们所设置的关注项目,最终在构建的时候会形成类似责任链模式的长链

image.png

这种方式非常简单,就不多介绍

定时构建

定时构建,如其名就是说Jenkins提供类似cron特性的方式来定期执行构建项目。

这种方式我们需要结合公司实际业务思考,如果公司是习惯于像每晚/每周这样定期安排构建的,那么非常适合采用定时构建的触发器,否则就需要慎重

image.png

在显示出来的日程表的写入Jenkins支持的定时表达式,Jenkins会根据表达式自动给个提示,显示出下次运行时间,而关于定时表达式的相关内容,我们继续往下看

定时表达式

基本信息

<pre class="hljs vbscript" style="margin: 0px 0px 0.75em; padding: 0.5em; border-radius: 4px; background: rgb(246, 246, 246); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); font-size: 14px; line-height: 1.5em; word-break: break-all; word-wrap: break-word; border: none; overflow-x: auto;">MINUTE HOUR DOM MONTH DOW
</pre>

具体来说,每一行由 5 个字段组成,由 TAB 或空格分隔,其中表示:

一小时内的分钟数 (0–59)

一天中的小时 (0–23)

月份中的某天 (1–31)

月份 (1–12)

星期(0–7),其中 0 和 7 是星期日

而这里还需要注意的是: H

这是一个负载参数,可以任务是作业名称的散列,理论上可以放到任意位置上,一般在 MINUTE 或者 HOUR 的前面加上 H 这个参数。保证定时调度任务在系统上产生负载,这样能够使任务不会出现在同一时刻,最大限度的使用服务资源。

<pre class="hljs markdown" style="margin: 0px 0px 0.75em; padding: 0.5em; border-radius: 4px; background: rgb(246, 246, 246); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); font-size: 14px; line-height: 1.5em; word-break: break-all; word-wrap: break-word; border: none; overflow-x: auto;"># 每隔15分钟执行一次H/15 * * * *
</pre>

进阶

除了这种固定的时间之外,Jenkins提供的定时表达式还提供了范围区间:

<pre class="hljs" style="margin: 0px 0px 0.75em; padding: 0.5em; border-radius: 4px; background: rgb(246, 246, 246); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); font-size: 14px; line-height: 1.5em; word-break: break-all; word-wrap: break-word; border: none; overflow-x: auto;">*
M-N
</pre>

<pre class="hljs markdown" style="margin: 0px 0px 0.75em; padding: 0.5em; border-radius: 4px; background: rgb(246, 246, 246); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); font-size: 14px; line-height: 1.5em; word-break: break-all; word-wrap: break-word; border: none; overflow-x: auto;"># 每天1~2点,每隔15分钟执行一次H/15 H(1-2) * * *
</pre>

  1. M-N/X*/X 在指定范围或整个有效范围内按 X 的间隔步进

  2. A,B,...,Z 枚举多个值

找几个例子让大家找找感觉,也可以直接在Jenkins中进行测试

<pre class="prettyprint hljs markdown" style="margin: 0px 0px 1.5em; padding: 0.5em; border-radius: 4px; background: rgb(246, 246, 246); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); font-size: 14px; line-height: 1.5em; word-break: break-all; word-wrap: break-word; border: none; overflow-x: auto;"># 在5,10,15分的时候执行5,10,15 * * * * # 工作日的0点,3点,6点,每隔10分钟执行一次H/10 0,3,6 * * 1-5
</pre>

任务构建

接下来我们就让我们的任务定时构建一次就每隔2分钟执行一次

Q:为啥不每隔一分钟执行一次?

A:大概Jenkins觉得你们太调皮了,不支持1分钟的调用

<pre class="hljs markdown" style="margin: 0px 0px 0.75em; padding: 0.5em; border-radius: 4px; background: rgb(246, 246, 246); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); font-size: 14px; line-height: 1.5em; word-break: break-all; word-wrap: break-word; border: none; overflow-x: auto;">H/2 * * * *
</pre>

准时构建,那么在实际下根据自身需要,合理选择表达式进行构建操作

image.png

我这里留了一个配置,让它在零点执行: H(0-1)/1 0 * * * 接下来拭目以待

image.png

GitLab webhook

额外说明

这里先插一句,在Jenkins构建器中关于GitLab webhook的方式

image.png

默认情况下是不会出现这一选项的,需要额外安装一个插件,虽然在之前也提到过,但是这里还是要多说一句:

image.png

在插件管理中需要先将 GitLab Plugin 插件安装上,成功之后才能使用webhook的方式来触发构建

Webhooks

穿插了一个关键点之后,我们继续介绍Webhooks

维基百科:

在web开发过程中的webhook,是一种通过通常的callback,去增加或者改变web page或者web app行为的方法。

这些callback可以由第三方用户和开发者维持当前,修改,管理,而这些使用者与网站或者应用的原始开发没有关联

结合Jenkins来介绍:

实操:基于GitLab的Webhooks实现自动化构建

那么接下来我们就开始配置Webhooks,实现自动化构建任务吧

GitLab配置:本地出站请求

首先,由于GitLab版本的升级,会限制本地的出站请求,由于本人在搭建环境的时候将Jenkins和GitLab放到了同一台服务器上,所以需要先在GitLab上对出站请求进行配置

如果环境在多台服务器上,这一步可以省略

当前配置在GitLab位于 Menu>Admin>Settings>Network> **Outbound requests**

image.png

勾选图中的两个选项框或者在下方的文本框中输入本地IP和域名都是可以的

为了方便我就勾选了

Jenkins 503配置

由于Jenkins开启了GitLab的身份验证,此时如果直接在GitLab上添加Webhooks的话,无法正确被处理。

这里就需要进入到Jenkins的 系统管理>系统配置 ,找到 Gitlab 的位置,并且去掉 Enable authentication for '/project' end-point 的勾选

image.png

Jenkins项目配置触发器

image.png

进入到项目配置页面中,勾选图中框住的选项,并复制最后的URL地址

GitLab设置Webhooks

进入到 GitLab上该项目页面,从 settings>Webhooks 找到对应的配置页面,将复制到的URL添加到指定的位置中就可以了

image.png image.png

此时最下方会出现一条Webhooks的记录,我们可以通过 Test 按钮进行测试,看看是否可以正常运行

测试

直接推送一个事件,看看Jenkins能不能接收到

image.png

开始构建的话就说明Webhooks的方式已经构建成功。测试完成,收工。

image.png

当前测试通了最后,那么通过git提交代码之后,Jenkins对项目进行构建那也是必然可以正常执行的。

最后

到这里关于Jenkins触发器相关的内容就介绍的差不多了。我们只是列举出几个比较常用的触发器,如果有涉及到需要使用其他触发器的可以自行查看帮助文档。

上一篇下一篇

猜你喜欢

热点阅读