这段时间在测试kubernetes的CI、CD,使用了业内很出名的工具–Jenkins。之前有接触过,但都是在自己 玩,以及公司很小的项目中使用过。jenkins 可谓是持续集成和持续交付工具中的佼佼者。 而且前段时间jenkins 官方还发布了JenkinsX(受苹果启发么?哈哈)。本文主要介绍如何 使用Bearychat 与 Jenkins集成。后续会分享整个持续集成、部署架构。

Bearychat介绍

官方介绍:倍洽是我们在 2015 年推出的团队内部沟通工具倍洽不仅提供了更适合工作场景 的团队内部 IM,在此之上通过丰富的第三方集服务集成、自由定制的开放接口等方式将重要 的信息快速汇集,再通过信息整理、全局搜索等方式来帮助团队重新梳理信息流。

通俗的说,就是国内版的slack。不但有微信的聊天功能,而且集成很多第三方的工具, 如SCM方面有著名的Github、Gitlab、Gogs等,集成部署类有Jenkins、Travis、CircleCi等。 还有一些其它功能的集成服务。在团队协作中,这种类slack团队IM工具, 使用上手了,可以极大的 提供团队的开发交通效率。

不说了,感觉我就是来打广告的。下面介绍下除了bearychat之外,还有哪些工具可以作为 jenkins 通知的方式吧。

Jenkins 通知插件

其它插件及具体说明可以访问jenkins plugin market查看, email 的方式有点传统,不过也是最简单的。因为每个公司基本有内部的邮箱系统,员工 都有自己的邮箱,而且设置的话,也相对小白。

但是如果使用slack,或者bearychat这种现代化IM工具的话,更为方便实时,就像我们平常 使用Wechat、QQ聊天一样。而且不止Jenkins 可以用得到,也可以绑定github,jira等工具。 将消息都集中到一个工具上,而不是这个服务用一套通知,那个服务用另外一个通知,能 合在一起尽量不要分开。因为这又不是分布式。😄

Bearychat 与jenkins集成配置

首先呢,我们先要在Jenkins web ui里进行安装插件工作,Manage system -> Manage plugins, 在可选插件里,即可找到bearychat,然后点击直接安装,稍等片刻即可安装完成。

然后,去 Configure System里,在全局配置里找到BearyChat通知,在本文发表时,只需要 配置3个值。

定制Bearychat 消息格式

由于在Jenkins里面,我们的项目大多使用的是Jenkins multibranch pipeline,所以,这里通过在jenkinsfile 里定义好的流程,根据结果判断,添加相应通知即可,以下列表内容是custom bearychat notify 的消息格式:

// BearychatSend notify

void bearychat_notify_start() {
  bearychatSend color: "#00FFFF", attachmentText: "Started Pipeline [${env.JOB_NAME} #${env.BUILD_NUMBER}](${env.BUILD_URL})"
}

// build image success or failed notify
void bearychat_notify_successful() {
  bearychatSend title: "构建成功: ${env.JOB_NAME} ${env.BUILD_NUMBER}", url: "${env.BUILD_URL}"
  bearychatSend message: " Job ${env.JOB_NAME} 已经执行完成", color: "#00ff00", attachmentText: "Project: ${env.JOB_BASE_NAME}, 状态: 镜像构建成功, 镜像名字: ${env.IMAGE_NAME}"
}

void bearychat_notify_failed() {
  bearychatSend message: "构建失败: [${env.JOB_NAME} 执行中断, 请点击这里检查原因!](${env.BUILD_URL})", color: "#ff0000", attachmentText: "状态: 镜像构建失败"
}

// deploy namespace notify (default namespace: staging)
void bearychat_notify_deploy_successful(namespace='staging') {
  bearychatSend title: "Successful Deploy to ${namespace}, Click here to check!", url: "${env.KUBERNETES_UI}=${namespace}"
}

在相应需要消息通知的stage中,添加对应的notify 函数即可。另外也可以在优化下,在函 数里进行判断,这样可以减少定义函数的数量。

验证

附上一张消息通知的截图.