Skip to content

Instantly share code, notes, and snippets.

@LinZap
Last active March 31, 2018 10:35
Show Gist options
  • Save LinZap/976e2f712e5970e07614e90691fbdb26 to your computer and use it in GitHub Desktop.
Save LinZap/976e2f712e5970e07614e90691fbdb26 to your computer and use it in GitHub Desktop.
手刻 DevOps for .NET 專案

手刻 DevOps for .NET 專案-----------------------------

本文以 .NET 專案開發人員的的角度撰寫

DevOps 是現在非常主流的開發方式,目的只有一個:開發、測試與佈署自動化一氣呵成,減少開發過程中繁複的工作。

假設今天要測試一個功能,我們在本機將程式碼改好, 測試無誤後,還要手動放到遠端測試機器上,在遠端測試機器上也測試無誤後,才算完成。但如果在遠端測試機有錯誤,勢必又得回本機進行修正,修正完再佈署一次...,即使只改一行 code,也必須如此...,無形中便增加了非常多的開發成本...

其中最關鍵的部分是:自動化持續整合(CI)和持續部署(CD)。而 Microsoft Team Foundation Server 2017 已經有非常完整的 solution for DevOps,.NET 開發人員可以使用其提供的介面,方便的設定符合自己專案的 CI/CD pipeline,無需使用其他第三方工具。

回歸本質,這類的工具雖然提供了十分方便的功能,但我們還是能透過最原始的指令,來兜出仿 CI/CD 效果的功能,以下將逐步介紹。


Tf Command-Line Utility Commands

對於 .NET 開發人員而言,使用 Team Foundation (TF) 經驗多數是 Visual Studio 中提供的便利介面,但其實 Microsoft 也提供了指令操作。由於 CI/CD 自動化的作法,必須掌握 TF 指令的使用方式並撰寫對應的功能。

TF.exe

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 上有更新的檔案,這邊可以將該指令設定為排程定時執行,達成效果

MSBuild Command-Line

透過 Tf Command-Line 持續取得最新版的專案資料後,其實就可以算是完成持續整合(CI)的部分了,但持續佈署(CD)的部分便要透過編譯程式後,將產出的結果放置到測試機上。多數的 .NET 開發人員已經習慣於使用 Visual Studio 中提供的編譯功能來完成工作,為了實現 CD 使用指令來編譯,必須掌握 MSBuild 指令的使用方式。

MSBuild.exe

MSBuild 指令由 MSBuild.exe 提供,最新版本通常放置與 Visual Studio 安裝的位置相同,例如:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe

編譯 .NET 專案

其實 Visual Studio 就是透過 MSBuild 對專案進行編譯,我們在專案中常看到的 .csproj 就是用來描述編譯順序的檔案,將方案設定檔 .sln 指定給 MSBuild 工具,便能以指令的方式對專案進行編譯 (效果等同使用 Visual Studio 編譯),指令如下:

MSBuild.exe [方案描述檔路徑] /t:[方案中的特定專案]

參數說明:

  • 方案描述檔路徑:指定欲編譯的方案之方案描述檔路徑,附檔名為 .sln
  • 方案中的特定專案:指定在方案中欲編譯的特定專案名稱

結論

透過結合 取得最新版的專案編譯 .NET 專案 兩個 Script 的結合,便可以達到仿 CI/CD 的自動化開發流程,以 TFS 作為中央程式碼控管為主,測試機上持續訪問 TFS 取得最新檔案後再自動執行編譯,如果有錯誤可以通知開發人員介入處理,如此便能完成一套簡易版本的 DevOps。

License

創用 CC 授權條款
"手刻 DevOps for .NET 專案" 一文Zap製作,以創用CC 姓名標示-非商業性 3.0 台灣 授權條款釋出。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment