💯 作者: 俗世游子【谢先生】。 8年开发3年架构。专注于Java、云原生、大数据等领域技术。

💥 成就: 从CRUD入行,负责过亿级流量架构的设计和落地,解决了千万级数据治理问题。

📖 同名社区:​​51CTO​​​、 ​​github​​​、掘金​、​​gitee​​​。

📂 清单: ​​​goku-framework​​​、​【更新中】享阅读II

DevOps系列

​深入浅出DevOps:DevOps核心思想​

​深入浅出DevOps:版本控制Git&Gitlab​

​深入浅出DevOps:持续集成工具Jenkins​

​深入浅出DevOps:简易Docker入门​

​深入浅出DevOps:Jenkins实战之CI​

​深入浅出DevOps:SonarQube提升代码质量​

​深入浅出DevOps:SonarQube提升代码质量【下】​

​深入浅出DevOps:Jenkins构建器​

​深入浅出DevOps:私有镜像仓库Harbor​

​深入浅出DevOps:Jenkins基于Harbor部署​

​深入浅出DevOps:初识Pipline流水线任务​

​深入浅出DevOps:流水线任务改造​


前言

本人所在团队中总是出现这样的情况:

  • 前后端联调,前端采用TypeScript的方式开发,而前端为了方便采用了一个插件:
  • 就是在生成api.ts这种文件的时候需要通过后端服务的Swagger来生成,返回对象等信息

由于前端强依赖于后端服务,因此每次部署后端服务,要么就需要跟前端说一声已成功部署,偶尔就会忘记这个事情从而导致联调工作搁置。

在我看来:这种方式的前后端联调是一个非常痛苦的过程

构建通知

由于出现上述的情况,所以我们将部署交给Jenkins之后,通知到人的这个过程也是非常重要的一个步骤。而通过的方式有很多种,在Jenkins内部支持如下通知方式:

  • 电子邮件
  • Hipchat
  • Slack
  • 。。。

除了电子邮件的方式,其他的本人也没有使用过,所以我这里就不做过多的介绍

如果大家有公司采用的是钉钉的话,还可以通过钉钉来进行通知,主要是需要安装一款插件:

那我就先来介绍一个关于钉钉通知的流程:

  • 通过​​钉钉机器人插件​​能够让Jenkins和钉钉进行交互,通过我们配置的WebHooks将构建结果已群组机器人的名义通知到对应的群组中

开始配置DingTalk

关于插件的安装,这里就不多进行介绍,我们在前面也已经介绍过很多次了。

群组添加机器人

下面我们来直接进行配置介绍, 首先在配置之前需要先在群组中添加机器人,得到对应的WebHooks地址

下面看我操作

  • 点击群组的设置按钮,找到其中的智能群助手

深入浅出DevOps:Jenkins任务构建结果通知_Jenkins

深入浅出DevOps:Jenkins任务构建结果通知_DevOps_02

  • 在添加机器人中选择自定义的选项

深入浅出DevOps:Jenkins任务构建结果通知_Jenkins通知_03

深入浅出DevOps:Jenkins任务构建结果通知_Jenkins通知_04

  • 添加完成之后得到最终的webhook地址信息
https://oapi.dingtalk.com/robot/send?access_token=access_token

Jenkins配置

在通知之前,我们需要在​​系统管理>系统配置​​中进行基本配置

深入浅出DevOps:Jenkins任务构建结果通知_Jenkins通知_05

通知时机相信大家都明白,这里就不用过多的介绍,一般情况下我只通知构建成功和失败的时候,其他的可以不需要通知

点击新增按钮,会出现添加机器人的窗口,根据需要配置的信息填写即可,正确填写名称和webhook地址

深入浅出DevOps:Jenkins任务构建结果通知_Jenkins_06

测试成功之后,在钉钉中会下发如下信息,也就表示我们在Jenkins中添加钉钉机器人的配置是成功的

流水线任务配置

相信大家还记得,在流水线任务中,判定运行过程成功还是失败是通过​​post​​标签来实现的,那么我们最终配置的过程也是如此

我们需要在和​​stages​​平级的位置添加​​post​​配置

post {
success {
dingTalk(
robot: 'Jenkins',
type:'MARKDOWN',
title: "success: ${JOB_NAME}",
text: ["- 成功构建:${JOB_NAME}项目!\n- 持续时间:${currentBuild.durationString}\n- 任务:#${JOB_NAME}"]
)
}
failure {
dingTalk(
robot: 'Jenkins',
type:'MARKDOWN',
title: "fail: ${JOB_NAME}",
text: ["- 失败构建:${JOB_NAME}项目!\n- 持续时间:${currentBuild.durationString}\n- 任务:#${JOB_NAME}"]
)
}
}

