前言
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界面,然后在系统管理
里面选择管理插件
,如图:
然后在可选择插件
里搜索gitlab hook
插件,但是没想到我这个版本提示”目前的1.4.2版本的gitlab hook
目前存在安全隐患”,如图:
具体的安全隐患细节是这样的:
这个风险请自己把握,然后我选择了继续安装,如图:
安装完了gitlab hook
插件后,还要安装GitLab Plugin
和Gitlab Authentication plugin
这两个插件,方法跟上面的一样。
创建测试工程
在jenkins上建立一个新的任务,比如叫jicheng-test
,这是一个自由风格的软件项目
:
然后在源码管理里面选择git,然后输入gitlab里面仓库的地址,比如我在gitlab上新建了一个project叫jenkinstest
,那么就复制这个仓库的地址填到jenkins的Repositories
里,如图:
还要在Credentials
这里面写上gitlab的用户和密码,然后保存即可:
配置 GitLab 用户
浏览器切换到gitlab界面,在用户头像点击,User settings
—> Access Tokens
,这里的Personal Access Tokens
写入一个账号,这个账号是用来让Jenkins和GitLab API交互。这个用户将需要是全局的管理员或添加进每个组/工程,并作为成员。需要开发者权限来报告构建状态。如图:
输入账号和账号有效时期之后,会生成一个Private token,如图:
拷贝它,稍后在配置Jenkins服务器时会用到。
配置 Jenkins 服务器
需要配置 Jenkins 服务器来与 GitLab 服务器通信。
在 Jenkins 中,选择系统管理
->系统设置
,在系统设置中找到GitLab的部分:
在Connection name
后的输入框中输入连接名称,在Gitlab host URL
后的输入框中输入GitLab服务器的URL地址。点击Credentials
行最后面的Add -> Jenkins
按钮,弹出如下对话框,在Kind 后的下拉列表中选择GitLab API token
,并把上一步拷贝的Private token
粘贴到API token
后面的输入框中。
随后在Credentials
的下拉框中选择GitLab API token
。
配置 Jenkins 工程
来到刚刚建立的那个工程jicheng-test
,点击构建触发器
,先勾选Build when a change is pushed to GitLab
,点击高级
,然后再点击一下Generate
就会生成一个Secret Token
,如下:
点击左下角的保存
按钮,保存前面所做的配置。这个时候要记录两个东西,一个是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
,如图:
然后点击下面绿色的add webhook
,就会生成一个Webhooks
,如图:
去代码服务器上提交一个commit,然后push到gitlab里,再返回到Integrations
,对刚刚生成的webhooks
点击test
,选择push events
,如图:
然后就会出现200的成功字样,如图:
如果你再点击一下test上面的edit,就会看到webhook最近调用情况,再点击view details的话,就会看到具体的调用细节,如图:
验证测试
此时我在代码服务器上做了一些简单的改动,然后重新把代码push到gitlab服务器上,在jenkins里的相关project里,就会看到已经自动开始build了,如图:
再在具体的某次build里选择控制台输出
,就会看到构建的详细过程,如图:
横向扩展
如果是多个gitlab的project去对应同一个jenkins,那么需要在jenkins创建任务的时候就选择是根据一个已经存在的任务创建
,如图:
在这里写上作为模板的任务的名称,然后在新生成的任务配置
的源码管理
里添加一个新的Repositories
,如图:
如果想要限制分支的话,就要更改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/