002GitLab集成Jenkins构建pipeline流水线任务
CI持续集成(Continuous Integration),CD持续部署(Continuous Deployment)
Jenkins是一个优秀的持续集成和持续部署平台,有丰富的插件支持,可以满足各种个性化build场景。
GitLab可以自主选择触发条件,如push/merge/发表评论等,都可以触发jenkins执行build。
整个架构的原理就是GitLab和Jenkins互相配置对方的api,然后就可以在执行相关操作的时候通知到对方。
GitLab主要是在系统里配置jenkins的api。
jenkins不仅要在系统里配置GitLab的api,Pipeline流水线脚本也要进行配置,才能正确通知到GitLab。Jenkins主要会把两种事件通知给GitLab,一种是创建build的任务事件,一种是更新任务状态的事件。
需要安装的插件
- gitlab-hook
- pipeline
- git
- blue ocean
- blueocean-i18n(没有此i18n国际化插件,打开blue ocean网页会卡住)
Jenkins配置触发条件

Build when a change is pushed to GitLa
此选项需要安装gitlab-hook插件。后面的url是hook地址,用于提供给git仓库,在满足触发条件的时候,通知jenkins执行此build构建。
其中Comment (regex) for triggering a build
是说在git仓库,发送“build-all”或"build-test"关键字,也会触发执行此build构建。
点击Advanced…
可以生成token。
这里的url和token是jenkins的api,可以提供给GtiLab使用,在代码合并/发表commit/push代码等操作时,通知Jenkins执行build操作。
发表评论触发正则检测,符合条件,会触发构建,正则内容可以是多个,使用“|”连接,如“(/build-all|/build-test)
”
编写Jenkins流水线脚本
Pipeline流水线脚本可以直接填写代码内容,也可以是放在Git代码仓库里文件,Jenkins会拉取仓库,然后读取指定的文件内容。
Definition选项Pipeline script
表示流水线使用脚本

Definition选项Pipeline script from SCM
表示从代码仓库读取脚本内容,Script Path是批脚本的相对路径(包含文件名的相对路径),这里直接填写文件名Jenkinsfile,也可以使用其它的名字。

Definition选项Pipeline script from SCM
表示流水线使用代码仓库中的脚本,如Git仓库,这里SCM为None,表示没有安装仓库支持插件,安装后选项才可用,如下图所示。

Credentials填写此仓库的鉴权信息,可以是用户名密码也可以是ssh共享密钥登录。
GitLab项目填写集成信息
指的是Jenkins提供的api,把jenkins的api告诉GitLab,这样GitLab才能通知Jenkins去执行build操作。
GitLab → Settings → Integration

Url和Secret Token填写前面步骤“Jenkins配置触发条件”里的url和token。下面是触发条件trigger condition,表示在什么情况下触发Jenkins执行build操作。
生成GitLab站点Access Tokens
这个是GitLab的api接口的token,可以提供给Jenkins,这样Jenkins就可以把Pipeline任务的状态及时通知给GitLab
GitLab → User Settings → Access Tokens → Persion Access Tokens

点击Create personal access token会生成一个32位的字符串,此字符串只显示一次,要复制并备份才可以,否则丢掉后就找不到了。

Jenkins配置GitLab信息
在Jenkins填写GitLab仓库的地址,可以添加多个GitLab仓库地址,每个连接地址都有一个唯一标识的名字,如下图里的“test”
Jenkins Home → Manage Jenkins → System Configuration → Configure System → GitLab

Connection name里的“test”,需要与测试脚本“Jenkinsfile”里配置gitLabConnection('test')
一致。
GitLab host URL填写GitLab的首页地址。
Credentials选择Gitlab API token,token就是上一个步骤“生成GitLab站点Access Tokens”里生成的token。
测试脚本Jenkinsfile
#!/usr/bin/groovy
pipeline{
agent any
post {
failure {
updateGitlabCommitStatus name: 'getcode', state: 'failed'
updateGitlabCommitStatus name: 'package', state: 'failed'
updateGitlabCommitStatus name: 'deploy', state: 'failed'
}
success {
updateGitlabCommitStatus name: 'getcode', state: 'success'
updateGitlabCommitStatus name: 'package', state: 'success'
updateGitlabCommitStatus name: 'deploy', state: 'success'
}
}
options {
gitLabConnection('test')
gitlabBuilds(builds: ['getcode', 'package', 'deploy'])
}
stages{
stage("getcode"){
steps{
echo "get code from scm"
}
}
stage("package"){
steps{
echo "packge code"
}
}
stage("deploy"){
steps{
echo "deploy packge to node1"
}
}
}
}
关于脚本里的stages和steps,请参考相关资料。
构建完成视图
Jenkins视图
gitlab视图
Reference: http://www.haosan.com/www/doc/view/?doc_id=2799
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2018-02-13 016_把普通用户免秘钥加入root用户的几种方式