使用 TeamCity 實現 Auto Build ~ Github設定篇

在介紹完TeamCity與BitBucket的AutoBuild之後,因為也很常用Github來作版本控管,所以也稍微研究一下Github的設定,其實跟BitBucket大同小異,接下來就簡單地跟大家介紹一下,TeamCity與Github之間的設定~

step 1. 首先我們在TeamCity上,Crete Project 選擇 From Github,這時候會跳出要求我們輸入Client ID and Client Secret 的視窗,我們就先停留在這個頁面

螢幕快照 2018-02-21 上午10.36.30

螢幕快照 2018-02-21 上午10.45.32

step 2.  接著我們需要到Github產生Client ID and Client Secret,首先我們先登入Github然後選擇右上角的Settings

螢幕快照 2018-02-21 上午10.47.33

step 3. 接著選擇Developer settings

螢幕快照 2018-02-21 上午10.47.46

step 4. 選擇OAuth Apps 然後點選 New OAuth App

螢幕快照 2018-02-21 上午10.47.57

step 5. 輸入自己定義的Application name,Homepage URL及 Authorization callback URL則可以到我們「step 1.」TeamCity 彈出的視窗上複製,填好相關資訊後就可以Register application

螢幕快照 2018-02-21 上午10.48.42

step 6. 將Github產生的Client ID and Client Secret填入TeamCity然後點選Save

螢幕快照 2018-02-21 上午11.08.13

螢幕快照 2018-02-21 上午10.45.32

step 7. 在TeamCity上點選Sign in to GitHub,之後TeamCity就會載入Github上的專案,接著就可以選擇自己想要AutoBuild的專案了

螢幕快照 2018-02-21 上午11.10.54

螢幕快照 2018-02-21 上午11.15.25

到這邊TeamCity及Github的相關設定已經完成,剩下的步驟跟BitBucket一樣,大家可以參考一下前幾篇文章,最後大家應該都還記得在BitBucket上有一個Webhook的功能可以在每次我們Push後及時通知TeamCity幫我們Build Project,當然Guthub上也有類似的功能~

接下來就跟大家介紹如何在Guthub上即時通知TeamCity Build Project

step 1. 我們先在Github上選擇我們要AutoBuild的專案,接著點選專案的Settings,然後點選Integration & services

ps. 這邊也可以使用Webhook的方式,設定上跟BitBucket差不多,所以這邊介紹的是GitHub另外提供的Integration & services,其實Integration & services也是Webhook一樣的概念,只是把一長串的Url拆成輸入介面給使用者用輸入的方式去做設定,這樣其實也增加了一些設定上的便利性

螢幕快照 2018-02-21 上午11.26.17

step 2. 點選Add services,然後選擇TeamCity

螢幕快照 2018-02-21 上午11.33.40

step 3. 接著輸入相關設定後點選Add service

Base url:TeamCity Server的網址

