我們公司的上版稽核就靠 Team Build 了! 自動化建置、過版Log 歷程、報表 通通搞定!
前言
2012 / 11 在北中南的研討會中講到 Continuous Deliver 時全程 Demo 如何將 ASP.NET 自動化佈署到 Production ( UAT ) 的 IIS 上,但當時有很多的設定細節因時間的關係所以並未一五一十地跑一次。這次就將相關的項目全部整理出來,以便讓有意願走自動化佈署的朋友可以更容易地上手。
除了以後可以不用再人工自已佈署搬檔案外,連稽核來都可以不用怕。工作項目的記錄、編譯和過版的歷程 Log 全部都是由系統自動產生。在IIS 上更可以勾稽過版的帳戶是用 Team Build 帳號過版
使用環境
以下使用的環境
- TFS 2012 Update 2
- VS 2012 Ultimate
- Windows 2008 R2
- SQL Server 2012
自動化佈署前的準備事項
電腦沒辦法知道您的系統的編譯的順序、佈署的位置和更新的項目,所以我們必須要先準備好「自動化佈署的腳本」讓電腦可以照著我們的腳本來執行。如此一來才能達到自動化的效益,所以絕對不是有一個工具可以什麼事情都不用做就可以自動化佈署到指定的機器。
必備的項目
- 環境設定
自動化佈署必須要針對 SIT 、UAT 或是 Production 不同的環境來套用不同的環境設定。 ( 就像 測試環境 和 正式環境的 SQL Server 帳號密碼驗證或是加密問題都需要納入管理 ) - 編譯步驟的腳本
程式專案之間的編譯順序,避免專案引用到較舊的元件。 - 佈署流程的腳本
編譯完成的項目和元件後,搬到Host 指定的目錄中 並且檢查 Host 相關的設定。 ( 若是 IIS 上沒有該站台,腳本就會自動建立 )
不可否認地這三件事在以前真的不太容易,尤其是 1 和 3 可以嚇跑很多人了。
現在在 .net 的開發人員可就幸福多了!基礎的佈署幾乎都可以不用再寫腳本了,就連環境設定在開發工具中也都有解決方案。
環境設定 Configuration
這裡我先簡易用 Connection String 節點來做對照組
Web.Config
Web.Release.config
至於要如何新增組態,則必須在 Configuration Manager 中新增
點選新增後,就可以指定要從那一個組態 copy 過來 ( 比如新增的 UAT 環境可以從 Release 設定檔複製 )
詳細的操作步驟,各位可以參考這篇文章
如何讓 VS 2010 按下 F5 也有「組態轉換」 - XDT Transformation Tool
http://www.dotblogs.com.tw/franma/archive/2011/10/11/41255.aspx
Config 的轉換語法可以參考 MSDN 的文章
Web 應用程式專案部署的 Web.config 轉換語法
http://msdn.microsoft.com/zh-tw/library/dd465326(v=vs.100).aspx
編譯步驟的腳本
是使用 .NET 開發的朋友,就先恭禧各位因為 Sln 檔中就會詳細記錄編譯的順序,Project 檔則是 MSBuild 的編譯腳本。光是這個部分幾乎不用做任何事情。
但需要注意的是 ASP.NET 的專案,請務必使用 Web AP 類型
若是 Web Site 的話也沒關係,在專案上按右鍵—>轉換到 Web Application 即可。如此一來編譯佈署的設定檔才有辦法記錄
VS 2012 的網站佈署機制就是直接用 IIS Web Deploy Tool 3.0 的版本,所以佈署的方式請用 Web Deploy 。
選擇編譯的環境,目前這裡是用 Staging 的項目。而且連同資料庫都同步更新 ( 必須要 SQL Server 2008 以後的版本 )
而這裡指定的 Connection String 必須也要同步更新 Web.Config ,這樣子程式才能正確地指定資料庫。
按一下 發行 Publish 確認是否能正常運作
基本上這樣子建置的腳本大致上就已經完成了。
看完後是不是覺得很眼熟?這個部分也是 ASP.NET 開發團隊最常用的項目之一,所以大家平日的動作基本上就等於完成腳本了
自動化佈署
TFS Build 最方便的地方就是已經整合了 TFS 的版控和觸發流程,更重要的是還會整合版控和工作單匯整成建置的報表。
當然,請先確認所有的檔案是否都有納入到版本管控之中,因為到時候編譯的環境並不是在開發人員自已的電腦上。所以所有相關的檔案都必須要納入版控
Team Build Server 還沒有建立的話,可以參考這份文件。
TFS 2012 一步到位!圖形化 安裝手冊!v2
http://www.dotblogs.com.tw/franma/archive/2012/06/03/72585.aspx
Team Build 自動化佈署資料庫設定
自動化建置中不包含資料庫的話!這個步驟可以直接跳過!
當系統想要透過 DACFx 來佈署資料庫的話!必須要準備兩樣
一、資料庫複製的來源
二、資料庫初始化的資料
而 Team Build 在資料庫佈署的設定位置必須是專案設定檔中的 Package/Publish SQL 的頁面中
Database Entries 請直接按下 Import from Web.config 即可
而依序我們就要設定
目的地資料庫 和 來源的資料庫位置
第二個就是初始化的資料,這個必須要我們自已準備。
這裡的 DB 有用到 VS 2012 的 DB Pro 的專案,所以裡面我特別建立了初始化的資料
因為 Publish 的機制較新,而 Package SQL 的設定較舊。所以在佈署時 Package SQL 並不會啟用 DACFx 機制
所以可以到 Pubxml 設定檔中將正確的設定項目 copy 下來。
然後再到 Web Project 檔中開啟將原本的 Package SQL 設定換掉
舊的!DBFullSql 的區段整個都不要了
貼上剛剛 copy 下來的設定後即可。
Team Build 組建設定
設定組建的名稱:TailspinToysDeploy
可以設定手動或是自動,若是 SIT 的環境可以考慮用 排程或是 CI 的選項
設定程式碼來源要下載的工作區路徑。這個會將 Src 底下所有的檔案全部 download 一份在 Build Agent 上
所以請不要用 $ 根目錄,因為光下載就會一堆。
\\vs2012\BuildSuccessed
設定我們要將編譯好的項目放到指定的共享資料夾
「/p:DeployOnBuild=True /p:DeployTarget=MsDeployPublish /p:CreatePackageOnPublish=True /p:MSDeployPublishMethod=InProc /p:MSDeployServiceUrl=localhost /p:DeployIisAppPath="Default Web Site/TailspinToysStaging" /p:UserName=domain\user /p:Password=myPassword /p:SkipExtraFilesOnServer=True /p:Configuration=Staging /p:PlatformTarget=x86」
在 進階 Advanced 展開後—> MSBuild Arguments 中將上面的建置參數讓 Team Build 知道要使用 Publish 的 Web Deploy Tool 機制,而不是用原本 MSBuild 的項目。
除了有完整的 Report 外,還有 完整的 Log 記錄。
當然到 IIS 上站台已經建立好了呢
大家關注的 Web.config 也當然在 Team Build 機制下一併地更換成正確的內容了呢!
當然也是要執行一下的啦!都很正常呢!
總結
各位看到這裡有沒有發現到,幾乎都不用再寫什麼 自動化過版的腳本?所有的腳本工具幾乎都幫您搞定了。
不用再依靠很多的人力去維護過版腳本,我相信這也是很多團隊必須要納入考量的地方
而且 IIS 的更新還是「差異」更新,沒有就幫你新增,有的就幫你更新,舊的就保留不覆蓋。
資料庫也是一樣的機制,除了省時間外讓團隊更有競爭力。
避免不同人過版都可以保持一致的水準。
下次可以介紹其他的佈署項目和更多彈性的設定
參考資料
martin fowler
http://martinfowler.com/delivery.html
http://vishaljoshi.blogspot.tw/2010/11/team-build-web-deployment-web-deploy-vs.html
影片
Web Deploy Parameterization in Action
http://vishaljoshi.blogspot.tw/2010/07/web-deploy-parameterization-in-action.html
發行符號資料
http://msdn.microsoft.com/zh-tw/library/hh190722.aspx
Enabling Symbol and Source Server Support in TFS Build 2010
http://blogs.msdn.com/b/jimlamb/archive/2009/06/15/symbol-and-source-server-in-tfs-2010.aspx
根據預設範本定義建置流程
http://msdn.microsoft.com/zh-tw/library/dd647547.aspx
Team Foundation Build 活動
http://msdn.microsoft.com/zh-tw/library/gg265783.aspx
Basic Microsoft Web Deployment Tool Setup For Visual Studio 2010