持續集成及部署利器:Go


Go是一款先進的持續集成和發布管理系統,由ThoughtWorks開發。(不要和Google的編程語言Go混淆了!)其前身為Cruise,是ThoughtWorks在做咨詢和交付交付項目時自己開發的一款開源的持續集成工具。后來隨着持續集成及持續部署的火熱,ThoughtWorks專門成立了一個項目組,基於Cruise開發除了Go這款工具。

Go的官方網站是http://www.thoughtworks.com/products/go-continuous-delivery/,其文檔是http://www.thoughtworks.com/products/docs/go/13.3/help/welcome_to_go.html

在我目前的項目中,持續集成及部署工具使用的就是Go這款工具。使用Go來建立起一個項目的持續部署pipeline是非常快的,非常方便。

Go的架構設計

Go使用了Server-Agent的模式。Server用來展示和配置pipeline的DashBoard,並存放構建出來的Artifacts(存檔文件,比如一個war包); Agent則用來執行真正的構建操作,一個Server可以和多個Agent建立連接,Agent支持多個主流的操作系統。

這樣的好處是:

  1. 測試可以運行在不同的平台上,保證你的軟件在多個平台都能良好的工作;

  2. 你可以將測試划分為不同的群組並並行的運行在多個Agent上,節省運行測試時間;

  3. 可以方便的管理Agent,及時響應不同的環境要求。

Agent的lifecycle

下圖是Agent工作的生命周期。

每一台Go的構建節點機器上都需要安裝Go Agent軟件(這個名字蛋痛,不是翻牆的那個軟件),其用來建立起與Go Server的連接。 Go Agent會以輪詢的方式來詢問Go Server是否有當前有構建工作。如果有的話,Go Server會將其分配給處於ready狀態的Agent。該Agent會在自己機器目錄上創建一個目錄,並下載同步最新的材料(比如配置的SVN repo地址),然后執行指定的task,比如構建項目,運行單元測試或功能性測試等。如果配置了artifacts(比如構建的結果,一個war包),Agent執行完畢后將這個artifacts發布到Go Server上,這樣artifacts就會被接下來的stage用到。

Go中的一些概念

Go對復雜的構建和部署活動進行了合理的抽象,並提供了GUI和XML兩種方式來配置pipeline。

在Go的世界中,多個pipeline可以共同組成一個group,這叫做pipeline group。沒個pipeline又由多個stage組成。假設一個pipeline需要做如下事情: 構建項目->部署到測試環境->部署到生產環境。那么每一個環節都可以設置為一個stage。而一個stage則由1個或多個job組成。比如構建項目這個stage,可能會分為編譯及驗證->功能性測試,每一步可以作為一個job。job則由一個或多個task組成。比如功能性測試這個job可以分為兩個task來完成,先將artifacts部署到測試機上,再運行功能性測試。

Go和Jenkins的比較

Go在設計之初就是一款持續部署工具,而Jenkins其實只是一款持續集成工具,如果要實現持續部署需要安裝相應的插件。 Go由於是收費軟件,有一定售后服務,而Jenkins作為開源軟件,雖然免費,但是出現問題要么自己動手解決,要么等待維護社區修復。 Jenkins作為開源產品,社區比較活躍,文檔資料和插件都比較多,而Go的文檔或資料較少。


Go的設計思想還是挺前衛的,在別人還在做持續集成這一步時,它已經做到了持續部署這個層次。但是目前就國內而言能做到持續部署的公司真的不多,甚至很多公司連持續集成這個實踐都沒有達到。所以Go作為一款收費產品很難在國內打開市場。

我覺得Go可以做出一個免費版來讓個人試用,提供一些基本功能。然后為企業應用定制一些高級功能,放置到收費版中,可以擴大自己的市場占用率。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM