我们很多时候都是自己在自己的服务器上搭建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
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 查看是否配置成功
设置我们的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的时候我们具体要做什么操作,例子
pipeline {
agent any
stages {
stage('gitlab') {
steps {
echo 'Notify GitLab'
updateGitlabCommitStatus name: 'build', state: 'pending'
sleep 300
updateGitlabCommitStatus name: 'build', state: 'success'
}
}
}
}
为我们的Gitlab 增加Apikey
- 点击我们的用户名
- 点击config
- API Token的地方选择增加,并保存这个值,我们要留到下边用
这个修改是为了解决报错:
HTTP ERROR 403 No valid crumb was included in the request
为了解决这个问题,我们必须在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
这个时候如果我们新提交一个PR
我们可以看到
等一会成功以后(为了方便查看我我在pipeline里边加了sleep 300)
原文
https://www.503error.com/2020/gitlab-ci-jenkins-webhook/1739.html