基于阿里云容器的 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任务监控两方面来进行 。
- 阿里云容器集群事件监控与告警
- 阿里云服务提供了事件监控与告警服务 , 可以直接配置使用 , 如图所示 , 该示例为阿里云集群服务/运维管理/事件列表提供的事件监控仪表盘服务 。 我们可以轻松得到整个集群资源运行的情况 。
文章插图
- 进入“告警配置”服务就能配置基本事件的告警 , 集群初始化了很多基本事件的告警配置 , 比如Pod/Node OOM;Pod启动失败 , 或者资源不足 , 无法调度等 。 可以依据业务需求 , 定制化告警事项 。 笔者目前采用的是使用默认配置的告警模版 , 对发生频次做了一定容忍 , 通过邮件方式进行告警 。
文章插图
?
- Jenkins任务失败自动发送邮件告警
- E-mail Notification Plugin可以帮助实现Jenkins服务对于任务完成自动发送邮件的功能 。
- 首先在Jenkins/configuration/Extended E-mail Notification配置SMTP邮件服务信息 , 我们使用的是阿里云邮件推送服务, 确保填写了正确的smtp server ,smtp port , 如果有smtp username/passwrod , 也需要正确填写 。
文章插图
?
- 其次在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流水线
- 交付物由Dockerfile定义 , 每个应用服务的根目录下都应该有一个Dockerfile文件 , 定义了该服务的构建过程 。 本节里我们举java微服务来说明 , 这也是我们后端微服务的构建流水线 。
- Java微服务
- Java应用的构建逻辑定义在Jenkinsfile里 , 基于maven实现 。 Dockerfile模版只定义了如何调用构建好的jar包 , 即部署指令 。 这样做的主要目的是尽可能缩小镜像 , 降低网络数据传输的负载 。
- 声明式Jenkinsfile的好处是可以通过代码方式定义与管理流水线逻辑 。 基于代码就拥有了版本管理的能力 。
- 构建Pipeline主要包含了以下步骤:
- scm 获取项目源代码
- 基于maven的构建 , 生成可部署的jar包
- 基于maven的单元测试
- 基于SonarQube的代码检查
- 基于kaniko的云原生方式 , 生成image , 并推送至阿里云私有镜像仓库
- 构建Pipeline主流程之外的后置步骤是构建任务执行完成后的downStream任务 , 链接的是通用部署任务 , 这种结构解耦了构建与部署逻辑 , 可以使不同的构建任务复用同一个部署任务 。
- 王兴称美团优选目前重点是建设核心能力;苏宁旗下云网万店融资60亿元;阿里小米拟增资居然之家|8点1氪 | 美团
- 建设|《青岛市城市云脑建设指引》发布
- 和谐|人民日报海外版今日聚焦云南西双版纳 看科技如何助力人象和谐
- 注册|阿里申请注册“爆改吧!小店”商标,打造线下特色实体小店
- 服务平台|HashiCorp发布多云服务平台Consul 1.9版
- 物种|苏宁易购赋能落地“新物种”旗下云网万店A轮融资60亿
- 电商|直播电商风云巨变,新一波红利路在何方?
- 耽误|被阿里耽误的虾米的一生
- 方志|(社会)贵州上线“方志云”激活地方志价值
- 科技|短视频行业领先 云想科技成长空间广阔