Jenkins + GitLab 借助定时检测 自动发版
背景
本来想着用 GitLab的webhooks来进行通知Jenkins 进行自动发版的,但是由于Jenkins在局域网内,所以GitLab 不能给 Jenkins 通知。
无奈之下,只能让Jenkins定时检测 GitLab 有没有更新,实现进行自动发版操作。
环境
- Jenkins(局域网)
- GitLab(公网)
配置
- 安装Jenkins(安装方法略)
- 安装GitLab(安装方法略)
- 安装Jenkins 插件
Git plugin
(安装方法略) - 新建Jenkins Job (以NodeJs为例)
- 构建一个自由风格软件项目
- 源码管理中 选择
Git
- 构建触发器 选择
Pool SCM
- 构建 中添加自己需要执行 shell 脚本
补充阅读
Pull SCM 语法规则
- 空行 和 以#开头的行,会被忽略为注释
- 每行的格式: 分钟 小时 天 月份 星期 (以空格或 tab 分隔)
- 分钟: 0–59
- 小时: 0–23
- 天数: 1–31
- 月份: 1-12
- 星期: 0-7 0和7代表星期天
- H 的使用规则及说明:
- 可防止重复执行. eg:
0 0 * * *
会在12:00执行多次,而H H * * *
可以保证 12:00 任务只执行一次 - 结合区间使用:
H H(0-7) * * *
代表 0点到7:59分内,的一些时间点 - H 代表某个区间内的随机值,本质上是 job 名称的 hash 值,而不是一个随机数函数。
- 当设置天数为
H/3
时,会导致误差。*/3
中*
代表1-31
, 而H/3
中的H
代表1-28
- 可防止重复执行. eg:
- 示例:
H/15 * * * *
每15分钟H(0-29)/10 * * * *
每10分钟(仅限于 每小时内的前半个小时)45 9-16/2 * * 1-5
工作日内, 每天9:45~4:45之间, 之后每隔两小时 执行一次 job。执行时间必须为 x:45.H H(9-16)/2 * * 1-5
工作日内, 每天的9:00~16:00之间, 每隔两小时执行一次。(有可能是: 10:38–>12:38…)H H 1,15 1-11 *
每年1~11月内, 1号和15号两天内, 每天执行一次 job.
构建触发方式
- 手动: 手动点击 Build 按钮触发
- 触发远程构建 (例如,使用脚本)
- Build after other projects are built
- Build periodically
- 周期进行项目构建(它不care源码是否发生变化)
- GitHub hook trigger for GITScm polling
- Poll SCM
- 定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作。
如果想使用GitLab的webhook方式让Jenkins自动构建的话,阅读一下文章