打造云上代码交付链,CodePipeline实践分享

简介: 在2017在线技术峰会——首届阿里巴巴研发效能嘉年华上,来自阿里云飞天研发部的工程师莫源分享了《打造云上代码交付链,CodePipeline实践分享》。他在云计算和云平台、持续集成流程、DevOps的基础上,详细分享了Alibaba Cloud CodePipeline优于Jenkins的性能和实践。

在2017在线技术峰会——首届阿里巴巴研发效能嘉年华上,来自阿里云飞天研发部的工程师莫源分享了《打造云上代码交付链,CodePipeline实践分享》。他在云计算和云平台、持续集成流程、DevOps的基础上,详细分享了Alibaba Cloud CodePipeline优于Jenkins的性能和实践。


以下内容根据直播视频整理而成。

直播视频:https://yq.aliyun.com/edu/lesson/549

PDF下载:https://yq.aliyun.com/attachment/download/?id=1844


云计算和云平台

云计算领域和其他领域是非常相似的,当一个领域越来越成熟的时候,发展方向会朝着精细化发展。比如,ofo解决了如何脱离城市公共交通之外解决最后一公里的问题。云计算也越来越成熟,上云解决了基础设施交付的问题,但是对于开发者而言还远远不够,云原生架构设计与应用成为了云计算的“最后一公里”问题。

11a1947441bafaab2812eb6b218beb2719b9063e

上图是NETFLAG公司定义的Cloud Native架构设计图。主要分为三个部分:Framework(左边),推荐使用微服务架构;Container Runtime(右边),建议容器化、资源生命周期自动化;Infrastructure Automation(中间),表达了基础设施即代码的思想,以及配管运维自动化。

7b999ce02bf9691f619daaa4c65af2ce43956c33

把刚才的图转换一下,可以总结为四个要点:DevOps、Continuous Delivery、Microservices、Containers。但对于开发者来讲,微服务和容器并不是必须的,而是与自己的模型、编程框架相关的,而DevOps和持续集成则是通用的模型。作为一个云计算厂商,我们要解决的是开发者如何在通用模型之下解决自己的问题。

766c507e0f1349cead19f7bbe964ef83dd9a0caf

上图大家都比较熟悉,讲述了云平台的SaaS、PaaS、IaaS层。最底层是IaaS层,提供了资源,PaaS层提供了能力,而SaaS层提供了服务。金字塔最底层是最扎实的,越往上越小,而DevOps是塔尖。所以,只有最底层基础设施的环境变得十分稳固、厚重的时候,才能保证最上层的DevOps有一个更高效的能力。

持续集成流程

a8abb179752684198f3445a8960709b756f51136

常见的DevOps流程分为代码开发,提交代码到代码仓库,通过web hook触发,由持续集成系统分别部署到测试环境、预发环境、正式环境。

540bfaa223daa75378eed68c38cfe84fe70e80d5

上图是基于容器的持续集成流程图。和前图的区别在于,在持续集成系统上层有一个镜像仓库,持续集成系统会把镜像推到镜像仓库,部署的时候由部署环境拉取镜像进行部署。

DevOps

DevOps不是让你成为全能忍者,而是消除“等待”与“浪费”。传统的瀑布流开发模型分为很多阶段:需求分析、设计、实现、验证、运维,这个过程中我们会等待基础架构的设计、应用程序部署、其他团队或者审核流程。而DevOps可以帮助消除不必要的流程、特性、人工、返工。

ed351d965be105640ba7dc8f609335f736b330ed

DevOps核心思想是分而治之,连续集成,快速交付。以前软件开发、交付的生命周期很长,以月或者半年为单位,现在将生命周期进行切分,变成以周或者天为单位。为什么以前没有做到?因为以前很难做到整个流程的自动化,比如基础设施自动化、交付自动化等,而现在云计算给了我们这个能力。Cloud Native、Microservices、Docker、Serverless是和DevOps结合最紧密的四个领域。这些领域展现了软件架构的变革,软件的架构变革带来了灵活性、稳定性、功能性也带来了技术成本。比如,Docker解决了如何快速交付的流程但是解决不了学习Docker的成本、运维的成本。DevOps解决的是如何将上述四个领域的技术成本屏蔽,通过自动化的方式把很多技术的问题变成按钮点击的问题。所以,DevOps的本身不是一个技术问题,但是技术的变革需要DevOps来填平带来的技术成本。DevOps实现是一个适配器,封装了本地开发与远程交付之间的实现。

