Skip to content

一、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 默认触发器: 勾选AlwaysAborted,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 用户就是这个角色内的用户]

image-20250616104434758

构建项目,观察邮件通知

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
}

最后收到的邮件效果如下:

最近更新

采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 运维小弟