Java世界里,一个流行的方案是Sonatype Nexus。Nexus并不只限于Java工件,例Jar或者Ear.,而且还可以存放像RPM这样的操作系统工件、JavaScript开发工件等。
亚马逊S3是一个可以用来存储二进制工件的键值数据库。一些构建系统,比如Atlassian Bamboo,可以使用亚马逊S3来存储工件。S3协议是开放的,也有可以部署在内部网络的开源实现。一个可选方案是Ceph分布式文件系统,它提供了兼容S3的对象存储。
接下来我们要谈到的包管理器,本质上也是一个工件库。
包管理器
开发中经常使用的各种Linux服务器在原理上类似,但是在实践上又有一些不同。
Red Hat系统使用RPM格式的包。类Debian系统使用.deb的格式。它们虽然功能类似,但是包格式不同。只用一条命令就可以从二进制库里下载并安装这些包到服务器上。
这样的命令被称为包管理器。
Red Hat系统上,这条命令是yum,或者是更新的dnf。Debian系的系统上是aptitude/dpkg。
这些包管理系统最大的优势是能很容易地安装和升级,并且自动安装依赖。
如果没有使用一个先进的系统,也可以远程登录进每一台服务器,然后输入yum
upgrade。最新的包就会从二进制库里下载安装。当然,我们将会看到,确实有更先进的可部署的系统。因此,我们再也不需要手动升级了。
测试环境
在构建服务器把工件存放在二进制库之后,它们就可以被安装到测试环境中。
下面的图更详细地展示了测试系统:
一般来说,测试环境应该尽可能像生产环境一样。所以,它们也应该能用相同方法在生产环境上安装和配置。