0fb024e4e2c498c61bf993c7efeb13f20e441f36

DevOps里最核心的是持续集成服务器,它是交付流程的发动机。用的最多的持续集成服务器是Jenkins,每个阶段Jenkins都可以和很多系统集成,但是它也存在一些问题:架构陈旧,性能低下,单个Jenkins在并发1000个job或者250个slave的时候就会出现很严重的性能问题;安全漏洞很多,Master、插件都有很多漏洞;独立运维成本很高,Jenkins本身是Java的应用,但是还涉及到slave pool、镜像、配置插件等;缺乏完善的权限模型,使用权限模型的时候没法和namespace脱开;通用的DevOps模型需要更多的集成;插件太多导致缺乏最佳实践经验。

Alibaba Cloud CodePipeline

Alibaba Cloud CodePipeline是一个SaaS化的持续集成引擎。通过可视化的配置,简单快捷地实现持续集成与持续交付的流程,完全兼容Jenkins,并且在Jenkins上做了很多增强。

b5c4791c68f9d2ea97a8ced27c414cfd2c115511

上图是Alibaba Cloud CodePipeline的基础结构图。CodePipeline Service是任务调度系统,它会把任务分配到任务沙箱式运行时环境资源池,资源池是弹性伸缩的,开发者使用CodePipeline的时候无须担心自己的任务有多少、并发有多少。构建任务完成、代码下发好之后会发布一条部署命令,部署命令是由Deploy Service来完成的,它是通过反打方式实现的,好处是无须担心用户的网络环境。右侧是部署环境,支持ECS、HPC、VM、阿里云的Container Service。

SaaS化持续交付引擎

SaaS化的好处是:无需运维,开箱即用,使用云账号登陆即可拥有免费使用额度,独立部署支持与企业现有的LDAP集成,内置多种常用必备插件,无需二次安装;资源按需使用,动态生成,按使时长和资源付费,无需担心资源容量(公测不收费),资源动态使用动态销毁,无需担心代码、构建物外泄,资源无需运维,平台资源池统一维护,资源秒级生成、秒级销毁。

全量兼容Jenkins插件

CodePipeline对Jenkins插件进行了安全加固,所有开放出来的插件都经过安全加固,加固后的插件不定期的反馈给社区。并且根据开发者需求不断开放Jenkins插件满足开发者的需求。开发者可以根据需求提交开放申请,内置的Best Practise会提供更多场景的插件组合的使用方案,开放的插件的能力会在阿里云的场景下有更多的集成。

阿里云产品生态无缝集成

集成OSS、容器Hub存储构建物,OSS提供构建物存储,Hub提供镜像存储,未来考虑支持(Nas等等)。支持多种部署环境,包括ECS支持标准应用部署、容器支持容器化部署、EGS、ESS、EWS等等。

多种部署方式支持

支持跨Region部署(经典、VPC),具备IDC、公有云、跨云混合部署的能力,VPC网络采用反向通道的方式,无需在安全组上打洞。支持多种部署方式,具备ECS、容器服务混合部署,支持不同部署环境跨Region部署,支持部分部署模型的无宕机发布。支持全量的部署环境,公测版本支持Java、Node.js的环境,预计短期开放PHP、Python、Go、C++等语言。

内置最佳实践

向导方式内置语言的部署最佳实践,公测支持Java与Node.js,支持用户自定义最佳实践(待开放)。社区、论坛提供最佳实践的文章与指南,提供基础功能的使用指南,提供标准流程的最佳实践指南,提供高级功能扩展使用实践。

Reference

Terraform阿里云官方github仓库:https://github.com/alibaba/terraform-provider

Packer阿里云官方github仓库:https://github.com/alibaba/packer-provider

阿里云针对于开源DevOps工具的github仓库总入口链接:https://github.com/alibaba/opstools

阿里云DevOps系列文章与Jenkins持续集成解决方案:https://github.com/AliyunContainerService/DevOps
相关文章
|
消息中间件 数据可视化 Oracle
RocketMQ安装部署 (Linux)
RocketMQ安装部署 (Linux)
1728 1
|
弹性计算 Kubernetes Cloud Native
云上杂“弹” - 游戏服云上怎么弹
在中国游戏市场不断壮大且极具商业前景的环境下,阿里云作为中国游戏云基础设施占据最大份额的云服务厂商,提供以Kubernetes为核心的云原生技术,助力国内莉莉丝、鹰角、灵犀互娱等多家知名游戏公司「弹性」上云。
|
Java 测试技术 API
Java 反射机制:深入解析与应用实践
《Java反射机制:深入解析与应用实践》全面解析Java反射API,探讨其内部运作原理、应用场景及最佳实践,帮助开发者掌握利用反射增强程序灵活性与可扩展性的技巧。
510 5
|
数据采集
以“股票代码实时抓取股票信息”为例的爬虫案例
爬虫—根据股票代码实时抓取股票信息
706 0
|
负载均衡 Kubernetes 前端开发
k8s-负载均衡流量(ingress-nginx)
ingress 介绍 ingress 安装 ingress 案例
k8s-负载均衡流量(ingress-nginx)
|
弹性计算 运维 Cloud Native
阿里云云原生弹性方案,用弹性解决集群资源利用率难题
本文主要介绍了通过弹性,实现成本优化,解决集群资源利用率难题。
93343 8
|
机器学习/深度学习 人工智能 自然语言处理
Gradio入门到进阶全网最详细教程[二]:快速搭建AI算法可视化部署演示(侧重参数详解和案例实践)
Gradio入门到进阶全网最详细教程[二]:快速搭建AI算法可视化部署演示(侧重参数详解和案例实践)
Gradio入门到进阶全网最详细教程[二]:快速搭建AI算法可视化部署演示(侧重参数详解和案例实践)
|
机器学习/深度学习 数据采集 监控
监控生产中的ML系统,您应该跟踪哪些指标?(中)
当提到“ML监控”时,这可能意味着很多事情。您是否在跟踪服务延迟?模型精度?数据质量?点击推荐栏的访问者占比? ‍这个博客将所有指标组织到一个框架中。这是高水平的,但我们希望一个全面的概述。如果您是ML监视的新手,并且希望快速掌握它,请继续阅读。
|
消息中间件 Cloud Native 容灾
阿里云中间件发展历程和开源现状
中间件已经发展多年,其目的主要为通过标准接口和协议解决异构网络环境下分布式应用软件互联和互操作问题。近几年,随着云原生技术的高速发展,云时代对中间件的定义又进行了扩充。2020 年由信通院牵头组织的云原生中间件白皮书对于云原生中间件又提出了 10 项新要求,主要分为底层资源、设计原则、运行时和呈现状态四个维度。阿里巴巴中间件已经有 15 年的发展历史,它与阿里业务一起成长,也是阿里巴巴云原生实践 15 年全程见证者。
阿里云中间件发展历程和开源现状
|
存储 文字识别 自然语言处理
好看、好用、强大的手写笔记软件综合评测:Notability、GoodNotes、MarginNote、随手写、Notes Writers、CollaNote、Prodrafts、Noteshelf、FlowUs、OneNote、苹果备忘录
与普通的笔记编辑器相比,手写笔记软件相对少一些。其中,比较出名的并不多。下面介绍一些比较主流、备受好评的,兼具有好看、好用、强大等特点的手写笔记软件。其中,首先介绍传统被忽略的两款笔记软件 OneNote 和 苹果备忘录。随后测评了包括 Notability、GoodNotes、MarginNote、随手写、Notes Writers、CollaNote、Prodrafts、Noteshelf、FlowUs.
2739 0
好看、好用、强大的手写笔记软件综合评测:Notability、GoodNotes、MarginNote、随手写、Notes Writers、CollaNote、Prodrafts、Noteshelf、FlowUs、OneNote、苹果备忘录