基于阿里云容器的 CI/CD 落地实践( 二 )


?

  • 构建任务自动化主要考虑的问题有:
  • 当main/master branch有代码提交commit生成时 , 如何自动触发构建任务执行?
  • 不同语言应用 , 比如java应用或者前端应用的构建流程是怎样的?包含哪些步骤?
  • 生成的交付物镜像如何成功放至到阿里云容器镜像服务的私有仓库里?
  • 交付物传输过程如何确保网络传输的安全性与可靠性?
?
部署自动化我们的部署环境是在阿里云容器集群中 , 当前每个部署环境通过命名空间来进行资源隔离 , 后续还会做资源隔离升级 。 目前对于在K8S集群中的应用部署 , 主流的解决方案有Helm和Kustomize , 我们最后选择了HelmV3来实施 。 Helm与Kustomize之间的选择是另一个有意思的话题 , 不在本章展开 。 基于Helm的部署自动化简单来说就是构建一个能够运行helm Install指令的jenkins任务 。 后文实施部分会详细讲述 。
?
  • 部署自动化主要考虑的问题有:
  • 如何获取到交付物?
  • 部署的是哪个交付物?要部署的目标环境是哪个?
  • 如何定义部署成功?
  • 部署失败了 , 如何感知到故障?如何快速定位到问题?
  • 如何实现回滚操作?
?
事件监控与告警机制CICD的目标是尽可能的自动化全流程 , 降低人为参与的程度 。 当自动化程度越高 , 对于自动任务的故障发现与告警就越有必要 。 我们的服务部署在阿里云容器集群中 , 基于Jenkins2.0来搭建自动化CI/CD的任务 , 构建部署依赖与Jenkins任务执行是否成功 , 以及集群中的资源按照Helm的定义是否如期更新运行 。 CI/CD相关的事件监控围绕着集群资源事件监控以及Jenkins任务监控两方面来进行 。
  • 阿里云容器集群事件监控与告警
  • 阿里云服务提供了事件监控与告警服务 , 可以直接配置使用 , 如图所示 , 该示例为阿里云集群服务/运维管理/事件列表提供的事件监控仪表盘服务 。 我们可以轻松得到整个集群资源运行的情况 。

基于阿里云容器的 CI/CD 落地实践文章插图
  • 进入“告警配置”服务就能配置基本事件的告警 , 集群初始化了很多基本事件的告警配置 , 比如Pod/Node OOM;Pod启动失败 , 或者资源不足 , 无法调度等 。 可以依据业务需求 , 定制化告警事项 。 笔者目前采用的是使用默认配置的告警模版 , 对发生频次做了一定容忍 , 通过邮件方式进行告警 。

基于阿里云容器的 CI/CD 落地实践文章插图
?
  • Jenkins任务失败自动发送邮件告警
  • E-mail Notification Plugin可以帮助实现Jenkins服务对于任务完成自动发送邮件的功能 。
  • 首先在Jenkins/configuration/Extended E-mail Notification配置SMTP邮件服务信息 , 我们使用的是阿里云邮件推送服务, 确保填写了正确的smtp server ,smtp port , 如果有smtp username/passwrod , 也需要正确填写 。

基于阿里云容器的 CI/CD 落地实践文章插图
?
  • 其次在Jenkinsfile里声明使用email extension plugin , 对于构建任务失败自动发送邮件的代码块如下:
emailext (to: 'XXX@example.com',subject: "FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",body: """FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]':
Check console output at "${env.JOB_NAME} [${env.BUILD_NUMBER}]"
""",recipientProviders: [[$class: 'DevelopersRecipientProvider']])
?
实施基于Dockerfile/Jenkinsfile构建CI流水线