cake介紹
Cake 是.net平台下的一款自動化構建工具,可以完成對.net項目的編譯,打包,運行單元測試,集成測試甚至發布項目等等.如果有些特征Cake
沒有實現,我們還可以很容易地通過擴展Cake來實現我們想要的功能.
Cake
有以下特點
-
使用c#語言編寫,可以在Cake腳本里使用C#語言來實現我們想要達到的功能.
-
跨平台,可以運行在windows,linux 和macos上.
3)易於擴展,c#開發者很容易使用已有的c#
語言知識對Cake
進行擴展,甚至可以讓Cake
支持Java,Python等語言的構建
-
易於和常見CI/CD平台結合,
Cake
很容易和常見的CI/CD平台,例如Jenkins
,AppVeyor
,TeamCity
,TFS
,VSTS
,Azure PipeLine
等結合 -
插件豐富,Cake官網和第三方開發者提供了豐富的Cake擴展工具,方便開箱即用.
新建一個Cake HelloWorld示例
本節我們通過一個HelloWorld示例講解如何制作Cake文件,下載啟動腳本以及如何安裝Cake visualstudio插件
一.新建一個Cake文件
我們新建一個.net項目(可以是類庫,控制台或者web項目),這里我們創建一個控制台項目,然后在項目sln
所在目錄下新建一個名為build.cake
的文件.
讀者可以新建一個文本文件,然后的后綴改為cake,把文件名改為build,這樣也能完成一個
build.cake
的創建.當然也可以通過執行Powershell
命令New-Item build.cake
來創建一個build.cake文件,使用powershell創建時一定要注意在當前項目所在目錄下打開powershell,不然以上命令合建的文件可能路徑並不是我們期待的.
有些讀者可能有疑問是不是這個文件一定要命名為
build.cake
呢,答案是否定的,其實這個文件可以隨意命令,但是作為初體驗,強烈建議讀者不要隨便命令,而是跟着講解做,以免造成不必要的麻煩
二.編輯build.cake
文件
我們新建build.cake后,用詞本(或者其它自己熟悉的編輯器打開它),添加以下代碼
var target = Argument("target", "Default");
var configuration = Argument("configuration", "Release");
Setup(ctx =>
{
// Executed BEFORE the first task.
Information("Running tasks...");
});
Teardown(ctx =>
{
// Executed AFTER the last task.
Information("Finished running tasks.");
});
Task("Default")
.Does(() => {
Information("Hello World!");
});
RunTarget(target);
三.下載啟動腳本
Cake
在windows下啟動腳本為build.ps1
(當然也可以是其它名字),在linux和macos下為build.sh
需要注意的是雖然Cake在macos和linux下啟動腳本都是
build.sh
但是並不是一模一樣的,不同平台要下載針對本平台的啟動腳本.
由於我是在windows下運行的,因此下載windows平台對應的啟動腳本build.ps1
在項目build.cake
所在目錄下,我們打開powershell,然后執行以下命令Invoke-WebRequest http://cakebuild.net/download/bootstrapper/windows -OutFile build.ps1
即可下載啟動腳本
linux平台下載方式:curl -Lsfo build.sh http://cakebuild.net/download/bootstrapper/linux
mac平台下載方式 curl -Lsfo build.sh http://cakebuild.net/download/bootstrapper/osx
需要注意的是,一定要在當前目錄(sln所在目錄或者自已指定的其它目錄),如果是從開始菜單中啟動的powershell,一定要通過cd命令進入到目標目錄.
windows 10可以在文件夾左上角點擊
文件
在彈出菜單中找到powershell,這樣啟動的powershell目錄就是在當前文件夾所在目錄
四.執行構建
我們在當前目錄打開powershell,通過powershell,在powershell命令窗口里輸入.\build.ps1
執行剛下載的ps1腳本,過一分后我們可以看到輸出的構建信息
五.build.cake文件解析
初接觸build.cake
我們可能對它很陌生,不過不要害怕,它完全是用c#語言寫的,只是方法是自定義的.
build.cake里共有三個任務,Setup,TearDown和Default,其中Setup
任務會在所有任務執行之前執行,TearDown
任務會在所有任務執行后執行,非常類似於Nunit
里的Setup和TearDown方法.有些時候我們想在所有方法執行之前執行一些初始化工作,在所有任務執行完之后執行一些收尾工具,我們可以把相應代碼寫在Setup
和TearDown
里
Setup
,TearDown
和Default
里接收的都是一個委托,我們可在在委托里寫自己的代碼,委托里的參數由於目前我們沒有使用到,這里不再講解.大家只要知道它的格式就行了.
Setup
,TearDown
是兩個特殊的任務,由cake自動調用,而Default任務需要顯地調用才能執行,我們編寫其它任務時,可以模仿Default任務.
在這里,有些童鞋可能會有疑問,以上任務通過腳本也能完成,為什么還要這么麻煩來使用工具呢,其實使用腳本有很多弊端,我們前面介紹了一個完整的.net web項目在測試環境的持續集成方案,其中使用到了數十個腳本和工具,如果我們的腳本編寫不夠嚴謹往往會造成生產環境的損失.並且從實踐上來看,腳本數量過多時往往容易失控.部署在服務器中腳本很多時候成為燙手山芋,不熟悉的人既不想看,也不想改,更重要的是不敢輕易改.也不敢輕易把它移除或者刪除掉.另外一個不可忽視的問題是腳本往往背后調用的是工具,工具又對運行環境有依賴.我們在精心配置的一台服務器上可能運行良好,但是換更換到其它的服務器上往往會因為各種條件不滿足造成各種問題,在人手不足的情況下這么問題尤為凸顯.開發和運維都苦不堪言,開發腳本的初衷往往是為了提高效率,結果由於維護問題加深開發和運維之間的矛盾.而cake則由自身管理各種依賴,很大程度上解決了以上問題.