软件开发过程中会产生两种类型工件
(1)源代码
(2)二进制包
本文阐述的是如何让二进制包仓库在软件交付流水线中发挥重要的作用,从而优化软件的交付流程,实现快速发布。
首先,什么是二进制包?
•ZIP 或者 tarball 文件
•RPM or DEB 包 (Linux)
•JAR, WAR, and EAR 包 (Java)
•Docker 镜像
•Gems (Ruby)
•Python 包
•DLLs (Windows)
•Source 包
•Documentation 包
•PHP 包
为什么源代码管理系统或者文件系统不适合用来管理二进制包?
很多企业使用版本管理系统和文件系统来管理开发的工件,这样其实很难满足 DevOps 的需求,从而无法实现自动化交付软件,限制了团队持续交付的能力。
使用源代码系统的问题
从设计上来讲,源代码系统就是为了存储源代码,而不是二进制包,这是由于源代码和二进制包有本质的区别。
当文件变大,项目变得复杂时,使用版本管理二进制包,会出现 clone 时间变得不可接受,权限管理变得复杂难以维护,从而提高持续交付的复杂度。
使用文件系统的问题
如果您还在用文件系统存储二进制包,那么这个文件系统难以满足持续交付的需求,持续交付的需求如下:
这些需求,大部分文件系统都不支持,导致二进制包管理成为持续交付的瓶颈。而您的团队不得不为了实现这些需求而做很多重复造车轮的事情。
专业的二进制包仓库应该是什么样的?
支持多语言
支持多语言开发的二进制包,这样能够做到各种开发团队使用统一的流程进行软件交付,减少各个软件交付流程的差异性,降低交付成本。
支持元数据
元数据应该包含二进制包的版本,所包含的功能,测试的结果,部署的信息等等。常见元数据类型包括:
提供 API 实现自动化查询
例如通过一个命令行查出最新版本的工件,并且通过了所有的测试。Ansible/Puppet/Chef 脚本可以通过这些 API 来执行自动化部署环境,而无需人工干预,加快交付时间,减少交付人为错误。
例如通过一个命令行,查出近3个月内没有被下载过的包,成为清理垃圾文件的目标,然后使用 cron 任务定期删除文件。
代理第三方的依赖
作为按需下载的代理仓库
当第一个程序员通过代理仓库,下载了一个依赖,这个依赖会被缓存在仓库里,供 CI 服务器或者其他团队的程序员复用。
作为镜像仓库(Mirror)
通过全量复制,实现仓库的镜像。一般实现方法可以通过 rsync,或者 JFrog Artifactory 提供的实时复制功能实现。
支持工件升级
在工件升级的过程中,定义质量关卡,通过自动化测试结果进行自动决策,最后通过所有测试的工件,将通过 REST API 自动部署到生产环境,并且携带所有测试结果,让整个流程变得透明,自动化。
企业级功能
-
支持高可用
-
漏洞扫描
-
全球多地复制
-
支持对象存储
-
容灾备份
-
根据企业定制化仓库安全策略
企业级的内容将会在后续的文章中陆续推出。
总结
实现自动化交付的核心,除了需要统一管理多种语言开发的二进制包的仓库之外,还需要强大的元数据支持,包含测试结果,让您的持续交付的流程具备自动化决策能力,并且提供REST API 让二进制包变得可发现。
关于JFrog Artifactory
JFrog Artifactory 是全球领先的 DevOps平台,支持所有语言包的管理,元数据,REST API,高可用等等。全球三千多个企业客户正在使用JFrog Artifactory 作为企业级持续交付平台,实现快速发布。
JFrog Artifactory 开源版:
http://www.jfrogchina.com/open-source/
JFrog Artifactory 企业版(免费试用):
https://www.jfrog.com/artifactory/free-trial/?lang=zh-hans#High-Availability
点击“阅读原文”,进入 JFrog 官网