Windows Server配置Jenkins,實現監測SVN提交自動構建.net4.5的項目


1,持續集成

概念:http://baike.baidu.com/view/5253255.htm,對於大多數人而言,自動構建/自動測試/自動部署,已經很發揮它的價值了。選擇上:

  • 推薦jenkins,一是它比較常見,二是它能跑在windows服務器上
  • CruiseControl有.net的版本,一進其官網看見醒目的文檔過期提示,我就沒有嘗試的欲望了
  • gitlab ci的web界面清爽(比jenkins好看),但是只能跑在linux上,感興趣的同學去試驗吧,所以本文是講的jenkins。

2,msbuild

set MSBuildEmitSolution=1
msbuild <<your project>>.sln

注意: 此種情況下生成的msbuild文件只適用於本機,也就是說,它定義了一堆路徑,全是你開發機器上的,同時解決方案里所有項目的屬性都是一個一個配置的,不是用的變量,如果要修改的話只有批量替換。

其次,如果需要輸出到其它目錄,或是別的定制的需求,想繞過msbuild的學習應該是不行的

3,jenkins

  • 下載jenkins,執行安裝包里的install.exe,安裝好后目標服務器的8080端口即可訪問,而且已經添加到防火牆例外,遠程亦可訪問
  • 配置Jenkins
    • 導航到“系統管理/管理插件/可選插件”,從filter里面輸入msbuild,把msbuild插件安裝好,記得勾選裝好后重啟jenkins
    • 把msbuild的目錄加到環境變量里去,如果不這么做,也可以在jenkins里面配置:
      • 導航到“系統管理/系統設置/msbuild”,(jenkins插件安裝后並成功重啟后會出現)
      • 點擊“新增msbuild安裝”,填入名稱(如msbuild4)和帶文件名的路徑(如C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe)
    • 保存
  • 新建一個job
    • 新建的時候選擇自由風格軟件即可
    • 配置好名稱,選擇一個源碼管理,我選擇SVN(subversion),該插件系統自帶了,配置說明:
      • Repository URL:代碼倉庫地址(當文本框失焦,會出現一個警告,提示沒有權限,點擊警告文字中的授權鏈接即可打開一個彈窗錄入用戶名密碼)
      • Local module directory (optional):簽出代碼保存的位置
      • Repository depth option:選擇infinity
      • 如果要從多個位置簽出,add more location即可
    • “構建”一欄填寫內容:
      • msbuild version:如果你沒有設置過,那么就是默認的default(前提是前面說的環境變量加了),否則你可以從下拉里選出你上一步配置過的msbuild4
      • msbuild build file: 你編寫的msbuild文件名
      • Command Line Arguments:暫時留空
    • 保存后,一個job就建成了
  • 點擊左側的“立即構建”,即可開始構建,當然,99.99%的情況下你會構建失敗的。

4,錯誤解決

如果你選擇安裝visual studio到服務器上,那就萬事大吉了

