在上篇了解到說什麼是DevOps之後,我們就開始探討第一個部分,也就是Continous Integration (CI)。
CI最基本的核心就是build專案 - 所以我們需要了解一下到底VS是如何build專案的,只有了解之後我們才能夠把它腳本化,也才有可能自動化。
因此,這篇將會介紹:
- VS到底如何建制專案
- 什麼是build tool
- 為什麼接下來系列會選擇使用psake作為build tool
VS到底如何建制專案
我相信這個問題,很大的可能寫了2~3年的.Net programmer可能都回答不出來。原因是VS實在太方便了,.Net工程師太依賴於這種便利性,反而對於底層運作不需要那麼清楚。
其實別說建制專案了,很多工程師連程式最小單位,如何編譯一個cs檔案都不知道如何去做,所以,我會從最底層開始說起。
如何編譯CS程式碼
我們都知道程式碼是需要編譯才能夠使用,但是到底如何編譯呢?
其實很簡單,當我們安裝了VS的時候會自動安裝一個csc.exe
的程式,而這個程式就是c# compiler。
我們可以打開visual studio安裝時候帶的Developer Command Prompt, 然後這個時候建立一個簡單的hello world cs檔案,然後輸入:csc helloWorld.cs,我們就會得到一個helloWorld.exe
, 執行起來就是我們的程式
了解編譯器之後,我們會發現可以編譯程式碼了,但是當我們有大一點點規模的專案的時候,用csc實在太不方便了。更別說我們有時候要用Debug模式編譯,有時候要用Release模式編譯,有時候要 整個rebuild - 這些如果都自己下csc指令來達到會瘋掉,而且又不能在專案之間共用。工程師懶是一種美德,這個時候就有build tool的出現,而VS就是使用了MSBuild這個build tool 來建制專案。
什麼是Build Tool
通常來說build tool的task是有相依性,例如Task A 只有在 Task B執行之後才能夠做,透過把編譯需要做的事情包成一個一個的Task,然後透過這種相依性關係,達到執行起來整體是一個chain。
build tool的task的設定有些是參數化的,因此像是要用debug模式還是release模式其實只是一個參數不同,但是其他都一樣的動作。
Visual Studio預設所使用的Build Tool就是MSBuild,而MSBuild是一個xml base的build工具。
當我們用記事本打開那些solution或者csproj的時候就會發現,其實整個檔案是xml格式,而那些就是在定義MSBuild所看得懂的參數,當VS要執行build的時候,就依照這個csproj的定義去執行 應該的動作。
到底應該用什麼build tool?
說實話,build tool實在太多了,從VS預設用的MSBuild,到JS base的gulp,到java的gradle,到用F#寫的FAKE和C#的CAKE,到我們將來會用的用PowerShell寫的Psake,是在是太多了。
到底應該用什麼基本上取決於團隊,不過有幾個點可以考慮:
- 這個build tool需不需要額外安裝什麼?要考慮我的build應該要在任何地方都能夠執行,越少這種OS的dependency越好
- 這個build tool用的多不多?也就是eco system好不好 - 這樣很多網路上範例都可以直接拿來用
- 這個build tool好不好寫?符不符合習慣 - build tool最終是要給人用的,好不好用,用不用的習慣非常重要
為什麼不直接用MSBuild?
從上述幾個考量點,會發現,MSBuild既然VS預設就用,那應該和popular,範例應該也很多,那為什麼還要考慮其他的build tool?
其實原因有兩個:
- MSBuild是xml base - xml字定義task的時候看起來很繁瑣,明明很簡單的東西定義起來很費勁,看又不容易看
- 相較於我們會用的psake(powershell),MSBuild原本的視野有點狹隘,他關注於建制.net的東西,但是隨著前端興起,隨著我們要自動化的東西越多,MSBuild不是做不到,而是 做起來比較麻煩。反過來來看PowerShell,本身就是為了讓MIS能夠腳本化達到自動化的工具,很多Windows東西都可以透過PowerShell來設定,因此決定使用psake。
psake到底是什麼?
說了那麼多,希望對build tool有點概念(就算沒有,等到我們進入實作的時候都會明朗),那接下來就介紹我們之後會使用到的工具psake。
psake是一個powershell的module,所以基本上在撰寫psake的task設定的時候,整個powershell的能力我們都能用到(換句話說包含整個.Net Framework我們都能用到)。
psake的唸法和日語的清酒sake是一樣的。
psake的好處有:
- 我們是建制.Net專案,所以建制的機器都在Windows上面(這邊不考慮.Net Core) - windows 7 之後一定有powershell,所以基本上要使用psake不用裝什麼(除了psake module)
- 因為psake只是powershell的module,整個powershell的平台功能都能使用,換句話說網路上任何powershell有關的資源都能用 - 要知道powershell建立的目的是為了讓MIS和工程師 不用每一次為了一些小功能就要開發一個console程式的平台
- 可以藉著了解psake了解powershell的能力 - 相信大部分工程師都不太用powershell,但是其實他功能很強大,很多windows設定都能夠透過powershell來達到 - 很多功能也都可以透過 寫powershell script把日常自動化 - 像我日常用git就是用powershell的module posh-git - 所以powershell其實都最好了解一下
結語
希望這篇能夠讓大家了解到什麼是build tool,和怎麼選擇一個build tool。
這幾天的理論相信大家一定都煩了,接下來開始我們將會進入到實際操作的部分。
在下一篇,我們會先了解怎麼使用psake,未來的demo code的架構會如何等。
沒有留言 :
張貼留言