Go是一款先進的持續集成和發佈管理系統,由ThoughtWorks開發。(不要和Google的編程語言Go混淆了!)其前身爲CruiseControl,是ThoughtWorks在作諮詢和交付交付項目時本身開發的一款開源的持續集成工具。後來隨着持續集成及持續部署的火熱,ThoughtWorks專門成立了一個項目組,基於Cruise開發除了Go這款工具。ThoughtWorks開源持續交付工具Go,Go的官方網站是http://www.go.cd/,其文檔是http://www.thoughtworks.com/products/docs/go/13.3/help/welcome_to_go.html。使用Go來創建起一個項目的持續部署pipeline是很是快的,很是方便。html
Go使用了Server-Agent的模式。Server用來展現和配置pipeline的DashBoard,並存放構建出來的Artifacts(存檔文件,好比一個war包); Agent則用來執行真正的構建操做,一個Server能夠和多個Agent創建鏈接,Agent支持多個主流的操做系統。編程
這樣的好處是:架構
測試能夠運行在不一樣的平臺上,保證你的軟件在多個平臺都能良好的工做;編程語言
你能夠將測試劃分爲不一樣的羣組並並行的運行在多個Agent上,節省運行測試時間;工具
能夠方便的管理Agent,及時響應不一樣的環境要求。單元測試
下圖是Agent工做的生命週期。測試
每一臺Go的構建節點機器上都須要安裝Go Agent軟件(這個名字蛋疼,不是FQ的那個軟件),其用來創建起與Go Server的鏈接。 Go Agent會以輪詢的方式來詢問Go Server是否有當前有構建工做。若是有的話,Go Server會將其分配給處於ready狀態的Agent。該Agent會在本身機器目錄上建立一個目錄,並下載同步最新的材料(好比配置的SVN repo地址),而後執行指定的task,好比構建項目,運行單元測試或功能性測試等。若是配置了artifacts(好比構建的結果,一個war包),Agent執行完畢後將這個artifacts發佈到Go Server上,這樣artifacts就會被接下來的stage用到。網站
Go對複雜的構建和部署活動進行了合理的抽象,並提供了GUI和XML兩種方式來配置pipeline。ui
在Go的世界中,多個pipeline能夠共同組成一個group,這叫作pipeline group。沒個pipeline又由多個stage組成。假設一個pipeline須要作以下事情: 構建項目->部署到測試環境->部署到生產環境。那麼每個環節均可以設置爲一個stage。而一個stage則由1個或多個job組成。好比構建項目這個stage,可能會分爲編譯及驗證->功能性測試,每一步能夠做爲一個job。job則由一個或多個task組成。好比功能性測試這個job能夠分爲兩個task來完成,先將artifacts部署到測試機上,再運行功能性測試。操作系統
Go在設計之初就是一款持續部署工具,而Jenkins其實只是一款持續集成工具,若是要實現持續部署須要安裝相應的插件。 Go和Jenkins都是開源軟件,雖然免費,可是出現問題要麼本身動手解決,要麼等待維護社區修復,Go能夠向ThoughtWorks購買支持服務。 Jenkins做爲開源產品,社區比較活躍,文檔資料和插件都比較多,而Go的文檔或資料較少。