首页 » 运维 » 正文

GitLab CI jenkins (webhook)

我们很多时候都是自己在自己的服务器上搭建gitlab 服务,然后我们希望通过jenkins 来检查我们的Pr,也就说,当有人想我们的gitlab 提交一个 pull request 的时候,我们希望gitlab 能够触发一个 jenkins pipeline 来做一些检查 ,并且能把pipeline的运行的状态显示在我们的gitlab上让我们能够知道是否通过了检查,这就是传说中的CI

配置步骤:

1 首先,给我们的用户project  admin权限,让用户能够修改Project 的setting

2 其次,配置GitLab API access

  • 用你的用户登录gitlab,这个用户就是过会我们要用来和jenkins 互动的账号
  • 右上角 Setting
  • 选择Access Tokens
  • 创建一个个人的tocken,需要勾选特殊的权限,如下图
  • 保存我们得到的token ,在jenkins配置的时候我们需要这个tocken

g1

g2

g3

 

 

Config on the Jenkins Server

  • Manage Jenkins > Manage Plugins.
  • 安装插件 Jenkins GitLab Plugin
  • 然后我们配置 Manage Jenkins > Configure System.
  • 在Gitlab 部分,我们选择 Enable authentication for ‘/project’ end-point
  • 点击Add 然后选择Jenkins Credential Provider.
  • 选择类型:GitLab API token
  • 输入我们上边得到的值点击增加
  • 输入gitlab server的URL
  • 点击Test connection 查看是否配置成功

j1 j2 j3 j4 j5 j6

 

设置我们的Jenkins pipeline

  • 在我们的jenkins 主页面 点击New Item
  • 输入我们的project name (myPullrequest)
  • 选择Pipeline
  • 选择下拉框中正确的Gitlab 链接
  • 选择“Build when a change is pushed to GitLab
  • 选中:Closed Merge Request Events  和 Accepted Merge Request Events

然后我们编写当有PR的时候我们具体要做什么操作,例子

 

p2 p5

为我们的Gitlab 增加Apikey

  • 点击我们的用户名
  • 点击config
  • API Token的地方选择增加,并保存这个值,我们要留到下边用

a1

a2 a3

这个修改是为了解决报错:

为了解决这个问题,我们必须在Gitlab project中配置上用户名密码,因为最新版本的jenkins已经不支持disable CSRF

 

配置我们的Gitlab project

  • 找到我们要配置pipeline 的 gitlab project
  • Setting ->Webhooks
  • 添加webhook ,按照要求(此处要注意格式,需要在jenkins额外创建一个api key ,让我们的gitlab 能够有权限触发job)http://username:apikey@jenkins.url/project/myPullrequest/
  • Test

gg1

这个时候如果我们新提交一个PR

我们可以看到

r1

 

等一会成功以后(为了方便查看我我在pipeline里边加了sleep 300)

r2

 

Zhiming Zhang

Senior devops at Appannie
一个奔跑在运维路上的胖子
Zhiming Zhang

Latest posts by Zhiming Zhang (see all)