全部产品

基于云效&K8S的持续交付解决方案

更新时间:2019-10-31 16:35:38

基于云效&K8S的持续交付解决方案

1 背景

持续交付及服务化,是当前比较多互联网软件开发采用的实践,其很大程度地提高了团队对于软件交付的响应能力。新的技术实践的采用,也同样影响着软件开发的协作模式,即从传统的单一技术职能团队间抛接的工作方式,逐渐往多技术职能融合的微服务DevOps团队演进,整体负责应用的构建、部署和监控,打破原来技术职能竖井,加快发布及运维问题的响应。

但是,如何快速地适应这些变化,享受技术红利及好的研发方式,依旧伴随着诸多挑战。

2 当前互联网产品持续交付中遇到的挑战

  • 首先,随着服务的数量变多,服务之间的耦合性及复杂度也在增加,交互变多,可能的故障点也有可能变多。应用部署环境日趋复杂,测试、运维负担加重,出错概率升高
  • 其次,每个服务应用的开发,可能是由不同的开发人员单独完成,如果在集成发布过程中,质量标准不一致,版本不一致,可能导致整体的系统故障
  • 另外,针对中小型企业而言,基础设施保障的建设往往落后于企业的快速发展,缺乏统一的研发平台,自动化程度低,没有有效的质量保障体系
  • 业界有很多很好的实践,但是复用到自己团队却很难,无从下手。

为了解决这些问题,阿里云提供基于容器,通过云效和K8S结合的持续交付解决方案,帮助用户快速上手,进行应用的持续交付

3 基于云效&K8S的持续交付解决方案

3.1 阿里云 云效+K8S产品优势

3.1.1 云效持续交付能力

首先,云效持续交付流水线是基于阿里巴巴众多团队的实践经验,为互联网产品开发量身定制,同时支持集成主流的研发工具,覆盖产品研发全生命周期,提供可视化交付流水线。
第一张

  • 快速生成流水线,适用多种场景,提供了数十种通用的构建部署模版,快速创建流水线, 同时支持企业自定义模版,统一管理持续集成和持续部署。不再需要安装太多额外的组件,或填写过多的配置信息。
  • 主流的自动化质量保障手段,包括代码扫描、安全扫描、单元测试、接口测试、UI测试等;提供云端测试集群执行测试,无需关注环境,保障测试稳定性;提供人工测试卡点,自动化验证卡点等多种质量红线,提升企业线上质量。
  • 支持多语言、多代码源、任何云的CI/CD能力,支持Java、Node.js、Python、PHP、Golang等语言脚手架生成代码框架,可以对接主流的代码仓库,及支持多种部署方式。
  • 钉钉消息通知,流水线运行结果,即时准确地反馈到钉钉群。降低沟通成本,提升团队工程协同

3.1.2 K8S产品能力

选择K8S,是因为K8S是流行的开源容器编排技术。基于K8S部署的应用具备独有的管理优势。

  • 集群管理:10分钟一键创建集群,稳定、可靠、高效;
  • 应用管理:应用弹性伸缩、helm应用一键部署;
  • 网络管理:高性能VPC网络,访问策略和带宽灵活可控,支持负载均衡;
  • 存储管理:支持阿里云云存储,动态扩容;
  • 运维管理:一键升级,完善的日志与监控;
  • 服务保障:专业容器团队,为集群提供及时稳定性和安全响应;

3.2 云效流水线+K8S解决方案

3.2.1 流水线架构图

结合云效持续交付流水线和阿里云K8S的优势,做为都是阿里云原生的两个产品,很好的结合在一起,为应用的持续交付提供了很好的基础保障,如下图:

第二张

开发者提交代码变更到代码库,云效在监听着代码库的变动,一旦代码发生变化,将自动触发云效持续部署流水线一次构建任务的运行,包括代码检查、构建、测试部署、测试验证和生产部署等过程。其中,在构建完之后,生成Docker镜像,并自动上传至应用镜像仓库,在部署阶段(测试环境的部署和生产环境的部署)时,再从应用镜像仓库中取得最新的版本,通过K8S进行容器编排部署。而这一切,都是通过自动化的手段进行完成。