如果嫌麻煩不安裝visual studio,那么就得針對出現的問題來逐個解決了

  • 錯誤1: 先別看錯誤代碼,你裝了.net framework沒有,既然我以4.5為例,從4.0到4.5都分別裝一下吧
  • 錯誤2: 'msbuild.exe' 不是內部或外部命令,也不是可運行的程序或批處理文件。 Build step 'Build a Visual Studio project or solution using MSBuild' marked build as failure
    解決:一般是你沒有把msbuild路徑加到環境變量里,如果加了還報這個問題,重啟機器測試;如果你是在jenkins里面配置的路徑還出這個問題,是不是配錯了,這不屬於知識性錯誤,不闡述。
  • 錯誤3: error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
    解決:錯誤已經很明確的,既然沒有裝vs,就把開發機器上的C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\整個目錄都拷到CI服務器上,幾百M,如果還嫌這個太大,那么你只需要拷貝其中的v10.0或v11.0(看你裝的vs版本)這個文件夾即可。
  • 錯誤4: C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(983,5): warning MSB3644: The reference assemblies for framework ".NETFramework,Version=v4.5" were not found. To resolve this, install the SDK or Targeting Pack for this framework version or retarget your application to a version of the framework for which you have the SDK or Targeting Pack installed. Note that assemblies will be resolved from the Global Assembly Cache (GAC) and will be used in place of reference assemblies. Therefore your assembly may not be correctly targeted for the framework you intend. [C:\Program Files (x86)\Jenkins\jobs\test\workspace\net_zkx_zkkaweb\Zkx.Jkka.Application\Zkx.Jkka.Application.csproj]

    解決:你沒裝vs的話,windows sdk也就是缺失的,其實錯誤信息已經把解決方案告訴你了:

    • install the SDK
    • Targeting Pack for this framework version
    • retarget your application to a version of the framework for which you have the SDK
    • Targeting Pack installed.
      既然選擇不裝vs了,那么也放棄安裝sdk的方法吧,所以只需要指出正確的framework路徑就可以了:
    • 我把C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5拷到任意目錄,如d:\fmsdk\v4.5
    • 還記得在添加Job的時候配置“構建”一節的時候,我說“Command Line Arguments”暫時不配置吧,此時你就要配置了:-p:FrameworkPathOverride="d:\fmsdk\v4.5",具體路徑看你怎么復制的。
    • 這篇文章就是講的這個問題
  • 有關msbuild的問題就這么些,還出現問題的話只能拿着錯誤號放狗搜索了,要知道,你現在除了安裝了jenkins和必要的.net framework庫,沒有額外安裝windows sdk或vs,已經省了很大功夫了。

5,svn hooks

要想在svn成功接收到代碼后自動構建,就得用到svn hooks。在源碼倉庫目錄下有一個hooks文件夾,里面列出來的就是可用的鈎子“模板”,我們需要post-commit,所以你就建一個post-commit.bat即可,所以,重要的是文件名。

因為我們只做一件事,就是訪問一下那個“立即構建”的超鏈接,鏈接地址右鍵復制出來,所以我們也沒必要學習模板里的語法,只需要知道如何用一個命令來訪問網址即可。 因為批處理語句本身不支持發起http請求,所以你可以選擇調用IE來訪問一個目標網址。我用powershell寫了一個調用IE訪問的腳本,本機測試成功,但是通過svn觸發的過程中,完全沒任何反應,如果有興趣的,可以自己試試原生的start iexplore “構建網址”,我就不多說了,跳到下一節

6,powershell

我的這篇文章是參考我同事的同樣一篇文章寫的,目的是什么呢? 就是我要看能不能用最少的安裝,最少的知識量做到jenkins自動構建.net framework4.5的程序。

最少安裝前面做到了,除了非裝不可的.net framework和jenkins本身,再無安裝過程

最少知識量呢?

  • 1,不去學習msbuild的語法(實測用sln生成的msbuild可用性不高,失敗)
  • 2,我同事用的vb來發起http請求,即使代碼已經很簡單了,作為一個C#的coder,既然powershell都能調用.net framework了,我自然考慮用既有知識干這件事,哪怕語法格式不熟,至少一看就懂

這就是我生成的ps1文件:

#post-commit-hook-jenkins.ps1

[Net.HttpWebRequest] $req = [Net.WebRequest]::create($args)
$req.Method = "GET"
[Net.HttpWebResponse] $result = $req.GetResponse()

一個webrequest即可,只管請求不管響應。

那么我的post-commit.bat這個腳本就這么寫就行了:

# post-commit.bat

powershell E:\Repositories\post-commit-hook-jenkins.ps1 網址

就是ps1文件的絕對路徑,加上”網址“參數即可,這個”網址“就是上述腳本里的$args

測試一次svn commit,如願看到jenkins的web控制台排了個任務進行構建。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM