每次构建完成,你是不是总得主动去Jenkins查看结果?来吧,让Jenkins学会主动向你“汇报工作”。
在持续集成和持续部署的世界里,Jenkins就像是团队的勤劳工人,不知疲倦地构建、测试、部署我们的代码。但这位勤劳的工人有个小缺点——它太“沉默寡言”了。
想象一下:你触发了一个构建,然后就去喝咖啡了,期间不时手动刷新页面查看结果。这就像寄出一封信后,每天跑到邮局问:“有我的回信吗?”多不方便啊!
1. 为什么你需要Jenkins构建通知?
作为开发人员,我们不需要(也不应该)像监工一样时时刻刻盯着Jenkins。我们需要的是当一个构建完成时——无论成功还是失败——Jenkins能主动通知我们。
有了构建通知,你可以:
- 第一时间获知构建结果,失败时立即着手修复,而不是等发现问题时已经过去了半天
- 减少手动检查的时间消耗,提高开发效率
- 与团队协作工具集成,将通知推送到你们日常使用的沟通平台
- 掌握构建趋势,了解项目的健康状况
好消息是,Jenkins通过其声明式管道和丰富的通知插件,完全可以实现这些需求。下面就带你深入探索Jenkins的构建通知机制。
2. Jenkins声明式管道基础回顾
在深入了解通知之前,我们先快速回顾一下Jenkins声明式管道的基础结构。声明式管道使用简化的DSL语法,使得定义CI/CD流程变得更加简单直观。
一个最基本的声明式管道如下所示:
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building...'
}
}
stage('Test') {
steps {
echo 'Testing...'
}
}
stage('Deploy') {
steps {
echo 'Deploying...'
}
}
}
}
在这个管道中,我们定义了三个阶段:构建、测试和部署。但是,它缺少了一个关键部分——通知。无论构建成功还是失败,我们都无法自动获知结果。
3. 理解post部分:通知的“大本营”
在声明式管道中,post部分是我们处理通知的“大本营”。它定义了一个或多个步骤,这些步骤根据管道或阶段的完成情况运行。
post部分支持多种条件块,让我们可以根据不同的构建状态触发不同的操作:
- always:无论管道或阶段的完成状态如何,都会运行其中的步骤
- changed:只有当当前管道或阶段的完成状态与之前的运行不同时才会运行
- success:只有当当前管道或阶段的完成状态为"成功"时运行
- failure:只有当当前管道或阶段的完成状态为"失败"时运行
- unstable:只有当当前管道或阶段的完成状态为"不稳定"时运行(通常由于测试失败或代码违规导致)
- aborted:只有当当前管道或阶段的完成状态为"中止"时运行(通常由于管道被手动中止)
3.1 在管道级别使用post
将post部分放在管道的最后,可以针对整个管道发送通知:
pipeline {
agent any
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
post {
always {
echo '我总会说 Hello again!'
}
success {
echo '管道成功完成!'
}
failure {
echo '管道失败!'
}
}
}
3.2 在阶段级别使用post
你还可以在各个阶段内使用post,针对特定阶段的结果发送通知:
pipeline {
agent none
stages {
stage('Example Build') {
agent { docker 'maven:3-alpine' }
steps {
echo 'Hello, Maven'
sh 'mvn --version'
}
post {
success {
echo '阶段成功完成 - 可以在这里发送通知'
}
}
}
stage('Example Test') {
agent { docker 'openjdk:8-jre' }
steps {
echo 'Hello, JDK'
sh 'java -version'
}
}
}
}
4. 配置邮件通知:经典但实用
邮件通知是最经典、最常用的Jenkins通知方式。通过Email Extension Plugin,我们可以实现高度定制的邮件通知。
4.1 安装和配置邮件插件
首先,需要在Jenkins中安装Email Extension Plugin:
- 进入Jenkins管理界面 → Manage Jenkins → Manage Plugins → Available标签
- 搜索"Email Extension Plugin"并安装
- 重启Jenkins使插件生效

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



