主题
一、GitLab&Jenkins集成
1.1 Gilab代码提交触发Jenkins构建
通过 GitLab 触发 Jenkins 自动构建:
- 开发者提交代码后,无需手动操作,Jenkins 立即拉取最新代码、执行编译、运行测试(单元测试、集成测试等),并反馈结果。
- 将传统“手动触发构建→等待结果→发现问题”的低效流程,转变为“代码提交→自动验证→即时反馈”的高效闭环,是 DevOps 中“自动化”与“快速反馈”的典型体现。
- 即时响应,代码提交后秒级触发,构建结果(成功/失败)即时反馈给开发者,缩短“编码→验证”的周期。
1.1.1 环境准备
网络连通性:GitLab 服务器能访问 Jenkins 的 Webhook 接口(如 http://jenkins-ip:8080 或域名)
1.1.2 Jenkins 插件安装
Generic Webhook Trigger
(核心插件,用于接收 GitLab Webhook 并触发构建)
1.1.3 Jenkins WebHook 配置
创建一个自由风格项目
,在构建触发器
中选择Generic Webhook Trigger
调用的时候:这里要把 JENKINS_URL 换成自己真实的Jenkins 服务器地址,有端口就加上端口,是域名就写域名。 比如 http://172.22.33.201:8080/generic-webhook-trigger/invoke
给URL添加一个触发的认证,token定义为: freestyle-webhook
生成的触发URL
bash
http://172.22.33.201:8080/generic-webhook-trigger/invoke?token=freestyle-webhook
手动触发验证
bash
curl -vs "http://172.22.33.201:8080/generic-webhook-trigger/invoke?token=freestyle-webhook" 2>&1
1.1.4 GitLab WebHook 配置
进入到admin管理页面设置
> 网络
> [出站]Outbound requests
- ✔ 勾选 允许来自 webhooks 和集成对本地网络的请求
- ✔ 勾选 允许系统钩子向本地网络发送请求
TIP
默认是不允许来自 webhooks 和集成对本地网络的请求
创建一个gitlab 代码库,进入项目设置,webhook的配置页面
配置要触发的URL,即Jenkins触发器接口URL;
选择发生哪种GitLab事件后触发此Webhook;例如:Push提交代码、Tag创建标签等等;
- 事件:
- Push 提交事件
- Tag Push 创建事件
- MergeRequest 合并事件
- Issue 问题创建更新事件
关闭SSL验证
执行推送事件测试,观察jenkins构建状态
1.2 Jenkin邮件构建通知
1.2.1 Jenkins 安装插件
上面我们提到过这个插件,Email Extension Template
,提供 Jenkins复杂邮件推送功能,可自定义邮件主题,内容,定义邮件接收对象等等
1.2.2 配置Jenkins邮件SMTP服务
配置Jenkins系统管理员邮件地址,⚠️ 需要填写成发送邮件的邮箱地址
系统管理
-> 系统设置
-> 系统管理员邮件地址
配置Jenkins邮件通知
系统管理
-> 系统设置
-> 邮件通知
- SMTP服务器:
smtp.exmail.qq.com
- 邮箱后缀:
@srebro.cn
- 使用SMTP认证,输入邮箱账号和密码
- 使用TLS协议,使用SSL 协议
- STMP 端口:
465
通过发送测试邮件测试配置
可以收到测试邮件📧
配置 Extended E-mail Notification 增强型邮件插件
系统管理
-> 系统设置
-> Extended E-mail Notification
- SMTP服务器:
smtp.exmail.qq.com
- STMP 端口:
465
- 创建发送邮箱的用户名/密码 全局凭证
- 使用TLS协议,使用SSL 协议
- 邮箱后缀:
@srebro.cn
- Default Content Type 默认内容类型 :
text/html
- Default Recipients默认收件人 :
admin@srebro.cn
- 允许未注册用户发送邮件
Allow sending to unregistered users
- Default Triggers 默认触发器: 勾选
Always
,Aborted
,Failure-Any
1.2.3 配置Gitlab用户邮箱
用户设置
, 编辑个人资料
往代码库提交一个记录,下面发送邮件通知会使用到
1.2.4 创建自由风格项目,验证邮件通知
创建一个自由风格项目,指定代码库地址,创建一个HTTP类型的GIT凭证🧾
增加构建步骤,执行shell脚本
bash
ls -al
echo "hello world"
echo "$BRANCH_NAME"
增加构建后操作步骤,Editable Email Notification
发送邮件通知
TIP
Content Type 选择HTML 方式
TIP
Triggers 触发器 默认包含 Aborted,Always,Failure 且发送对象始终有Developers 角色[ttc@srebro.cn 用户就是这个角色内的用户]
构建项目,观察邮件通知
1.2.5 创建pipeline项目,验证邮件通知
创建一个pipeline项目,参考流水线语法
TIP
进入片段生成器,选择checkout: check out from version control
,生成git-checkhout代码片段
groovy
checkout scmGit(branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[credentialsId: 'a11aa99b-7bba-48fd-bd01-46b68732578a', url: 'http://code.srebro.cn/opforge/demo.git']])
TIP
进入片段生成器,选择emailext: Extended Email
,生成邮件通知代码片段
groovy
emailext body: 'hello world!', subject: 'test', to: 'ttc@srebro.cn'
将Email写成一个函数,使用HTML的方式发送邮件通知
env.userEmail
: 定义一个全局变量,始终用于接受邮件的用户邮箱recipientProviders
: [buildUser(), developers()] : 邮件接受的对象
groovy
currentBuild.description = "branch: ${env.branchName}"
env.userEmail = "admin@srebro.cn"
//pipline
pipeline {
agent {
node {
label "master"
}
}
stages {
stage('CheckOut') {
steps {
script{
checkout scmGit(branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[credentialsId: 'a11aa99b-7bba-48fd-bd01-46b68732578a', url: 'http://code.srebro.cn/opforge/demo.git']])
}
}
}
}
post{
always {
script{
EmailUser("${env.userEmail}","${currentBuild.currentResult}")
}
}
}
}
def EmailUser(userEmail,STATUS){
emailext body: """
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
<table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
<td>(本邮件是Jenkins程序自动下发的,请勿回复!)</td>
</tr>
<tr>
<td><h2><font color="#0B610B">构建结果:"${STATUS}"</font></h2></td>
</tr>
<tr>
<td><br />
<b><font color="#0B610B">构建信息:</font></b><hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>项目名称:${JOB_NAME}</li>
<li>构建编号:${BUILD_ID}</li>
<li>构建状态: ${STATUS} </li>
<li>项目地址:<a href="${BUILD_URL}">${BUILD_URL}</a></li>
<li>构建日志:<a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
<li>历史变更记录 : <a href="${BUILD_URL}changes">${BUILD_URL}changes</a></li>
</ul>
</td>
</tr>
<tr>
</table>
</body>
</html> """,
recipientProviders: [buildUser(), developers()],
subject: 'jenkins2.0 【构建通知】: Build # $BUILD_NUMBER - $BUILD_STATUS!',
to: userEmail
}
最后收到的邮件效果如下: