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。最新的包就會從二進制庫里下載安裝。當然,我們將會看到,確實有更先進的可部署的系統。因此,我們再也不需要手動升級了。
測試環境
在構建服務器把工件存放在二進制庫之后,它們就可以被安裝到測試環境中。
下面的圖更詳細地展示了測試系統:
一般來說,測試環境應該盡可能像生產環境一樣。所以,它們也應該能用相同方法在生產環境上安裝和配置。