GitLab push自动触发Jenkins构建与持续集成
前言参考文档配置步骤生成GitLab user API token安装Jenkins GitLab plugin添加Jenkins credential配置GitLab connection在Jenkins build job中启用GitLab trigger配置GitLab webhook for Jenkins测试自动触发前言项目用的是GitLab...
文章目录
前言
项目用的是GitLab CE来作代码版本控制,用Jenkins来作CI/CD。
所以需要做到在提交代码(Git push 和 Merge merge request)后自动触发Jenkins build。
参考文档
- https://wiki.jenkins.io/display/JENKINS/Building+a+software+project
- https://github.com/jenkinsci/gitlab-plugin
- https://github.com/jenkinsci/gitlab-plugin/wiki/Setup-Example
- http://blog.ljdelight.com/gitlab-continuous-integration-on-jenkins/
- https://www.swtestacademy.com/jenkins-gitlab-integration/
- https://webkul.com/blog/continuous-integration-jenkins-gitlab/
原理
通过在Jenkins中安装GitLab plugin,可以对外提供一个专门供GitLab钩子调用的构建的REST API地址,再在GitLab中配置钩子来调用这个REST API。每当有代码提交时,这个钩子就会调用构建REST API,从而触发构建。
为了安全起见,需要做双向认证,即GitLab只会调用它认证的Jenkins的REST API,Jenkins也支持只允许它认证的GitLab来调用。双方认证的方式都为API Token。
配置步骤
假设Jenkins已经安装好,并且安装了Jenkins Git plugin。
生成GitLab user API token
确保用Jenkins上用来连接GitLab的账号有build的权限。
用该账号登陆GitLab,打开Profile -> Settings -> Private Token
输入Token Name
选择Expire Date,不填,表示永远不会过期。
勾选“api”
生成API Token,后面在Jenkins配置中会用到这个Token。
安装Jenkins GitLab plugin
在Jenkins上安装 Jenkins GitLab plugin , 安装完成后重启Jenkins。
添加Jenkins credential
在Jenkins上,打开Credentials -> System -> Global credentials -> Add credential
添加一个新的GitLab API token的credential.
- ID为Jenkins上使用的GitLab的账号。
- API token 为上面在GitLab中生成的该账号的token。
配置GitLab connection
在Jenkins上,打开Manage Jenkins -> Configure System,找到GitLab的配置项,填写GitLab的URL,选择上面步骤添加的GitLab API token credential。
注意:不要勾选“Enable authentication for /project end-point”,否则会导致后面测试GitLab webhook时出错,并导致无法自动触发Jenkins build。
Test connection时如果遇到500错误,请参考下面文档:
https://stackoverflow.com/questions/49626860/gitlab-webhook-get-error-500-internal-server-error-uriinvalidurierror
在Jenkins build job中启用GitLab trigger
打开指定的Jenkins build job,点击Configure,在Build triggers中勾选“”Build when a change is pushed to GitLab. GitLab webhook URL: xxx"
点击Advanced按钮,可以设置Secret Token。(建议不要设置)
这里的GitLab webhook 地址在下面配置GitLab webhook for Jenkins时会用到。
对Jenkins pipeline需要有额外的处理,以后再来补充。
配置GitLab webhook for Jenkins
在GitLab中使用有管理员权限的账号登陆,打开指定项目,点击 Settings -> Integrations。
在Webhooks中的URL中输入上面的GitLab webhook 的地址,Secret Token保留为空(如果上面在Jenkins build job中没有设置Secret Token)。
勾选Push events 和 Merge events,取消勾选SSL verification,然后生成webhook。
在新生成的webhook上点击Test来测试webhook是否可以正常工作。
如果遇到"URL is blocked…local network…"问题,则需要用管理员账号登录GitLab,打开Settings / Network /Outbound Request,勾选“Allow requests to the local network from hooks and services“
注意:GitLab CE版本不支持在Integrations -> Project services中通过Jenkins CI来配置,好像GitLab EE版本支持。
测试自动触发
修改代码或文件后,在Git push后,在Jenkins上观察指定的Jenkins build job是否自动被触发运行。
多分支持续集成
比如在GitLab上有master和develop两条分支,希望在develop分支上改动时,可以自动触发develop分支的持续集成,而代码合并进master分支后,也可以自动触发master分支的持续集成。
可以通过Jenkins Multibranch Pipeline实现多分支构建和持续集成。
也可以通过以下变通方法来解决:
- 创建一个专门用于
develop分支的CI freestyle job - 在“Build when a change is pushed to GitLab…“下,点击Advanced按钮,选择Filter branches by name,输入要做持续集成的分支名称,比如
develop - 在“Source Code Management”下的Branches to build中填入对应的分支,比如
*/develop - 在GitLab上生成该job的Webhook
- 类似地,创建一个专门用于
master分支的CI freestyle job
更多推荐
所有评论(0)