我们很多时候都是自己在自己的服务器上搭建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的时候我们具体要做什么操作,例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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的地方选择增加,并保存这个值,我们要留到下边用
这个修改是为了解决报错:
1 |
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)
Latest posts by Zhiming Zhang (see all)
- aws eks node 自动化扩展工具 Karpenter - 8月 10, 2022
- ReplicationController and ReplicaSet in Kubernetes - 12月 20, 2021
- public key fingerprint - 5月 27, 2021