Jenkins集成GitLab的正确姿势,实现Git代码提交触发CI/CD
❝
jenkins和gitlab是目前DevOps工具链中最常见的,抛开gitlab-ci不谈,gitlab代码提交触发jenkins流水线是最经典的搭配。 这里就介绍下如何配置实现jenkins和gitlab之间的集成。
安装GitLab Plguin
- Gitlab Plugin- 这个插件允许GitLab在提交代码或打开/更新合并请求时触发Jenkins中的构建。它还可以将构建状态发送回GitLab。

image.png
配置Jenkins Server
首先创建GitLab凭证,将凭证填充到 Manage Jenkins->System->enable authentication for '/project' end-point。
❝
通过该配置,相当于创建了jenkins job 可以操作访问gitlab的凭证,在后面的jenkinsfile中就会使用声明并使用该凭证。


配置Jenkins Job
创建jenkins job, 源代码管理选 Git,Repository URL 填写你 gitlab 上源码 repo 的地址,Credentials 是拉取代码时需要用到的身份认证

image.png
构建触发器选择 “Build when a change is pushed to GitLab” (记住后面的GitLab webhook URL 后面要填在gitlab的webhooks中),按照下面勾选
同时点击“高级”,“Allowd branches” 勾选 “Filter branches by regex”
点 “Generate” 生成 token,这个 token 用于填写到 gitlab 的 webhook 里,gitlab 检测到代码提交,会通知 webhook 里填写的 Jenkins 生成的回调URL,并带上这个 token,防止其它人触发 jenkins 的持续集成
注: 复制出 URL 和 token,后面配置 gitlab 的 webhook 会用到

image.png
❝
该步骤的目的主要是为了将要通过gitlab触发的jenkins job的信息准备好,用于后面的配置gitlab-webhook, 让gitlab知道该触发哪个jenkins job.
新版jenkins可能遇到的坑
在“Generate” 生成 token时候,如果使用的是高版本的 jenkins ,会出现403错误 HTTP ERROR 403 No valid crumb was included in the request
这是因为 jenkins 的防止跨站点请求伪造(Prevent Cross Site Request Forgery exploits)阻拦了请求,本来低版本的 jenkins 可以在界面把这个关掉,貌似高版本去掉了,可以通过如下方式:
hudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION = true
如果出现下图所示的情况,就表示命令成功了

image.png
上面的方法对于在容器里运行的jenkins而言,需要进入容器修改配置,永久生效
修改/usr/local/bin/jenkins.sh , 找到exec java那行,添加-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
# 最终效果
exec java -Duser.home="$JENKINS_HOME" -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true "${java_opts_array[@]}" -jar ${JENKINS_WAR} "${jenkins_opts_array[@]}" "$@"
至此,jenkins 的持续集成配置好了,还需要配置 gitlab 的 webhook,用于代码提交通知 jenkins。
配置Gitlab Webhook
打开 gitlab 的 repo 的 Settings-Integrations,URL 和 Secret Token 填写 jenkins job中构建触发器部分生成的,点击 “Add webhook”,搞定!
在链接那里输入之前jenkins上提供的webhook url 以及“Secret token“,编辑完后保存
点击测试,如果返回200,那就成功了,去jenkins看看有没有自动构建的记录


