# Jenkins教程 - 4 监听Git代码变化

前面在实现自动构建的时候,是手动来点击页面的按钮触发构建。

还可以让 Jenkins 监听 Git 上代码是否发生变化,发生变化时,让 Jenkins 自动构建。

逻辑是这样的:

其实这里是 Jenkins 提供了一个钩子接口,调用这个接口可以触发 Jenkins 构建。然后给 Git 配置这个接口,当 Git 发生变化的时候,就可以调用这个接口来触发 Jenkins 构建了。

# 4.1 配置回调接口

现在在前面 HelloWorld 的项目中进行配置。

在项目的配置中,找到构建触发器配置,然后找到触发远程构建选项。

需要填写一个 token,这个token 需要访问接口的时候填写。下面提供了两个链接,可以通过访问者两个链接出发 Jenkins 构建,但是这个两个接口需要登录认证。可以通过安装插件解决。

# 4.2 安装插件

这里需要安装 Build Authorization Token Root 插件。因为如果直接调用 Jenkins 的触发接口,会提示没有权限,因为没有登录,安装这个插件,调用接口就可以免登录了。

安装插件:

点击查看插件的详情,可以看到触发构建的链接:

所以触发构建的链接,不是之前的链接了,而是 Build Authorization Token Root 插件提供的新的链接地址。

# 4.3 手动调用接口构建

我们现在先不使用 Git 来触发 Jenkins 构建,我们直接使用浏览器或 Postman 来调用接口来触发 Jenkins 构建。

我的 Jenkins 服务器地址是 192.168.0.102, 构建任务是 hello-jenkins,token是 doubibiji-better,所以链接是:

http://192.168.0.102:8080/job/hello-jenkins/build?token=doubibiji-better
# 或者
http://192.168.0.102:8080/buildByToken/build?job=hello-jenkins&token=doubibiji-better
1
2
3

请求上面的两个接口,都可以看到 Jenkins 页面触发了构建。

# 4.4 使用Git触发

上面是手动使用浏览器或 Postman 请求接口来触发构建任务执行。

下面使用Git来触发。

# 1 Gitee

在gitee码云上,找到项目,在管理界面,找到 WebHooks 配置。


很遗憾,这里有一个问题,因为我们的 Jenkins 是本地部署的,是无法被外网访问的,所以这里填写的地址肯定是无法被 Gitee 访问的,除非我们的 Jenkins 可以被外网访问,这里只是演示一下怎么配置。


# 2 GitLab

如果使用的是 GitLab 在本地部署 Git 服务的话,配置方式和上面基本一样,也是找到项目,在项目的管理页面,找到 Webhooks 配置,然后选择触发的事件。

完善信息后,点击下面的添加。


这里也有一个坑。点击 Add webhook 添加后,可能会提示添加出错,提示不允许访问本地地址。

所以需要修改一下 GitLab 的配置。

选择 菜单 --> 管理员

找到 设置 --> 网络 --> 出站请求 --> 勾选允许来自 web hooks 和服务对本地网络的请求

这样 webhooks 才可以添加成功。

当再进行代码推送的时候,就会自动触发 Jenkins 进行构建。


这种通过 Git 来触发构建的方式在实际生产环境是不推荐使用的,在开发环境勉强可以用。大部分都是通过手动来触发构建,或者使用定时构建,指定某个时间来进行构建。接下来继续学习一些触发器的使用。