以下,我们将分步骤介绍如何快速配置这样包含云效和阿里云K8S的持续部署流水线。

3.2.2 云效+K8S部署操作指南

通过以下步骤快速创建基于云效和K8S的部署流水线

新建流水线

进入企业后,从页面顶栏点击【研发】->【流水线】,点击右上角【新建流水线】进入流水线创建向导页面,选择编译语言和流水线模版;

第三张

源码设置页面中,支持多种代码输入源;
第四张


点击下一步,输入流水线名称并设置权限,流水线模版创建完成。

编辑流水线

构建配置:点击【构建】阶段,在右侧浮层中点击【java测试构建Docker镜像并推送镜像仓库】任务,在任务编辑页面中点击【请前往授权绑定】的链接完成 RAM 授权。然后回到流水线配置页面选择【区域】;
第五张

如果需要创建镜像仓库,可在【仓库】的下拉框中点击【新建镜像仓库】,填写好信息之后,点击【确认】,窗口会自动关闭,并把新创建好的仓库地址回填到流水线中;

第六张

部署配置:在流水线的部署任务中选择【制品】,即在构建阶段产生的那个镜像;
第七张


如果需要新建应用,在【应用】下拉框中点击【新建应用】,输入应用名并点击【确认】;

环境管理

在【环境】下拉框中点击【新建环境】,进入到 Kubernetes 集群配置页面;选择集群、命名空间,选择滚动发布,并点击【点击创建新服务】的链接来创建 Service;

第八张

阿里云K8S集群:集群属于企业信息,需要企业管理员操作,通过【企业设置】进入【容器服务账号】页面。选择【kubernetes】tab页面后,可以看到导入的操作入口;
第九章

其他托管或自建K8S集群:点击手动导入证书,将显示集群导入的输入操作框,填写信息后,点击【保存】按钮。系统会校验集群的证书,成功后保存集群信息,并刷新页面;
第10张

运行流水线

点击流水线编辑页面右上角【运行】,流水线会自动保存并开始运行;
第11张

查看测试报告

Java 规约扫描:点击阶段里的点击链接可以在页面下方查看报告预览,预览中点击【链接】可以查看完整报告;

第12张

单元测试报告:点击【单元测试】可以展开测试结果预览,点击预览里的【链接】可以查看测试报告详情;
第13张

3.2.3 云效+K8S流水线进阶

上一节介绍了流水线基本操作,在实际部署操作中可以根据需要完善流水线,增加更多验证和卡点,例如:

流水线1: 持续验证流水线:(部署测试环境K8S集群)

第14张

流水线2: 持续发布流水线:(部署生成环境K8S集群)

第15张


流水线定义了持续交付过程的各个步骤和卡点,通过执行流水线1和流水线2即可完成从代码提交到正式发布的持续交付过程。

4 更多场景

本文主要围绕持续交付模型介绍了研发流程改造、效能提升的案例。关于其他场景和模式,例如GitOps工作流程与模式,以及大规模运行Kubernetes的实践经验,我们后续将持续推出。

5 结语

技术的发展,应该给开发者带来更多的便利,及时享受到技术带来的红利。但新的技术和方法涌现,有时也会带来额外的学习成本,老话常说:“没赚到便宜,就是吃亏”。借助现成的工具平台,降低使用新方法新技术的门槛,快速复用先进的实践,这是每一位开发者可以选择的最短路径。云效的目标就是帮助众多开发者达成这一目标的一个有效手段。

云效持续交付流水线可以简化流水线的配置,同时为版本发布及质量保障做到可见、可控、可度量及可加速。同时,K8S服务通过对容器的管理,简化了应用的部署及管理。云效流水线能力与K8S容器集群管理能力相结合,完美解决了云上容器应用持续交付问题。技术演进总是给工程效能领域带来新的可能,但是任何可能都是源于第一步:尝试

附录:参考资料

#