Adobe 背景

本文内容来自 Adobe 在 JFrog SwampUp 2017 大会上的演讲。
Adobe 公司全球最大的软件公司之一,2016财年收入为58亿美金。全球有超过16000的员工,被财富杂志评为2017年全球最受尊敬的企业。主要的产品有 PhotoShop,Adobe Acrobat,Adobe Reader,Flash Player等等。Adobe 的员工福利很好,据说在 Adobe 有一条不成文的规定,任何员工工位周围15米的范围内一定能拿到零食。
Adobe 的持续交付平台
- 版本管理:Github 和 Perforce 管理代码,Artifactory 和 Bintray 管理包的存储和分发。
- CI/CD:Jenkins 做 CI,使用 Spinnaker(Netflix) 做持续交付,部署到私有云和部分公有云。
- 代码审查:使用 FishEye(Atlassian)
- 产品和变更管理:Jira,Portfolio 等等。
- 漏洞扫描:Xray, Aqua。
- 应用平台:私有云使用 CloudFoundry 作为云平台,上层使用 Mesos 作为 Docker 容器的编排平台,使用 Chef 进行部署,平台上运行了30多个应用。
包管理工具演进
在2004年,Adobe 使用代码管理工具管理二进制包,2005年换成 FTP 文件服务器,到了2012年使用 Nexus,从2015年开始使用 Artifactory 统一进行所有二进制包的规范化管理。
软件发布流程
- 代码提交到 Git,进行代码扫描。
- IT team 提供容器化的 Jenkins 进行构建。
- 构建结果上传到制品库 Artifactory,包含 Chef 的 cookbook 也存储在 Artifactory。
- 使用 JFrog Xray 进行持续二进制包的漏洞扫描。
- 基础设施使用 Chef 进行持续部署,部署的目标是 AWS 的服务器,VMware 的虚机,以及容器集群。
- 将应用部署到开发,测试,预发布,生产环境。
- 使用 Zabbix,Splunk 进行服务器和应用的监控。
- 将包发布到 JFrog Bintray,Bintray 底层使用 CDN 进行全球的分发。
持续漏洞扫描
传统的漏洞扫描,都是在软件测试完成,待交付之前做检查,一旦扫描出来问题,会极大的影响项目的进度。使用 Xray 进行持续漏洞扫描,可以在漏洞包被下载的第一时间检测出来,杜绝漏洞包进入产品并发布出去。
Xray 漏洞扫描的原理,是从 NVD(国家漏洞数据库)下载最新的漏洞数据记录,和公司内部 Artifactory 仓库里存储的二进制包进行对比,如果匹配成功,则说明该构建存在漏洞包,此时可以让 Jenkins 的构建任务失败。
自助式 DevOps 服务
当团队和项目拆分成微服务架构时,每个微服务都需要独立的流水线进行持续交付,这就意味着,公司内部的配置管理团队需要为每个服务准备好 Jenkins,Github 项目,Artifactory 仓库等一系列工具,所以 Adobe 的通用服务团队花了一个人,4个礼拜,搭建了自助式创建 Artifactory 的平台,也花了同样的人力成本,搭建了自助式申请 Github 项目,Jira 项目,Jenkins 项目等平台。根据实际经验,Adobe 的开发者指出,GIthub 和 Artifactory 的 Rest API 是最完善的,Jira 的 API 不太完善。
在自助申请 Artifactory 仓库的平台里,用户可以按需的申请微服务需要的仓库,通常是3个库,开发库,测试库和生产库。并且在平台里指定仓库的权限配置等等。
得到的收益
通过统一的持续交付平台,Adobe 实现了研发效率的大大提升,在印度研发中心的构建可用时间提早了5-6个小时;提升了30-40分钟的构建速度,因此每天能够实现10-15次构建;软件交付速度提升了5倍;发布速度从每年两次都每月一次。