本人做.net研發已有3年多了,之前一直偏向於技術研究,自己學了很多技術,現在突然發現學了那么多技術有什么用呢?真正用到的並不多。
現在?算是一只小鳥吧,自嘲下.....畢竟我是90后,很多領導對於90后這個詞沒有信任感,相信很多小伙伴都有這樣的體會。
好啦,不說那么多了,進入正題,第一次寫,有錯指出來,大家一起分享,一起學習:
首先,你得下載jenkins:https://jenkins-ci.org/content/thank-you-downloading-windows-installer/ 安裝,
安裝完成后,它自己會打開jenkins的管理頁面,端口默認是8080(需要修改在jenkins安裝根目錄jenkins.xml中修改端口號即可),ok,繼續,我們選擇系統管理-管理插件,
這時候你的界面可能沒有那么多插件可選,(可更新、可選插件、已安裝、高級)都點下找到 立即獲取點擊,刷刷頁面坐等ing.....好了如下圖:
然后在 可選插件 中找到 MSBuild Plugin,勾上點擊直接安裝,此時自動構建插件已安裝完畢,其實就是調用VS的命令行生成平台MSBuild,如需發布插件(根據個人需求,前面的插件是將svn服務器中的最新代碼生成出來,這個插件是發布,簡單點說就是代替人工copy文件到服務器)請繼續安裝 Hudson Post build task,操作與之前一致,
ok,進入系統管理=>系統設置,在MSBuild節點處點擊 新增MSBuild,填入名稱和MSBuild路徑,MSBuild路徑一般為C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSbuild.exe,根據需求自行配置。那么問題來了,服務器里面沒有安裝VS哪來的MSBuild?其實將開發機上的C:\Program Files (x86)\MSBuild文件夾直接拷貝到服務器中即可,或者你可以選擇單獨安裝。
ok,保存。
接下來開始新建Job
在 源碼管理 處選擇Subversion,輸入你的svn地址,如果有帳號密碼點擊 enter credential 輸入,
接下來,配置構建:
MSBuilder Version 為之前配置的 MSBuild v4.0.30319
MSBuild Build File 是解決方案文件或者項目文件的名稱
然后就是MSBuild的命令行參數了。
/t:Rebuild 表示每次都重建,不使用增量編譯
/property:Configuration=Release 表示編譯Release版本,
/property:TargetFrameworkVersion=v4.5表示編譯的目標是.NET 4.5版本
我們先構建測試下,不想測試的可以忽略。
完成后在Console Output中可以看構建情況,
這里我碰到一個問題,一直生成失敗,VS可以正常生成,這里卻報錯,原因是我其中一個項目中的引用的為X86版與該項目的的X64版不一致造成,解決該問題或是在項目屬性=>生成=>Release的生成序列化程序集設置為關閉
解決錯誤,0個錯誤成功.....
繼續,我們接着配置Job,配置構建后操作(實際為生成成功后需要做的事情):
\b0\s+(個錯誤) 是正則檢索0個錯誤
當檢索到0個錯誤后,執行F:\Test\xxxxx\Build.bat 批處理文件,這里我們將bat文件放在服務器 jenkins安裝目錄=>workspace=>Test(jenkins Job名稱),或者是直接將bat文件上傳到svn服務器跟解決方案文件放在一起)
Build.bat文件,根據自己的實際編寫,
我這里實際做的就是生成出來的文件放置 bat文件所在盤符/TextWeb/Web中,這里值得注意的是需要 編輯器 自定義,也就是在BBBBBBBBBBB.csproj中添加Name="PublishToFileSystem" 的Target節點
@echo off
cd %~dp0
%windir%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe ".\AAAAAAAAAA.sln" /m /t:Clean;Build /p:Configuration=Release /distributedFileLogger if %errorlevel% NEQ 0 echo solution compile failed if %errorlevel% NEQ 0 goto END echo compile is successful, starting deploy echo 1.deleting TextWeb directory rd /s/q TextWeb echo 2.deploying file to TextWeb directory %windir%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe ".\path\BBBBBBBBBBB.csproj" /t:PublishToFileSystem /p:Configuration=Release;PublishDir="..\TextWeb\Web" /distributedFileLogger if %errorlevel% NEQ 0 echo Client deploy failed if %errorlevel% NEQ 0 goto END :END if %errorlevel% NEQ 0 ( if "%autoBuild%" EQU "1" (exit /b %errorlevel%) pause )
<Target Name="PublishToFileSystem" DependsOnTargets="PipelinePreDeployCopyAllFilesToOneFolder"> <Error Condition="'$(PublishDir)'==''" Text="The PublishDir property must be set to the intended publishing destination." /> <MakeDir Condition="!Exists($(PublishDir))" Directories="$(PublishDir)" /> <!--http://msdn.microsoft.com/en-us/library/3e54c37h--> <ItemGroup> <PublishFiles Include="$(_PackageTempDir)\**\*.*" /> <!--Dlls in Lib folder, AdminBLL, BLL, BLL config, Custom component service, Repositories--> <!--<DllFiles Include="$(MSBuildProjectDirectory)\..\Lib\**\*.*;$(MSBuildProjectDirectory)\Bin\*BLL.dll*.*" />--> </ItemGroup> <Copy SourceFiles="@(PublishFiles)" DestinationFiles="@(PublishFiles->'$(PublishDir)\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="false" /> <!--<Copy SourceFiles="@(DllFiles)" DestinationFiles="@(DllFiles->'$(PublishDir)\Bin\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="false" />--> </Target>
大功告成!盡情享受吧~根據需求可在jenkins中配置發布失敗郵件發送,添加一些用戶來維護等等.