經過了幾天的理論介紹,我們開始要進入建制專案的部分。
我們會先拿一個Asp .net Mvc的網站作為第一個要建制的專案,所以我們會先建立出來,然後在使用MSBuild帶來的幫助,幫我們快速建立專案
這次的建制我們都是focus在.net Framework的部分,或許.net core會有所不同,但是概念是一樣。
(之後下面提到的code都可以從這邊看到內容:github repo,這篇會是tag sample/chapter6)
同步發表於我的部落格:http://blog.alantsai.net/2016/12/devopsSeries-buildMvcWebProject.html (部落格的格式會漂亮一些,ithome不支援html好不方便)
在我們往下之前,有一個關係要在說明一下。我們使用psake並不是說要完全放棄MSBuild,反而是兩個結合在一起得到兩者的好處。
首先,我們知道VS其實有很多不同類型的專案,而這些不同類型的專案在建制過程呼叫方式都完全不太一樣。因此,微軟提供了很多不同project的msbuild target(同等於task的概念)來處理 怎麼建制這些專案和要copy那些檔案。
因此,我們不會重複造車輪,而是直接使用MSBuild所帶來的便利。
不過這個時候會好奇,那當初不就直接用MSBuild就好?
原因非常簡單,要擴充MSBuild非常麻煩。需要用C#才有辦法寫,然後又要處理一堆xml。
反過來看psake,非常簡單,只要定義一個powershell script就好。
所以,接下來我們會看到MSBuild被執行就沒什麼好奇怪。
我們需要先把環境準備好方便接下來的測試。
首先我們先建立一個Asp .net Mvc的專案,先看看有web專案情況會如何。
我們會建立一個asp .net mvc的專案,並且包含預設的Test專案
基本上在建制專案的時候,有3個重要參數,說明一下:
1 和 2 其實 在VS裡面也可以設定,不過一般來說不怎麼調整就是
有了這三個部分之後,我們就可以來調整我們Compile的Task
首先,剛剛提到的三個參數,第1和第2要增加,而第3我們已經有了。和其他參數一樣,我們會把這個加在properties裡面,這樣才有可能可以把值覆蓋。
Properties{
...
$buildConfiguration = "Release"
$buildTarget = "Any CPU"
}
再來的會就是我們實際的Compile task:
task Compile -depends Clean, Init -description "編譯程式碼" `
-requiredVariables solutionFile, buildConfiguration, buildTarget, buildTempDirectory `
{
Write-Host "開始建制檔案:$solutionFile"
msbuild $solutionFile "/p:Configuration=$buildConfiguration;Platform=$buildTarget;OutDir=$buildTempDirectory"
}
這邊使用到了msbuild做實際的編譯,然後用到了requiredVariables去做參數的驗證。
這個時候我們就可以去執行build.ps1,會發現一切正常,但是有幾個小問題。
首先從build的日誌裡面可以看到,我們使用的MSBuild版本是4.6,但是我們的.Net Framework卻是4.0,但是實際上我們的project是用4.5.2寫的。如果用到4.5.2才有的功能, 很可能導致編譯錯誤。
這個很好解決,在Invoke-psake有個參數叫做framework,用這個可以設定build的target framework。
所以在build.ps1
Invoke-psake -buildFile .\default.ps1 -taskList Test `
-framework "4.5.2" `
-parameters @{
"solutionFile" = (Get-ChildItem("..\*.sln")).FullName |
Sort-Object $_ | select -Last 1
}`
-properties @{
"testMsg"="測試訊息"
}
Console看不出哪段是psake在執行
msbuild的內容比較多,造成看不太清楚那段屬於task記錄執行。不過psake有提供一個叫做FormatTaskName,能夠定義Task執行的時候顯示的內容。
FormatTaskName ("`r`n`r`n" + ("-"*25) + "[{0}]" + ("-"*25))
在這篇我們開始把psake和msbuild做了結合,並且把一個mvc網站建立了出來。
在下篇,我們會看看被compile出來的結果,和加入console和library專案,看看建制結果是否有不同。