Build type:專案在TeamCity上的build configuration Id(參考此篇step 2

Branches:如果有指定的分之才填沒有的話就勾選 Full branch ref

Username:TeamCity上的使用者名稱

Password :TeamCity上的使用者密碼

螢幕快照 2018-02-21 上午11.44.04

 

到這邊Github上的即時通知已經完成設定接著就可以享受AutoBuild帶來的便利囉~~~以上就提供給大家參考,如有不對的地方也請大家多多指教~

使用 TeamCity 實現 Auto Build ~~進階設定篇

繼上一篇針對Bitbucket與TeamCity的設定後,我們大致上已經完成了Project整合的部分,接下來這一篇會來實作算是比較進階的設定

  • GitServer即時通知TeamCity Build Project
  • TeamCity Auto Build完成之後,幫我們Auto Deployment到 TomCat
  • 信件通知

Part 1. GitServer即時通知TeamCity Build Project 

我們這邊依樣事先用BitBucket來做測試,而我們會使用到的設定就是Webhook(意指鉤子),我們需要透過這個鉤子去通知TeamCity有新的Commit,接著我們就開始來設定

step 1. 我們一樣先登錄我們BitBucket的網頁,點選專案下面的設定,接著點選Webhooks >> Add Webhook

螢幕快照 2018-02-04 下午8.13.27

step 2. 接下來的畫面我們需要輸入TeamCity提供給外部Server呼叫的Url 格式範例,更多的Api可以參考官網的介紹

如下圖

  • <user name> : Teamcity 的帳號
  • <user password> : Teamcity 的密碼
  • <server address> : Teamcity 的url
  • <build configuration Id>: Teamcity 專案build id

範例如下

其中<build configuration Id> 大家可已到Teamcity Web ,Project > build > General Setting就可以看到build configuration Id

螢幕快照 2018-02-04 下午8.37.17

輸入完Url後我們就可以點選Save,這時候我們可以試著Push Code 到 Bitbucket ,Bitbucket就會透過Webhook的設定即時通知TeamCity程式碼有被修改,TeamCity就會自動當我們執行該Project的Build Agent,這樣的設定是不是比原本透過TeamCity本身的Trigger聰明多了呢?!

Part 2. TeamCity Auto Build完成之後,幫我們Auto Deployment到 TomCat

這個功能應該可以說是我們整合的最後一步,就是TeamCity可以幫我們自動Deploy,而這邊我們先用Tomcat來做設定

step 1. 我們先到TeamCity >> Project >> Build Step的設定,點選Add Build Step

螢幕快照 2018-02-04 下午8.58.42

step 2. 接著會到Build Step的設定頁面

  1. Runner Type : 選擇Container Depolyer
  2. Target : Tomcat Server 的 url
  3. Container Type : 選擇Tomcat的版本
  4. username : tomcat 的帳號(必須要擁有manager-script 的角色)
  5. Password : tomcat 的密碼
  6. Path to war archive : build完成後,產生的War檔位置

輸入完相關設定後就可以點選Save

螢幕快照 2018-02-04 下午9.01.02

最後我們就可以開始測試囉~~~

ps. 因為目前TeamCity只提供tomcat的container,其他的例如jboss,spring boot等…專案我們也可以透過Runner Type 選擇Command Line or SSH Upload的方式來達到Auto Deploy的目的喔!

part 3. TeamCity mail 通知

TamCity 可以幫我們Auto Build , Auto Deploy那可不可以寄信通知Build成功或失敗呢?當然是可以的喔~最後我們就來設定信件通知吧!!!

step 1. 首先我們先到Administrator的Email Notifier的設定

螢幕快照 2018-02-04 下午9.27.36

smtp server這邊是用Gmail的來設定,當然也可以自己架設一個smtp server(比較麻煩XD),我們只要準備一個gmail 帳號

  • SMTP host : smtp.gmail.com
  • SMTP port : 587
  • Send email messages from : gmail 信箱
  • SMTP login : gmail 信箱
  • SMTP password : gmail密碼
  • SMTP connection : StartTLS

設定完我們可以點選Test connection測試一下設定是否可以成功寄信喔!如果測試沒問題點選Save,到這邊我們已經完成了smtp Server的設定

step 2. 接著我們要針對使用者來設定各自的寄信規則,我們先到Teamcity的使用者設定>>Notification Rules>>Add Rules

螢幕快照 2018-02-04 下午9.43.21

接著選擇該使用者需要收到通知的專案,以及通知的狀況,選擇之後點選Save

螢幕快照 2018-02-04 下午9.47.46

最後大家就可以收到TeamCity的信件通知囉~~如此一來我們Push上去的Code就有一套很好的機制幫我們Build and Deploy如果有錯誤也可以即時寄信通知我們,這樣是不是讓我們在專案的開發上可以更得心應手呢?!

TeamCity的介紹到這一篇大概也要告一個段落了,如果有什麼錯誤的地方也請各位前輩多多指教,當然還有許多更進階的功能可以使用,如果之後有用到什麼好用的功能再上來跟大家分享喔~~~

 

軟體開發 之持續整合 Continuous Integration 簡介篇

– 前言

相信在目前的軟體工作環境裏,每一位開發人員都會用到一些版本管理工具,如 Git/SVN/VCS 等。(*當然,偶爾還是會看到傳說中的「資料夾管理法」 ~~~ XD

時賦科技 - 資料夾版本控制法
資料夾版本控制法

– 主旨

有了版本控制軟體之後,基本上我們就能共用同一份程式碼,並且從Log能知道是誰,在何時改的程式碼(*人是誰殺的) ~

時賦科技 - git log

不過… 我們透過版本管理軟體 取得最新的程式碼時,我們並無法確定 程式是否可以正常編譯?!
導至有時一早進辦公室就會遇到 編譯問題/Compiler Error ~ (*曾有朋友反應,因此他都很晚進公司~ XDD)

有沒有一種方式,可以程式工程師能安心(也專心地)開發程式 。
就算程式裏的語法上有錯誤 ~ 也可以在寫入(版本控制)時 能立即通知。(如下)

時賦科技 - Auto Build Email 通知

 

在這種時候,我們就需要一些輔助工具可以達到這種功能,所謂的 Continued Integration (我們這邊稱它 持續整合工具)

如圖,
CI Tools by APPX

目前我們常聽到的工具 大概就都在圖上,主要像 Jenkins, TeamCity, Travis CI, Bamboo 等。 對CI 界,排名前八大有興趣的可以看這裏

– 專案實作考量

這次,我們考量的點 有以下幾項
一、新建立的 Build Server 能連接到 Bitbucket Git Server (幾乎每家都可以~)
二、能夠支援 .net 以及 Java 程式碼 (*因為我們的案子主要以這兩種語言為主)
三、最少能週期性的Pulling 檢查 是否有最新的更新(code commit) ;
最好的情境 應該不要一直問Git,而是當Bitbucket有更新時 主動通知 Build Server,再進行編譯動作。

四、能夠將編譯的結果 盡快通知給團隊人員或是負責人,如 email。(*最好還可以看到程式的diff 差異)

五、費用考量 ~ (*free 當然很好,不過如果需要一些費用而提供多一點的功能 也是可以接受的~ 畢竟,就像投資一樣,投的好,相對的回收一定會更好的 ~)

六、(*非必要性) 支援  SSO/LDAP 整合

在看了以上的工具 及加入所有考量的情境之後,我們決定先採用 JetBrain 的 TeamCity 試試看 ~
最起碼看了官網上的介紹(*連結) 最起碼前面一到五項,相信是沒問題的 ~
(*google的 Android Studio 好歹也是從這家公司的IDEA J 衍生出來的,相信不會差到哪裏去)

甚至在2017年中間推出的版本裏,它還支援 docker, .net CLI, Kotlin DSL project 等 ~
相信對一般的開發團隊應該很足夠,再者  去年還放寬了免費版的限制
(從 20 build config -> 100 build config)
這家軟體商真的是佛心來著 !!!

詳細的功能介紹 請見官網說明(*網址: https://www.jetbrains.com/teamcity/features/

接下來的幾週,就讓我們以實際使用的過程 來分享給各位 ~
預計會有
一、TeamCity 安裝篇 (*已完成)
二、TeamCity 設定篇
三、TeamCity 進階設定篇

希望大家在軟體開發的生活裏能夠更輕鬆,將時間用在更珍貴的地方 (如喝咖啡,逛fb  等美好的事物上~ XD)

時賦科技 - 美好的事物
比如像這樣 ~

Cheers ~