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自动构建的话,阅读一下文章


