April 26, 2015

TeamCity - 簡介與安裝

在持續整合(Continuous Integration)這個領域,我曾經使用過CruiseControl.NETJenkins兩套工具來輔助,也分享過幾篇相關文章,如Jenkins的系列文。目前所在的團隊導入的是TeamCity(以下簡稱TC),使用也有一年多的時間。TC的強大讓我想好好地紀錄並分享一下個人的使用經驗,如果說有朋友剛好想導入CI,在這三套工具中做評估,我的建議會是直接使用TC吧!在寫這篇文章時,TC的版本是9.0.4,而目前團隊使用的版本是8.1.5,為8.x版本的最後一個release,但我的文章會以9.0.4為主,有必要的話再做個比較。

TC有分ProfessionalEnterprise版本。Professional版本是免費的,具有與Enterprise一樣完整的功能,但使用上有些限制,僅允許20個建置設定檔(Build Configuration / Build Job)及3個建置代理(Build Agent)。Build Configuration是用來設定Build Job的工作內容,它可以是一個完整的Deployment Pipeline,如編譯(Compilation)、測試(Testing)及部署(Deployment)。Build Agent則是用來執行Build Job的系統服務,如果把TC安裝在Windows作業系統,則Build Agent會被安裝成一個Windows Service。Enterprise版本需付費,以目前官網上基本款的授權費用是美金1999元,可以無限制的使用Build Configuration,一年內免費的TC版本升級(如前陣子我才將TC版本從8.1.3升級到8.1.5,最近也打算升級到9.x版),但可使用的Build Agent仍為3個。在購買時可選擇需要的Build Agent數量,或是之後再單買Build Agent。

我的團隊在成立之初因為只有一個專案,所以Professional版本已夠用,但隨著專案數量越多,Build Configuration開始不夠用。一開始是以單買Build Agent的方式來增加Build Configuration數量(目前TC單買一個Build Agent會附上10個Build Configuration),但長遠來看最後還是決定買了Enterprise授權。為何20個Build Configuration會不夠用?舉個例子,目前團隊在開發系統上會分為Development、QA、Staging和Production四種不同環境,基本上就需要四個Build Job,還有一些排程測試程式(Integration Testing和Browser Testing)需要執行,一個專案上使用到七八個Build Configuration很常見,如果專案間還有共用的核心函式庫,可能還需要幾個Build Configuration來建置這些函式庫。

TC的安裝過程相當簡單,範例中我是將TC安裝在Windows Server 2012 R2 Standard Edition並使用SQL Server 2008 R2 Standard Edition做為TC的資料庫。先下載完TC後執行安裝檔





TC預設的安裝路徑在C糟下,你也可以安裝在其它糟,例如另一顆實體硬碟。





安裝完成,接下來開始做系統設定。TC提供網頁式管理,所以需要設定port number,如果作業系統已安裝了其它的網頁伺服器且佔用了80,如IIS,則需設定另外一個port number。


在前面的步驟因為選取了安裝Build Agent,所以我們可以在這做Build Agent的相關設定,例如你可以修改Build Agent的顯示名稱或port number,之後也可依所需再安裝多個Build Agent,且Build Agent未必要與TC安裝在同一台Server,因為TC提供了分散式建置的機制。



設定TC服務所使用的作業系統帳號,為了方便我使用System權限,如果你有安全性的考量,可以建立特定的系統帳號使用。


設定Build Agent所使用的作業系統帳號,為了方便我使用System權限,如果你有安全性的考量,可以建立特定的系統帳號使用。




完成所有的設定後,瀏覽器會開啟另一個設定頁面,主要是設定TC所使用的資料庫和網頁管理者的帳號密碼。


TC內建所使用的資料庫為HSQLDB,如果你只是測試用如架設一個簡易的Lab環境,HSQLDB倒是夠用。如果團隊已選定要使用TC,強烈建議一開始在設定時即選定一款除了HSQLDB外的資料庫,如SQL Server。目前我的團隊使用的是還是HSQLDB,但隨著設定檔越來越多,TC執行起來已經有變慢的現象,近日已打算開始把資料庫移植到SQL Server,相對地風險較高。


在這邊我以SQL Server做為資料庫。


因為TC是以JDBC連到SQL Server,所以需要先到http://www.microsoft.com/en-us/download/confirmation.aspx?id=11774下載driver。我下載的版本是4.1,下載後解壓縮把sqljdbc41.jar放到C:\ProgramData\JetBrains\TeamCity\lib\jdbc路徑下再點選Refresh JDBC drivers,系統即偵測到可使用的driver。



接下來在SQL Server建立一個空的資料庫,如TeamCity。如果像我一樣把SQL Server和TC安裝在不同Server,要注意防火牆和SQL Server要能允許遠端連線。這邊的資料庫連線為了方便直接使用sa帳號,實務上需建立獨立的帳號並做權限上的控管。


TC開啟初始化資料庫,完成後可以在TeamCity資料庫中看到不少資料表。



最後建立系統管理者的帳號密碼,建立完成後即自動登入TC。




到Administration > Licenses可以看到目前的版本是使用Professional。


從外部來瀏覽TC也可正常顯示登入畫面。


在Windows Service列表裡也可以看到TC和Build Agent服務。