在 JFrog SwampUp 2017 用户大会上,甲骨文的持续交付团队成员 Viraj 为大家带来了甲骨文内部基于容器化的 DevOps 最佳实践。
团队背景
Viraj 的团队是负责甲骨文内部的持续交付流水线平台的建设,提供构建 Farm,测试 Farm,提供 DSL 支持持续集成,使用 Docker 进行测试和生产环境的发布。
由于甲骨文内部产品线庞大,并且甲骨文一直在收购各种软件开发公司,所以 Viraj 得团队需要支持很多语言的开发,包括 Java,C++,Go,Python,Perl,Shell 等等。涉及到的工具包含 Jenkins,Docker,Artifactory,Carson,Kubernetes,Mesos,Logstash 等等。
和其他公司的 DevOps 团队有什么不一样?
-
基于持续集成和测试的自动化运维。
-
所以开发者参与自动化测试案例的编写,包括单元测试,功能测试,集成测试,端到端测试。
-
数据驱动 - 使用大量数据和可视化报表帮助决策和定位问题。
甲骨文的痛点
甲骨文全球有数万人的研发团队,在为整个公司搭建统一的持续交付平台的过程中,需要解决以下问题:
容器化
使用 Docker 的原因:
-
公司内部混合云的使用,导致环境难以做到一致性。
-
VMware 的 License 太贵。
-
来自测试团队的压力。
同时还需要适应研发的用户场景:
-
需要实现应用程序的打包,将环境变成不可变基础设施,从而屏蔽软件运行环境的差异性,降低软件部署的难度。
-
持续集成。将所有变更都发布到容器里,让 Docker 镜像成为软件发布的最小原子化单元。
-
让计算资源利用率最大化。实现100%的利用率,之前使用 VMware 只能达到5-10%。
-
用户能够实现 DIY 的 PAAS 平台,例如自行搭建 Load Balance。
需要支持多语言环境
从上图可以看到甲骨文 DevOps 团队需要支持多语言的仓库,包括 Maven,Python,Docker,NPM,Nuget,维护每种语言的仓库工作量非常大,需要为每种仓库搭建负载均衡,配置权限,软件更新,数据备份等等。所以甲骨文使用 Artifactory解决多语言仓库的问题。为什么?
-
使用 Artifactory 作为全语言的仓库,并且利用它做包的并发下载,高可用,数据复制和数据备份。
-
在某种语言仓库上开发了 API,可以被重复的利用到各种语言仓库。
容器化持续交付平台建设
甲骨文持续交付的创新
从上图可以看到传统的持续交付流水线是在 Jenkins 里为每个项目独立的维护一个项目,可复用性很差。
甲骨文的最佳实践:
-
将传统的 Jenkins 流水线拆分成多个 Stage。
-
建立通用,标准的任务步骤。
-
使用 Event Broker 进行任务直接的通信调度。
-
大量使用运行在 Docker 里的并发任务,缩减构建,测试时间。
-
Jenkins 的 Slave 节点运行在 Docker 里,用完即销毁,释放资源供其他任务使用。
甲骨文的平台提供自助式的 CICD 编排工具 Carson:
平台为开发者提供了自助式的 CICD 流水线编辑器,用户可以自定义任务,复用已有任务,支持并行和串行任务。每个任务可以是在某个 Docker 容器里独立运行,将构建的产出物上传到 Artifactory,并记录构建信息,测试结果,部署信息。用完即销毁。
CICD 数据的可视化:
如何找出现有 CICD 流程里,哪里可以改进?最难的在于如何发现问题?发现了问题才能解决问题,而这些问题的暴露,依赖于将流程可视化的工具。
甲骨文提供的 CICD 流程可视化的工具,能够展示每个任务的构建时长,代码扫描的结果,测试的时长和结果等等,将问题暴露在每个团队成员中,让团队成员都能了解软件发布的瓶颈在哪,这样才能有效的提高软件发布的质量。
用这些可视化的数据,来度量 DevOps 获得的收益,包括测试通过率,构建成功率,构建速度,发布周期,资源分配情况,基于数据做出正确的决策,才是 DevOps 带来的价值。
解决了 Docker 的问题
-
Docker 的发布速度和其他语言包管理工具的发布速度不一致,所以甲骨文将 Docker 镜像仓库放在了一个独立的 Artifactory 仓库里,随时更新最新版本的 Docker。
-
Docker V1 的API 在删除镜像时,存在无法在不停服的情况下删除物理空间的问题。所以甲骨文将所有镜像中心升级到了 V2 版本。
总结和展望
目前 Docker 的使用情况
甲骨文是较早的 Docker 容器化实践者,目前甲骨文内部的 Docker 镜像存储已经非常大。
-
80TB 的总存储量。
-
每个 Docker 镜像注册中心(Artifactory) 4TB。
-
存储了50万个 Docker 镜像。
-
每个镜像仓库包含300个 Tag。
-
使用 Artifactory 每天清理数十 TB 的镜像文件。
基于甲骨文内部的 Docker 容器化实践,甲骨文也推出了容器云(Oracle Container Cloud Service:https://cloud.oracle.com/container),对外提供服务。
未来展望
-
让更多的团队使用统一的持续交付流水线。
-
将所有的测试放在 Docker 里运行。
-
将所有的部署放在 Docker 里进行。
-
使用 Bintray 进行包的分发部署。
下载JFrog Artifactory 开源版(代替 Nexus):
http://www.jfrogchina.com/open-source/
下载JFrog Artifactory 企业版(免费试用):
https://www.jfrog.com/artifactory/free-trial/?lang=zh-hans#High-Availability
关于JFrog
世界领先DevOps平台
公司成立于2008年,在美国、以色列、法国、西班牙,以及中国北京市拥有超过200名员工。JFrog 拥有4000多个付费客户,其中知名公司包括如腾讯、谷歌、思科、Netflix、亚马逊、苹果等。关注 JFrog,感受原汁原叶的硅谷技术!我们不仅仅提供最优秀的产品,也提供最优秀的持续交付平台的解决方案,详情请洽010-64700538