在 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,感受原汁原叶的硅谷技术!我们不仅仅提供最优秀的产品,也提供最优秀的持续交付平台的解决方案,详情请洽[email protected]