本文以 .NET 專案開發人員的的角度撰寫
DevOps 是現在非常主流的開發方式,目的只有一個:開發、測試與佈署自動化一氣呵成,減少開發過程中繁複的工作。
假設今天要測試一個功能,我們在本機將程式碼改好, 測試無誤後,還要手動放到遠端測試機器上,在遠端測試機器上也測試無誤後,才算完成。但如果在遠端測試機有錯誤,勢必又得回本機進行修正,修正完再佈署一次...,即使只改一行 code,也必須如此...,無形中便增加了非常多的開發成本...
其中最關鍵的部分是:自動化持續整合(CI)和持續部署(CD)。而 Microsoft Team Foundation Server 2017 已經有非常完整的 solution for DevOps,.NET 開發人員可以使用其提供的介面,方便的設定符合自己專案的 CI/CD pipeline,無需使用其他第三方工具。
回歸本質,這類的工具雖然提供了十分方便的功能,但我們還是能透過最原始的指令,來兜出仿 CI/CD 效果的功能,以下將逐步介紹。
對於 .NET 開發人員而言,使用 Team Foundation (TF) 經驗多數是 Visual Studio 中提供的便利介面,但其實 Microsoft 也提供了指令操作。由於 CI/CD 自動化的作法,必須掌握 TF 指令的使用方式並撰寫對應的功能。
TF 指令由 TF.exe 提供,通常放置與 Visual Studio 安裝的位置相同,例如:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\TF.exe
依照建立工作區的官方文件,建立工作區的指令如下:
TF.exe workspace /new /collection:[專案集合網址] [工作區名稱] /login:[登入帳號],[密碼] /noprompt
參數說明:
專案集合網址
:在 TFS 上的專案集合 URL,例如:http://url:8080/tfs/MyPrjCollection
工作區名稱
:指定新的工作區名稱登入帳號
:登入 TFS 的帳號密碼
:登入 TFS 的密碼
注意:登入的帳號必須要有該
專案集合網址
的管理權限
依照工作資料夾的官方文件,將遠端專案的目錄對應到本機的指定的目錄指令如下:
TF.exe workfold /map [遠端路徑] [本機路徑] /collection:[專案集合網址] /workspace:[工作區名稱] /login:[登入帳號],[密碼]
參數說明:
遠端路徑
:指定專案集合
下的某個專案之遠端路徑,例如:$/MyPrjCollection
本機路徑
:指定要對應到本機的哪個目錄,例如:D:\MyPrjCollection
專案集合網址
:在 TFS 上的專案集合 URL,例如:http://url:8080/tfs/MyPrjCollection
工作區名稱
:指定上一步建立的工作區名稱登入帳號
:登入 TFS 的帳號密碼
:登入 TFS 的密碼
依照取得遠端檔案的官方文件,取得遠端最新版本專案的檔案指令如下:
TF.exe checkout [要取得的檔案] /recursive /login:[登入帳號],[密碼]
參數說明:
要取得的檔案
:可以指定特定路徑的檔案,也可以使用*
萬用字元,來表示取得目錄下的所有檔案,例如:D:\MyPrjCollection\*
登入帳號
:登入 TFS 的帳號密碼
:登入 TFS 的密碼
這個命令可以反覆執行,以持續取得 TFS 上有更新的檔案,這邊可以將該指令設定為排程定時執行,達成效果
透過 Tf Command-Line 持續取得最新版的專案資料後,其實就可以算是完成持續整合(CI)的部分了,但持續佈署(CD)的部分便要透過編譯程式後,將產出的結果放置到測試機上。多數的 .NET 開發人員已經習慣於使用 Visual Studio 中提供的編譯功能來完成工作,為了實現 CD 使用指令來編譯,必須掌握 MSBuild 指令的使用方式。
MSBuild 指令由 MSBuild.exe 提供,最新版本通常放置與 Visual Studio 安裝的位置相同,例如:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe
其實 Visual Studio 就是透過 MSBuild 對專案進行編譯,我們在專案中常看到的 .csproj
就是用來描述編譯順序的檔案,將方案設定檔 .sln
指定給 MSBuild 工具,便能以指令的方式對專案進行編譯 (效果等同使用 Visual Studio 編譯),指令如下:
MSBuild.exe [方案描述檔路徑] /t:[方案中的特定專案]
參數說明:
方案描述檔路徑
:指定欲編譯的方案之方案描述檔路徑,附檔名為.sln
方案中的特定專案
:指定在方案中欲編譯的特定專案名稱
透過結合 取得最新版的專案
與 編譯 .NET 專案
兩個 Script 的結合,便可以達到仿 CI/CD 的自動化開發流程,以 TFS 作為中央程式碼控管為主,測試機上持續訪問 TFS 取得最新檔案後再自動執行編譯,如果有錯誤可以通知開發人員介入處理,如此便能完成一套簡易版本的 DevOps。
"手刻 DevOps for .NET 專案" 一文由Zap製作,以創用CC 姓名標示-非商業性 3.0 台灣 授權條款釋出。