配置Jenkins返回执行状态
上面步骤仅仅实现了gitlab代码提交触发jenkins job, 那么job执行完成后的状态,怎么在gitlab上看到呢?
pipeline {
agent any
options {
gitLabConnection('gitlab-connection')
//Manage Jenkins->System->enable authentication for '/project' end-pointYour配置的GitLab Connection
}
stages {
stage('build') {
steps {
updateGitlabCommitStatus name: 'build', state: 'running'
hogehoge
}
}
}
post {
success {
updateGitlabCommitStatus name: 'build', state: 'success'
}
failure {
updateGitlabCommitStatus name: 'build', state: 'failed'
}
}
}
参数说明:
gitLabConnection 是和GitLab链接的名称。GitLab名称的设定是在jenkins管理>系统设定>Gitlab当中设置详细的gitlab url和token
updateGitlabCommitStatus
name: build 名称
state: pending, running, canceled, success, failed
参考:
Jenkins集成GitLab的正确姿势,实现Git代码提交触发CI/CD的更多相关文章
- Git代码提交规范
1. 引言 思想,因人而异,难以重复 写代码时,每个人的习惯是不一样的,所以,引入了代码规范,为了省力,引入了自动格式化代码工具,前端工程中比较典型的自动格式化代码工具如:Prettier · Opi ...
- 常用git代码提交命令
知识点:本篇博客记录了日常开发中,所涉及到git代码提交命令 (一)初始化本地仓库,提交代码,提交到远程git远程仓库 git init //初始化本地仓库 git add . //将当前目 ...
- 自建Git服务Gogs和CI/CD服务Drone
自建Git服务Gogs和CI/CD服务Drone 项目:https://gogs.io Gogs运行 docker run -d --name=gogs -p 10022:22 -p 10088:30 ...
- 技术干货:Jenkins集成GitLab
Jenkins免密拉取GitLab项目 1.在Jenkins上为GitLab创建一个专有的拉取代码的账号 Jenkins需要构建哪些项目就在GitLab给予账号相应权限 我这里已经创建过Jenkins ...
- Salesforce学习之路(四)利用Jenkins和Git实现Salesforce的CI/CD功能
上文提到,基于CRM的二次开发是必不可少的,但是在实际项目中CI/CD是不可忽略的一个重要部分,与传统的Java,Python项目不同,如果对Salesforce进行持续集成和持续部署呢? 结合找到的 ...
- git代码提交步骤,教程
代码提交 代码提交一般有五个步骤: 1.查看目前代码的修改状态 2.查看代码修改内容 3.暂存需要提交的文件 4.提交已暂存的文件 5.同步到服务器 1. 查看目前代码的修改状态 提交代码之前 ...
- git代码提交与克隆
在工作中,越来越多的人会使用git来管理代码.下面简单的介绍一下git在工作中的使用流程 1.给你一个git地址,将代码拉下来基本操作流程如下: 1.1 git clone "项目地址&qu ...
- Git代码提交报错 (Your branch is up to date with 'origin/master)
一.前言 今天码云上提交自己本地的一个SpringBoot+Vue的小项目,由于前端代码提交第一次时候提交码云上文件夹下为空,于是自己将本地代码复制到码云拉取下来代码文件夹下,然而git add . ...
- jenkins集成gitlab
一.配置jenkins 1.安装Gitlab Hook Plugin )生成随机token 在系统中生成 openssl rand -hex 0f2a47c861133916d2e299e3 )创建 ...
- git代码提交方式
https://my.oschina.net/tearlight/blog/193921 <a>github的提交方式 (1)git add .----------------- ...
随机推荐
- Zabbix“专家坐诊”第187期问答汇总
问题一 Q:zabbix server 5.0有办法不通过脚本监控SSL证书到期时间么? A:目前还是流行通过脚本方式去获取. Q:如果是通配符证书应该怎么监控? A:通过解析域名获取对应的过期时间的 ...
- RC4Drop算法的工作原理揭秘:加密技术的进步之路
RC4Drop算法起源: RC4Drop算法是RC4算法的一种改进版本,旨在解决RC4算法在长时间加密过程中可能出现的密钥流偏置问题.RC4算法由Ron Rivest于1987年设计,是一种流密码算法 ...
- gitee 流水线 定时触发 不能用,不能白嫖了
gitee 流水线 定时触发 不能用,不能白嫖了 白研究半天了,只好回去拿centos服务器 搞定时任务了
- Codeforces Round #844:C. Equal Frequencies
一.来源:Problem - C - Codeforces 二.题面 三.思路 先考虑一个子问题模型:我们现在有用\(m_1\)种随机字母组成的n个数,各字母个数未定,现在需要使这n个数变为\(m_2 ...
- 算法研究之快速排序java版
很早之前就已经接触过快速排序算法了,面试当中也屡屡被问到,虽然明白其原理,但从未真正的用代码敲出来. 写关于算法的代码之前一定要原理想明白,不然就是盲目,在参考有关资料及自己的沉思之后,写出如下代码, ...
- AOSP编译成功后关闭终端emulator命令找不到
当我们编译好AOSP系统源码后,可以通过emulator命令打开模拟器,但是当我们关闭终端后,在次打开终端输入emulator命令,提示未找到命令: 此时我们需要重新执行下面语句 source bui ...
- 【UE虚幻引擎】干货!UE修改分辨率的3种方法
虚幻引擎作为一款实时3D创作工具,在游戏.建筑.影视动画.虚拟仿真等领域受到全球各行各业创作者广泛欢迎,在UE中获取和设置分辨率也是3D创作开发工作中的常用功能.本文介绍了在虚幻引擎中修改分辨率的3种 ...
- Lambda Web Browser使用教程
Lambda web browser是一个功能强大的UE内置浏览器插件, 允许用户在编辑器模式和运行时启动一个浏览器窗口, 对于一些采用传统BS架构的项目而言, 控制页面都放在前段, 若想要将控制页面 ...
- 前端开源项目UIRecorder录制脚本遇到的一些问题
D:\nodejs\node_global>uirecorder init __ ______ ____ __ / / / / _/ / __ \___ _________ _________/ ...
- 记录--Threejs-着色器实现一个水波纹
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 hree.js 是一个基于 WebGL 的 JavaScript 3D 库,用于创建和渲染 3D 图形场景. 一. 图像渲染过程 1.we ...