用MSBuild和Jenkins搭建持續集成環境

發表于:2012-11-21來源:InfoQ作者:Mustafa Saeed Haji A點擊數: 標簽:持續集成
用MSBuild和Jenkins搭建持續集成環境.你或其他人剛剛寫完了一段代碼,提交到項目的版本倉庫里面。但等一下,如果新提交的代碼把構建搞壞了怎么辦?萬一出現編譯錯誤,或者有的測試失敗了,或者代碼不符合質量標準所要求的底限,你該怎么辦?

  你或其他人剛剛寫完了一段代碼,提交到項目的版本倉庫里面。但等一下,如果新提交的代碼把構建搞壞了怎么辦?萬一出現編譯錯誤,或者有的測試失敗了,或者代碼不符合質量標準所要求的底限,你該怎么辦?

最不靠譜的解決方案就是寄希望于所有人都是精英,他們根本不會犯這些錯誤。但如果真的出現了這些問題,我們就希望發現的越早越好。最好的方式就是只要有代碼提交,我們就有某種方式對它進行驗證。這就是持續集成的作用。

  持續集成相關的工具有很多。最流行的要數一款基于Java的名叫Jenkins的工具。它提供了Web界面,用戶可以在界面上配置Job,每個Job都包含一系列的構建步驟。Jenkins可以完成開頭那個場景中所提到的所有驗證工作,它還能更進一步做自動化部署或者一鍵式部署。

  Jenkins是由Sun的前員工開發的,它的根基是Java,但也可以用在非Java的項目里,比如PHP、Ruby on Rails、.NET。在.NET項目里,你除了Jenkins之外還要熟悉另一樣工具:MSBuild。

  Visual Studio用MSBuild構建.NET項目。MSBuild所需的僅僅是一個腳本,在腳本中指定要執行的target。項目中的.csproj和.vbproj 文件都是MSBuild腳本。

  在這篇文章中,我們會從頭開始,一步步完成一個屬于我們自己的MSBuild腳本。在它完成以后,我們只需要一個命令就可以刪除之前的構建產物,構建.NET應用,運行單元測試。后面我們還會配一個Jenkins Job,讓它從代碼庫中更新代碼,執行MSBuild腳本。最后還會配另一個Jenkins Job,讓它監聽第一個Job的結果,當第一步成功以后,它會把相關的構建產物復制出來,放到web服務器里啟動運行。

  我們用一個ASP.NET MVC 3應用做例子,在VS里面創建ASP.NET MVC 3應用并選擇“application”模版就行。我們還要用一個單元測試項目來跑測試。代碼可以在這里下載。

  你好,MSBuild

  MSBuild是在.NET 2.0中引入的針對Visual Studio的構建系統。它可以執行構建腳本,完成各種Task──最主要的是把.NET項目編譯成可執行文件或者DLL。從技術角度來說,制作EXE或者DLL的重要工作是由編譯器(csc,vbc等等)完成的。MSBuild會從內部調用編譯器,并完成其他必要的工作(例如拷貝引用──CopyLocal,執行構建前后的準備及清理工作等)

  這些工作都是MSBuild執行腳本中的Task完成的。MSBuild腳本就是XML文件,根元素是Project,使用MSBuild自己的命名空間。MSBuild文件都要有Target。Target由Task組成,MSBuild運行這些Task,完成一個完整的目標。Target中可以不包含Task,但是所有的Target都要有名字。

  下面來一起創建一個“Hello World”的MSBuild腳本,先保證配置正確。我建議用VS來寫,因為它可以提供IntelliSense支持,不過用文本編輯器也無所謂,因為只是寫個XML文件,IntelliSense的用處也不是很大。先創建一個XML文件,命名為“basics.msbuild”,這個擴展名只是個約定而已,好讓我們容易認出這是個MSBuild腳本,你倒不用非寫這樣的擴展名。給文件添加一個Project元素作為根元素,把 http://schemas.microsoft.com/developer/msbuild/2003設置成命名空間,如下所示

  

  

  下一步,給Project元素添加一個Target元素,起名叫“EchoGreeting”

  

  

  

  這就行了。我們已經有了一個可以運行的MSBuild腳本。它雖然還啥事都沒干,但我們可以用它來驗證當前環境是不是可以運行MSBuild腳本。在運行腳本的時候,我們要用到.NET框架安裝路徑下的MSBuild可執行文件。打開命令行,執行“MSBuild /nologo /version”命令,看看.NET框架安裝路徑是不是放到了PATH環境變量里面。如果一切正確,你應該能看到屏幕上打印出MSBuild的當前版本。倘若沒有的話,或者把.NET框架安裝路徑放到PATH里面去,或者直接用Visual Studio Command Prompt,它已經把該配的都配好了。

  進入存放剛才那個腳本的目錄后,以文件名當作參數調用MSBuild,就可以執行腳本了。在我的機器上可以看到下面的執行結果:

  C:\>msbuild basics.msbuild

  Microsoft (R) Build Engine Version 4.0.30319.1

  [Microsoft .NET Framework, Version 4.0.30319.269]

  Copyright (C) Microsoft Corporation 2007. All rights reserved.

  Build started 8/2/2012 5:59:45 AM.

  Build succeeded.

  0 Warning(s)

  0 Error(s)

  Time Elapsed 00:00:00.03

  執行完腳本以后,MSBuild會首先顯示一個啟動界面和版權信息(用 /nologo 開關可以隱藏掉它們)。接下來會顯示一個啟動時間,然后便是真正的構建過程。因為咱們的腳本啥都沒干,所以構建就直接成功了??傆嬘脮r也會顯示在界面上。下面咱們來給EchoGreeting Target添加一個Task,讓腳本真的干點事。

  

  lt;Exec Command="echo Hello from MSBuild" />

  

  現在EchoGreeting Target有了一個Exec Task,它會執行Command屬性中定義的任何命令。再運行一次腳本,你應該能看到更多信息了。在大多數時候,MSBuild的輸出信息都很長,你可以用 /verbosity 開關來只顯示必要信息。不過無論怎樣,MSBuild都會把我們的文字顯示到屏幕上。下面再添加一個Target。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97