Jenkins与Gitlab集成

发表于:

Jenkins和Gitlab集成主要目的是将Jenkins作为Gitlab持续集成工具,版本库有提交或者合并时能够触发Jenkins自动build

版本要求

Jenkins集成Gitlab是用过gitlab-plugin来实现,因此对jenkins和gitlab有版本要求

jenkins > 1.568
gitlab 7.14.x 或者 8.1.x,不支持8.0.x

gitlab-plugin介绍

插件为jekins提供了gitlab-webhook以及gitlab-ci相应的功能,相关的接口如下:

/project/PROJECT_NAME/builds/COMMIT_SHA1/status.json 返回COMMIT_SHA1版本号对应的build状态,在gitlab merge/request页面显示
/project/PROJECT_NAME/builds/status.png?ref=BRANCH_NAME 显示分支build状态的图标,"sucess", "pending", "failed"
/project/PROJECT_NAME/builds/status.png?sha1=COMMIT_SHA1 返回COMMIT_SHA1的build状态图标
/project/PROJECT_NAME/builds/COMMIT_SHA1 跳转到对应COMMIT_SHA1版本的build状态页面,
/project/PROJECT_NAME/commits/COMMIT_SHA1 跳转到对应COMMIT_SHA1版本的build状态页面,
/project/PROJECT_NAME?ref=BRANCH_NAME 跳转到对应BRANCH_NAME版本的build状态页面,
/project/PROJECT_NAME 触发jenkins自动build的接口,要传递必要的参数

插件内置build参数, 可以在初始化构建参数时添加:

gitlabSourceBranch merge/request的源分支
gitlabTargetBranch  merge/request的目标分支
gitlabSourceRepoURL
gitlabSourceRepoName
gitlabMergeRequestTitle
gitlabMergeRequestId
gitlabMergeRequestAssignee
gitlabUserName
gitlabUserEmail
gitlabBranch Gitlab push代码的分支可以用于shell script
gitlabActionType Gitlab操作类型PUSH或MERGE可以用于shell script

以上参数在gitlab 触发webhooks的时候会传递过来,同时我们也可以在构建jekins任务时设置默认值

配置jenkins

基本设置

1.升级jenkins, 目前使用的1.47版本会遇到克隆版本会报错,升级到最新1.643可以配置成功

2.安装gitlab-plugin插件,同时会一同安装插件依赖git-client和git

3.为jenkins生成一个能访问gitlab的ssh密钥对,切换到jenkins用户将密钥对至于.ssh目录,其中公钥将用于gitlab设置deploy key

添加构建项目

4.添加构建项目(构建一个自由风格的软件项目), 设置项目名

5.在源码管理部分:

选择git      
  Repository URL设置gitlab项目地址,如:git@your.gitlab.server:group/repo_name.git      
 高级设置, Name设置为origin      
 Branch Specifier: origin/${gitlabSourceBranch}      
 源码库浏览器:gitlab      
   URL: http://your.gitlab.server    
   Version: gitlab版本号,如:1.11.0    
 Additional Behaviours:    
   点击'Add', 选择‘Merge before build’    
   Name of the repository:origin    
   Branch to merge to: ${gitlabTargetBranch}    
 构建触发器:    
   勾选'Build when a change is pushed to GitLab'    

 保存设置    

6.设置gitlab回调接口,用于在build完成将结果通知到gitlab

进入全局系统管理    

  Gitlab部分    
    Gitlab host URL: http://your.gitlab.server    
    API Token: 设置gitlab的api访问token(admin用户才有)    

Gitlab配置

Gitlab相对于jenkins配置要简单很多,主要是为jenkins要访问的项目配置gitlab-ci以及webhook

1.设置项目deploy key, 将jenkins用户目录下面的公钥设置在这里即可

2.设置gitlab ci

在项目设置里,点击'Services'
点击'GitLab CI', 勾选'Active'
Trigger栏,勾选'Push events'和'Tag push events'
Token, 随便填写一个字符串
Project url:填写jenkins api地址,http://JENKINS_URL/project/PROJECT_NAME

3.设置gitlab webhook

 点击'Web hooks', 输入地址:http://JENKINS_URL/project/PROJECT_NAME
 然后勾选'Merge Request event'

注意,gitlab ci和webhook都要设置才行

以上设置完成之后,往gitlab里push代码或者建立Merge Request就会自动build相应的jekins任务了