Jenkins Gitlab插件的使用
一、Overviews
Jenkins的Gitlab插件能接收gitlab仓库代码事件触发的Webhook来触发Jenkins Job/Pipeline的构建,并且能将构建状态同步到Gitlab中.
插件Github:https://github.com/jenkinsci/gitlab-plugin
利用此插件可实现如下效果:
二、安装
Jenkins -> 系统管理 ->插件管理->可用插件->搜索"gitlab"
插件下载地址:https://plugins.jenkins.io/gitlab-plugin
三、配置
1、Gitlab发送Webhook到Jenkins时的安全认证配置
Gitlab代码仓库配置web hook时需要Jenkins Gitlab插件的Token,来加密验证webhook的安全性
方式一:全局性的认证Token
① Jenkins创建新用户(授予Job/Build权限即可)
② 获取新用户的User ID和API Token
③ Gitlab配置web hook填写URL时,使用http://USERID:APITOKEN@JENKINS_URL/project/YOUR_JOB
即可(Secret Token
可忽略)
方式二(推荐):单独项目Jenkins Job的认证Token
在Gitlab中配置Webhook时,将图中的Token填入即可
方式三(不推荐):不使用认证
① Manage Jenkins -> Configure System -> GitLab
section -> 取消勾选 "Enable authentication for '/project' end-point"
2、Jenkins回写构建状态到Gitlab时需要的认证授权配置
Jenkins通过Gitlab API将构建状态回写到对应代码仓库时,需要有权限在代码仓库中创建评论,更改状态等
步骤一
① Gitlab创建新用户(建议命名用户名时尽量见名知意,例如:Jenkins)
② 登陆新用户,获取Access Tokens
,Token权限只要api
即可(及时复制Token,只显示一次)
③ 在Jenkins中创建GitLab API token
类型的凭据,在API token
字段中保存上一步获取的Token
④ 在Jenkins Gitlab插件中配置gitlab Server相关信息
步骤二
对应代码仓库配置Jenkins Job时要将该Token所属的用户加入members中,授予Developers角色或有更高权限的角色
五、Jenkins Job中配置Webhook
1、配置Gitlab Buid Trigger
2、配置构建后Gitlab回写信息的动作
添加构建后动作"Pushlish build status to Gitlab"
之后会在Gitlab代码仓库的
CI/CD-->Pipeline
和Merge Request中看到构建状态图标添加构建后动作"Add note with build status on Gitlab merge request"
之后会根据构建状态的不同在Gitlab的Merge Request中添加不同的comment评论
添加构建后动作"Add Vote for build status on Gitlab merge request"
之后会根据构建状态的不同在Gitlab的Merge Request中显示不同的投票
添加构建后动作"Accept Gitlab merge request on success"
该动作会在build构建成功后在Gitla上自动同意接受Merge Request
不添加构建后动作
Gitlab的事件只会触发Jenkins构建,不会回写任何信息到gitlab对应代码仓库中
五、Gitlab 代码仓库配置Webhook
六、获取Webhook HTTP请求信息的变量
对于Gitlab发送过来的Webhook HTTP POST请求信息,可直接通过以下变量来获取。
- gitlabBranch
- gitlabSourceBranch
- gitlabActionType
- gitlabUserName
- gitlabUserEmail
- gitlabSourceRepoHomepage
- gitlabSourceRepoName
- gitlabSourceNamespace
- gitlabSourceRepoURL
- gitlabSourceRepoSshUrl
- gitlabSourceRepoHttpUrl
- gitlabMergeRequestTitle
- gitlabMergeRequestDescription
- gitlabMergeRequestId
- gitlabMergeRequestIid
- gitlabMergeRequestState
- gitlabMergedByUser
- gitlabMergeRequestAssignee
- gitlabMergeRequestLastCommit
- gitlabMergeRequestTargetProjectId
- gitlabTargetBranch
- gitlabTargetRepoName
- gitlabTargetNamespace
- gitlabTargetRepoSshUrl
- gitlabTargetRepoHttpUrl
- gitlabBefore
- gitlabAfter
- gitlabTriggerPhrase