基于阿里云容器的 CI/CD 落地实践
文章插图
背景大家好 , 笔者所在的团队当前面临落地公司业务数字化转型的重大任务 。 我们面临的主要研发挑战是如何快速得迭代出不断新增的开发需求 , 由于没有太多历史包袱 , 团队选择的技术栈也是相对成熟与流行的 , 比如我负责的Devops主要是基于阿里云ACK容器以及Jenkins2.0+进行搭建实施 。
阿里云ACK容器也是基于K8S1.16.9封装的云服务 , 我们选择的是托管版本 , 即master节点托管于阿里云 , 我们只负责worker节点集群的运维与管理 。 这样做的好处是使团队力量尽可能得集中在业务层面 , 基础设施层面的运维工作尽量服务化 。 选择Jenkins2.0有诸多好处 , 比如Jenkins是经典的CI实施工具平台 , 开发测试多数熟悉这种使用方式 , 无需再次学习 。 2.0版本以后 , 引入了声明式的Jenkinsfile语法 , 这种流水线编排格式与基于声明式API的K8S能够更天然地集成 , 并且Jenkins生态圈的plugin十分丰富 , 基本可以通过配置方式满足团队构建多语言多项目CICD任务的使用场景 。
?
核心问题目前实施CICD的业务 , 基本都要解决以下核心问题 。
?
- 交付物是什么?
- 部署环境有哪些?
- 环境配置信息是什么?
- 如何自动化地执行构建,部署任务?
- 如果构建 , 部署任务执行失败 , 或者部署环境的应用运行失败 , 如何感知故障的发生?
?
- 交付物定义
devops提供了基于阿里云容器镜像服务的私有仓库来存放 , 如图:
文章插图
?
开发基于dockerfile提供镜像打包定义 , 我们以java应用为例 , 镜像内容主要包括基于openjdk基础镜像的工作目录定以及指定启动cmd , 示例代码如下:
FROM openjdk:11.0.8WORKDIR /home/demoCOPY target/index-0.0.1-SNAPSHOT.jar app.jarENTRYPOINT ["java","-jar","app.jar"]
- 交付物结构
文章插图
?
交付物镜像应是包含了除了环境配置信息以外的应用部署的全部信息的实体 。 以java应用为例 , 该交付物是基于openjdk的jar包的镜像实体 。 环境配置信息可以由环境变量传递并改写 。
?
部署环境与配置
- 部署环境
- dev开发环境
- test测试环境
- stage预发布环境
- prod生产环境
?
- 环境配置
?
构建自动化我们有了Dockerfile来描述交付物的定义 , 简单来说只要docker build 然后docker push到私有镜像仓库就完成了构建 。 基于Jenkins搭建自动化的构建任务就是将这个过程自动化 。 后文实施部分会详细讲述 。
- 王兴称美团优选目前重点是建设核心能力;苏宁旗下云网万店融资60亿元;阿里小米拟增资居然之家|8点1氪 | 美团
- 建设|《青岛市城市云脑建设指引》发布
- 和谐|人民日报海外版今日聚焦云南西双版纳 看科技如何助力人象和谐
- 注册|阿里申请注册“爆改吧!小店”商标,打造线下特色实体小店
- 服务平台|HashiCorp发布多云服务平台Consul 1.9版
- 物种|苏宁易购赋能落地“新物种”旗下云网万店A轮融资60亿
- 电商|直播电商风云巨变,新一波红利路在何方?
- 耽误|被阿里耽误的虾米的一生
- 方志|(社会)贵州上线“方志云”激活地方志价值
- 科技|短视频行业领先 云想科技成长空间广阔