June 7, 2015

TeamCity - 關閉登入頁使用者註冊功能

TeamCity登入頁預設允許使用者自行註冊帳號密碼。



基於安全性的考量,建議將這功能關閉,以方便控管使用者帳號。可至Administration\Authentication\Credentials authentication modules取消勾選Allow user registration from the login page關閉此功能。



May 17, 2015

呼叫ASP.NET Web API出現HTTP 405錯誤

目前使用ASP.NET Web API開發web service已經是團隊的best practice。前幾天把寫好的service部署到測試環境(Windows 2012 Server + IIS 8),呼叫兩支需要使用到HTTP PUTDELETE的API,結果出現了405的錯誤訊息,但在本機(Windows 7 + IIS Express 8.5)測試時卻沒有類似問題


解決方式可以在<system.webServer>\<modules>下加入<remove name="WebDAVModule" />及<system.webServer>\<handlers>加入<remove name="WebDAV" />,如
<system.webServer>
  <validation validateIntegratedModeConfiguration="false" />
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <remove name="OPTIONSVerbHandler" />
    <remove name="TRACEVerbHandler" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
</system.webServer>

或是把WebDAV Publishing功能移除



May 3, 2015

TeamCity - 使用HTTPS連線

TeamCity - 簡介與安裝一文中,我在安裝TC時將預設的port number設定為80。如果你有安全上的考量,也可改以HTTPS連線,不過TC目前的版本(9.0.4)仍無法透過管理介面來做設定,需要直接修改設定檔並重新啟動TC的Windows服務。

既然要使用HTTPS連線,首先必須準備好SSL憑證。在Windows平台上,TC可讀取的憑證格式為*.pfx。你可以透過IIS管理工具或是從作業系統中匯出*.pfx憑證,如IIS 8 and IIS 8.5: How to Import and Export SSL Certificates。匯出後將憑證複製一份到TC所在的伺服器,如C:\keys\domainname.pfx,接下來修改設定檔。

開啟C:\TeamCity\conf\server.xml,加入以下設定

<Connector port="443"
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           SSLEnabled="true"
           scheme="https"
           secure="true"
           clientAuth="false"
           sslProtocol="TLS"
           keystoreFile="C:\keys\domainname.pfx"
           keystorePass="P@ssw0rd"
           keystoreType="PKCS12"
           maxThreads="150"
           />

keystoreFile為憑證所在實體路徑,而keystorePass為憑證密碼。設定完成後重新啟動TeamCity Server服務,接下來即可以HTTPS連線瀏覽TC。


雖然開啟了HTTPS連線,HTTP連線仍然支援,如果要完全關閉HTTP連線,可在硬體或軟體防火牆關閉port number 80。

最後,在Adninistration> Global Settings中將Server URL更新成HTTPS的連線位址。


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服務。


January 10, 2015

工商服務 - Build Engineer(台北)

Do you truly enjoy building quality software? Do you enjoy working in a progressive, fun, and professional team environment? Well, you’re in luck! AFT is hiring!

AFT develops a wide variety of web-based software, all of which require a solid back-end architecture. We use the Microsoft technology stack, using C#, MVC, Entity Framework, and SignalR for real-time interactivity. We make use of tools such as TeamCity, MSDeploy, and FAKE to automate builds and deployments.

If you have experience with C# development and build engineering using industry best practices, and familiarity with build management, we’d like to talk with you!

Some skills we’re looking for:

  • Extensive experience in C#/.NET
  • Experience with TeamCity or other build environments, and Fake Scripts
  • Familiarity with Amazon EC2
  • Familiarity with Puppet
  • Curiosity, a lifetime learner, and open-minded

Tasks may include:

  • Migrate build scripts from "Teamcity build steps" to Fake
  • Make deployment procedures easier (build and deploy machines should require minimum manual configuration)
  • Setup automatic deployment for cluster environment
  • Migrate teamcity database from file system into some more reliable relational store
  • Setup automatic incremental backups for build server EC2 machine


Please apply for this job from http://goo.gl/GCmQho