此处内容可以完全复制,这里只需要注意​​robot​​和之前在Jenkins内配置的机器人ID一致

而关于DingTalk的语法,我们可以从它的​​官方网站​​查看。介绍的还是比较详细的,在使用的时候那块不清楚的,可以直接查看官网

深入浅出DevOps:Jenkins任务构建结果通知_DevOps_07

构建进行测试

当流水线任务构建成功之后,我们能够很快的在钉钉的群组中发现通知消息。

此处也就说明了我们通过DingTalk整合钉钉的通知就已经成功了

深入浅出DevOps:Jenkins任务构建结果通知_DevOps_08


配置邮件通知

上面的属于是一种通知方式,但是这种方式可能并不适用于全部的情况。接下来我们再来看看一种更加通用的通知方式

本人现在公司内部通讯采用的是WeLink,这就很糟心了

邮件已经是一种非常普遍的传递消息的方式,那万能的Jenkins当然也是支持通过邮件的方式来进行消息通知的。

当然了,基本的配置是必可避免的,接下来我们来看看吧

配置Jenkins Location邮件

在我们配置邮件服务之前,需要注意的是:一定要先配置系统管理员邮箱

进入到​​系统管理>系统配置​​页面,先找到Jenkins Location的位置

这里针对的是在安装Jenkins页面的时候,出现的配置地址和邮箱
配置的邮件其实就相当于通知的主邮件发送

我们先在这里配置好

深入浅出DevOps:Jenkins任务构建结果通知_DevOps_09

QA: 为什么必须要配置系统管理员?

经过本人的不断测试,如果没有配置系统管理员的话,在测试邮件发送的时候会出现发送异常的情况出现。

配置邮件通知

系统管理员邮箱配置完成之后继续向下滑动,滑动到邮件通知的位置

深入浅出DevOps:Jenkins任务构建结果通知_Jenkins_10

不知道大家有没有做过关于邮件的开发,这种开发最重要的是要让指定邮箱账号开启第三方发送邮件的服务,总的来讲,每种邮箱都需要在自己的设置中进行开放

我在这里已搜狐邮箱为例:

其他邮箱基本上都是一样的操作

深入浅出DevOps:Jenkins任务构建结果通知_DevOps_11

既然Jenkins要使用SMTP服务,那么我们就将SMTP服务所对应的地址信息填写到对应项中,SMTP服务所对应的端口是:​​25​

我保证搜狐邮箱对应的端口,其他的邮箱建议大家到对应的地址进行查看

接下来就必须要进行登录授权认证了:

在点开的高级选项中,在如下选中框中输入用户名和密码。懂的都懂,这里就不过多赘述了

还是要啰嗦一句:
这里的密码并不是邮箱账号本身的密码,而是各位在开启服务的时候生成的第三方客户端独立密码

深入浅出DevOps:Jenkins任务构建结果通知_DevOps_12

测试邮件配置是否成功

正常配置成功之后,接下来我们就可以进入到测试的阶段。如下所示,当出现图中提示的时候说明整个配置过程是成功的

深入浅出DevOps:Jenkins任务构建结果通知_DevOps_13

既然如此,接下来我们就要跟任务进行一个配置,来搞定邮件推送构建结果

整合到Jenkins任务

在Jenkins文档介绍中我们看到了关于邮件通知的示例,既然如此,我们就先拿过来试试呗。反正又不掏钱!!!

我们来修改一下​​Jenkinsfile​​,把之前的钉钉通知改为邮件通知

post {
success {
mail to: 'xxx@qq.com',
subject: "${JOB_NAME}构建成功",
body: "成功构建:${JOB_NAME}项目!\n- 持续时间:${currentBuild.durationString}\n- 任务:#${JOB_NAME}"
}
failure {
mail to: 'xxx@qq.com',
subject: "${JOB_NAME}构建失败",
body: "成功构建:${JOB_NAME}项目!\n- 持续时间:${currentBuild.durationString}\n- 任务:#${JOB_NAME}"
}
}

此处内容可以完全复制,调整完结构之后,我们立即构建试试,稍等片刻等待结果的出现!!!

各位:见证奇迹的时刻!!

深入浅出DevOps:Jenkins任务构建结果通知_DevOps_14

好的,到此邮件通知也正式收工

最后

基于钉钉和邮件的通知到这里也就全部结束了。

与此同时关于DevOps的相关介绍到这里也就到此收尾,后续内容敬请期待!!!