天天看點

使用 Docker 簡化 TeamCity 安裝 【已翻譯100%】

jetbrains出品的teamcity是一款強大易用的持續內建(continuous integration)系統。它是一款商業産品,但對于小型項目和foss應用程式(免費和開源軟體)有一項特殊的零費用許可證。盡管teamcity的安裝已經相對容易了,但通過使用docker,安裝過程會更簡便。

像許多其它的最新式的持續內建系統一樣,teamcity采用了建構伺服器和建構代理的概念。伺服器負責管理和建構配置。實際的建構過程(編譯、打包、部署等等)是由一個或多個代理執行的。通過個種方式,很容易實作代理的自動設定,整個設定過程中隻需要很少的手動配置。

teamcity伺服器隻需要java。安裝過程很簡單。通過docker,安裝會更簡單。為此,我準備了一個專門的容器 ariya/centos6-teamcity-server。此容器的基本系統是ariya/centos6-oracle-jre7,一個運作了oracle官方java 7的centos 6.5系統(更準确地說,到發稿為止是jre 1.7.0_65-b17)。

假定你有一個已經安裝了docker的系統(vps例如:linode或digitalocean,amazon ec2執行個體,一個虛拟機或一部真正的計算機),安裝teamcity伺服器就簡單到隻需要運作下列指令。注意,如果你在使用os x,如果你僅想試驗本安裝請使用boot2docker(參看我之前發表的部落格 docker on os x 了解更多細節)。

幾分鐘後,打開機器位址的8111端口,開始teamcity伺服器的web配置(更多細節請閱讀官方teamcity文檔),如下圖所示。如果你的系統使用了iptalbes,確定8111端口允許連接配接。注意,teamcity資料将存儲在特殊的位置/data/teamcity。這是一個标準的docker卷,應當允許簡單挂載、備份和未來更新。

使用 Docker 簡化 TeamCity 安裝 【已翻譯100%】

伺服器配置完成後,就應為此伺服器指定建構代理(不然,什麼也建構不了)。通過運作容器ariya/centos-teamcity-agent,我們再次用docker産生一個建構代理。為了讓代理工作,我們需要為它指定伺服器。運作下列指令:

如果你在運作着伺服器容器的同一台主機上運作它,你需要将它們連接配接(link)起來。

環境變量中的teamcity_server是必須的,需要指向你上一步啟動的teamcity伺服器的本地執行個體。一旦你運作了這個容器,它會連接配接到所指定的伺服器,下載下傳代理zip檔案并安裝。第一次連接配接伺服器後,建構代理通常需要花幾分鐘時間更新。如果一切工作正常,在你的teamcity伺服器web頁面的agent标簽項中,你将看到一個新的代理。授權代理,現在它準備接受任何建構工作了!

如果啟動代理出現問題,(docker ps)沒有顯示運作的容器,重新運作它,但這次使用 -it選項(interactive terminal互動終端)代替 -dt。這将轉存一些額外的調試資訊,有助于解決問題。

注意,此代理容器也是基于帶java 7的centos 6。通常這還不夠,你可能需要其它的依賴項(不同的sdk,編譯器,庫等等)。理想情況下,那些依賴項能自動解決,或基于不同系統容器,或通過正确的自動設定。更多細節,參考我之前發表的部落格 build agent: template vs provisioning。

還有借口不用持續內建?我可不這麼想!