Gitlab+Jenkins搭建持续集成系统

前言

gitlab是一个应用很广泛的版本控制工具,他也有自带的持续集成工具—gitlab cli,但是这个工具不如jenkins那么好用。本文的目的要把gitlab和jenkins进行结合,当我们更新了代码并且把代码push到gitlab的时候,gitlab会把代码的变化通知到jenkins,然后jenkins就会自动构建project。

说一下实验环境:
Jenkins所在服务器IP:121.41.37.251(10.168.173.181),版本是2.124(查看jenkins的版本语句java -jar /usr/lib/jenkins/jenkins.war --version);
Gitlab所在服务器IP:114.55.224.158(10.25.85.175),使用容器安装,版本是10.7.3;

jenkins添加gitlab插件

通过浏览器登陆jenkins界面,然后在系统管理里面选择管理插件,如图:
akb48

然后在可选择插件里搜索gitlab hook插件,但是没想到我这个版本提示”目前的1.4.2版本的gitlab hook目前存在安全隐患”,如图:
akb48

具体的安全隐患细节是这样的:
akb48

这个风险请自己把握,然后我选择了继续安装,如图:
akb48

安装完了gitlab hook插件后,还要安装GitLab PluginGitlab Authentication plugin这两个插件,方法跟上面的一样。

创建测试工程

在jenkins上建立一个新的任务,比如叫jicheng-test,这是一个自由风格的软件项目
akb48

然后在源码管理里面选择git,然后输入gitlab里面仓库的地址,比如我在gitlab上新建了一个project叫jenkinstest,那么就复制这个仓库的地址填到jenkins的Repositories里,如图:
akb48

还要在Credentials这里面写上gitlab的用户和密码,然后保存即可:
akb48

配置 GitLab 用户

浏览器切换到gitlab界面,在用户头像点击,User settings —> Access Tokens,这里的Personal Access Tokens写入一个账号,这个账号是用来让Jenkins和GitLab API交互。这个用户将需要是全局的管理员或添加进每个组/工程,并作为成员。需要开发者权限来报告构建状态。如图:
akb48

输入账号和账号有效时期之后,会生成一个Private token,如图:
akb48

拷贝它,稍后在配置Jenkins服务器时会用到。

配置 Jenkins 服务器

需要配置 Jenkins 服务器来与 GitLab 服务器通信。

在 Jenkins 中,选择系统管理 ->系统设置,在系统设置中找到GitLab的部分:
akb48

Connection name后的输入框中输入连接名称,在Gitlab host URL后的输入框中输入GitLab服务器的URL地址。点击Credentials行最后面的Add -> Jenkins按钮,弹出如下对话框,在Kind 后的下拉列表中选择GitLab API token,并把上一步拷贝的Private token粘贴到API token后面的输入框中。
akb48

随后在Credentials的下拉框中选择GitLab API token

配置 Jenkins 工程

来到刚刚建立的那个工程jicheng-test,点击构建触发器,先勾选Build when a change is pushed to GitLab,点击高级,然后再点击一下Generate就会生成一个Secret Token,如下:
akb48

点击左下角的保存按钮,保存前面所做的配置。这个时候要记录两个东西,一个是Build when a change is pushed to GitLab那一行中,GitLab CI Service URL:后面的 URL;还有一个就是刚刚生成的Secret Token,这俩在后面配置GitLab工程时需要用到。

配置 GitLab 工程

在gitlab进入那个叫jenkinstest的project,然后在settings--->Integrations,在URL里填写刚刚记下来的URL,在Secret Token里填写刚刚记下来的Secret Token,如图:
akb48

然后点击下面绿色的add webhook,就会生成一个Webhooks,如图:
akb48

去代码服务器上提交一个commit,然后push到gitlab里,再返回到Integrations,对刚刚生成的webhooks点击test,选择push events,如图:
akb48

然后就会出现200的成功字样,如图:
akb48

如果你再点击一下test上面的edit,就会看到webhook最近调用情况,再点击view details的话,就会看到具体的调用细节,如图:
akb48

验证测试

此时我在代码服务器上做了一些简单的改动,然后重新把代码push到gitlab服务器上,在jenkins里的相关project里,就会看到已经自动开始build了,如图:
akb48

再在具体的某次build里选择控制台输出,就会看到构建的详细过程,如图:
akb48

横向扩展

如果是多个gitlab的project去对应同一个jenkins,那么需要在jenkins创建任务的时候就选择是根据一个已经存在的任务创建,如图:
akb48

在这里写上作为模板的任务的名称,然后在新生成的任务配置源码管理里添加一个新的Repositories,如图:
akb48

如果想要限制分支的话,就要更改Branches to build,现在默认是“只要master分支有push就会触发jenkins构建”。然后再回到gitlab的新project里,进入Integrations,输入配置 Jenkins 工程那个环节里的URL就OK了,Secret Token不用单独填写,因为在复制任务那一步的时候直接把Secret Token全部拷贝过来了。

参考资料

http://www.cnblogs.com/bugsbunny/p/7919993.html
https://www.wolfcstech.com/2018/03/26/gitlab_trigger_jenkins_build/

感谢您请我喝咖啡~O(∩_∩)O,如果要联系请直接发我邮箱chenx1242@163.com,我会回复你的
-------------本文结束感谢您的阅读-------------