最近在做一個團隊項目的時候,用到了自動編譯發布部署環境【也可以說是持續集成】,於是順便學習了下這個環境的搭建過程。
持續集成
持續集成是一種軟件開發實踐,即團隊開發成員經常集成它們的工作,通常每個成員每天至少集成一次,也就意味着每天可能會發生多次集成。每次集成都通過自動化的構建(包括編譯,發布,自動化測試)來驗證,從而盡早地發現集成錯誤。
1、持續集成系統的組成
一個完整的構建系統必須包括:
1) 一個自動構建過程,包括自動編譯、分發、部署和測試等。
2) 一個代碼存儲庫,即需要版本控制軟件來保障代碼的可維護性,同時作為構建過程的素材庫。
3) 一個持續集成服務器。
其中1)自動構建和2)代碼存儲庫,都是有相應的軟件配合,開發人員需要的學習成本不高,復雜在各模塊的相互配合,這一期間可能需要大量時間去調試。一旦調試完畢,對於之后工作效率的提升是成倍的。
2、MSBuild
自動構建,做.Net開發的同仁相信大多數都會使用VS,而Visual Studio用MSBuild構建.NET項目。
MSBuild所需的僅僅是一個腳本,在腳本中指定要執行的target;項目中的.csproj和.vbproj 文件都是MSBuild腳本。當編寫好MSBuild腳本后,只需要一條簡單的命令,即可實現代碼的編譯與測試工作。
雖然MSBuild實現了自動編譯與測試,但是在調用MSBuild時,我們還是通過輸入命令進行調用的,這里摻雜了人工干預的成分,因此要將這部分工作剔除。
3、版本管理
目前主流的版本管理有傳統的SVN、分布式的Git和Mercurail各有利弊,自行選擇。
4、Jenkins
Jenkins是一個開源項目,提供了一種易於使用的持續集成系統,使開發者從繁雜的集成中解脫出來,專注於更為重要的業務邏輯實現上。
同時 Jenkins 能實施監控集成中存在的錯誤,提供詳細的日志文件和提醒功能,還能用圖表的形式形象地展示項目構建的趨勢和穩定性。下面將介紹 Jenkins 的安裝與配置。
持續集成與持續部署,參考:如何從零開始搭建 CI/CD 流水線
Jenkins安裝配置
Jenkins是一個可擴展的持續集成的引擎,主要用於持續自動的構建、測試軟件項目監控一些定時執行的任務。
我的環境:
機器:Windows Server 2008 R2 Enterprice
開發環境:VS2017
源代碼管理:Git
軟件安裝
1、Jenkins
最新的Jenkins 安裝包可以從這里下載:http://jenkins-ci.org/
安裝完成后我們可以看到在windows服務中多了一個叫Jenkins的服務。
安裝目錄:C:\Program Files (x86)\Jenkins
2、.NET Framework 4.6.1
https://www.microsoft.com/zh-cn/download/details.aspx?id=49982
3、Microsoft Build Tools 2015
https://www.microsoft.com/zh-CN/download/details.aspx?id=48159
我機器安裝vs2017是已經包含了msbuild(C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSBuild.exe),所有也可以不用下載。
MSBuild功能是“對.NET項目的源碼進行編譯”,雖然平時我們使用 Visual Studio 都是圖形界面編譯、發布程序,但實際上 Visual Studio 是去調用 MSBuild 來進行各種操作的,所以我們要想讓 Jenkins 也能自動編譯代碼,也要為它准備一套 MSBuild。
4、.NET Framework 4.6.1 Developer Pack
https://www.microsoft.com/zh-CN/download/details.aspx?id=49978
5、NuGet x86 Commandline
https://dist.nuget.org/index.html
NuGet 的控制台程序,在編譯程序之前,先需要使用 NuGet 進行包還原。這個軟件不需要安裝,放在一個固定的位置就行,例如F:\Software\nuget.exe 。
Jenkins->簡單操作
打開控制台/命令行 - >轉到Jenkins安裝目錄。分別執行以下命令:
停止:jenkins.exe stop
開始:jenkins.exe start
重新啟動:jenkins.exe restart
登錄界面用戶名密碼
如果不記得密碼了,可以配置為不使用密碼,如下:
修改安裝目錄下的config.xml文件的節點 <useSecurity>false</useSecurity>
而密碼保存在文件:credentials.xml
jenkins->安裝插件
Git插件獲取源代碼,MSBuild插件編譯.net項目。
http://localhost:8080/ 中Manager Jenkins => Manage Plugins
在Available選項卡中,選中git Plugin安裝。
在Available選項卡中,選中MSBuild安裝。
jenkins->全局工具配置/系統設置
http://localhost:8080/configureTools/

其中 MSBuild Name 可以隨便。
Path to MSBuild 就是我們MSBuild在當前電腦的路徑:C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe
對應:VisualStudioVersion=11.0
注:實踐證明,這里應該要根據使用的開發環境VisualStudio版本來決定。 即對應.NET版本的MSBuild編譯器目錄。
eg:使用VS2017編寫的程序,這里應該填寫 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSBuild.exe
對應:VisualStudioVersion=15.0
建任務
回到主界面,然后點擊 New Job, 輸入任務名稱,推薦用英文,我們選擇構建一個自由風格的軟件項目。
項目名稱:FirstSite
則從git上下載的代碼放置在jenkins服務器的 d:\Jenkins\workspace\FirstSite目錄【即工作目錄 Workspace】下。(注:不一定是d盤,是jenkins 的安裝目錄)
源代碼管理
源碼管理選擇git,配置我們的源代碼的路徑和用戶名密碼

MSBuil編譯(介紹)
有好多種命令方式,主要介紹“windows批處理命令“和”Build a Visual Studio project or solution using MSBuild “
1、Execute Windows batch command(執行windows批處理命令)
命令舉例:cd %WORKSPACE%\DEV\ npm install
其中 WORKSPACE解釋:The absolute path of the directory assigned to the build as a workspace.(分配給構建的目錄的絕對路徑作為工作區) 即git文件down下來的路徑(d:\Jenkins\workspace\FirstSite)。
點擊輸入框下方的“可用環境變量” 在Execute shell 或 Execute Windows batch command文本框中使用,使用方法:%變量名%
2、Build a Visual Studio project or solution using MSBuild

MSBuild Build File:解決方案的相對路徑。【項目文件或者工程文件的名稱】
.\angularDemo\angularDemo.csproj
注:指定編譯文件時,可以指定解決方案(.sln)也可以指定為項目文件(.csproj),這樣就只針對某個模塊進行編譯。
Command Line Arguments:MSBuild 的命令行參數
MSBuild.exe 用指定的選項生成指定的項目或解決方案文件。
方式一:根據vs項目發布配置文件來編譯發布
【可以分本地發布和遠程WebDePloy發布,依據在vs中的發布方式而定】
/t:Rebuild
/p:Configuration=Release
/p:DeployOnBuild=True;PublishProfile=Testing-Environment-CI-publish
其中 /t:Rebuild 表示每次都重建,不使用增量編譯
PublishProfile表示使用 Testing-Environment-CI-publish.pubxml 發布文件來發布項目
注:/t是/target的縮寫,/p是/property的縮寫,多個屬性間用分號或逗號分隔,最后不需要分號或逗號。
方式二:直接使用MSBuild命令來編譯發布
參考:
/p: DeployOnBuild=true;
ExcludeGeneratedDebugSymbol=false;
ExcludeXmlAssemblyFiles=false;
SkipExtraFilesOnServer=True;
WarningLevel=4;
NoWarn=1591;
DeployTarget=MSDeployPublish;
MSDeployPublishMethod=WMSVC;
AllowUntrustedCertificate=True;
MsDeployServiceUrl=https://172.xx.yy.zz:8172/msdeploy.axd;
username=WDeployAdmin;
password=yyyyyy;
DeployIisAppPath=test/FirstSite;
Configuration=Dev
解釋:
DeployOnBuild=true 表示啟用編譯並發布
Configuration=Release 表示編譯Release版本
TargetFrameworkVersion=v4.5表示編譯的目標是.NET
PublishProfile指定創建的Profile名稱(不用寫目錄,僅文件名即可,而且不用擴展名) 程序編譯成功后就是發布到我們PublishProfile指定的文件夾中
VisualStudioVersion=11.0 表示VS2012
MsDeployServiceUrl 指定發布服務器連接的URL(在IIS站點右鍵啟用Web Deploy發布來設置的)
DeployIisAppPath 要發布的位置。Eg: Test/FirstSite 對應的在iis中是

Username 用戶名。此處的用戶名和密碼,來自站點的IIS里面設置的windows用戶。

設置密碼

VS中站點發布
在VS中右擊項目,發布
1、發布方法:選 文件系統
目標位置:E:\IIS_Deploy\FirstSite

PublishProfile=CustomProfile1,點發布會在目標位置生成相應的文件,在iis中配置后即可訪問網站。
設置綁定800端口,訪問:http://localhost:800/FirstSite/Practice/pages/#/
2、若發布方法選 Web Deploy,則是

服務器不寫localhost而是寫ip就會要求填寫用戶名和密碼。
這些配置在Jenkins搭建.NET自動編譯發布遠程環境中會提到。
MSBuil編譯構建(實際配置)
1、nuget包還原
我們在把項目提交到git或者svn上的時候並不包含這些包,我們把項目從git上拉到下來后用vs打開,vs會首先來還原這些nuget包,同樣,如果我們是使用msbuild.exe來構建這些項目,也需要首先還原nuget包,否則項目由於缺少依賴而無法正常編譯,下面我們就介紹如何使用nuget.exe來還原項目依賴。
在jenkins的項目,配置中,build節中 增加一個bat處理命令:
"F:\Software\nuget.exe" restore "%WORKSPACE%\angularDemo.sln"
指定 nuget.exe 的路徑,然后使用 restore 命令,對當前目錄下的 xx.sln 解決方案【不要用項目csproj】文件進行包還原。
注:bat命令 必須要在Build命令之前。點中拖動,可調換順序。
2、Build配置——發布到本地
根據前面VS中發布項目,生成的CustomProfile1 來配置
1、MSBuild Build File:配置為.\angularDemo\angularDemo.csproj
或者C:\Program Files (x86)\Jenkins\workspace\FirstSite\angularDemo.sln 都可以。
2、Build的命令行參數:
/t:rebuild
/p:DeployOnBuild=true;Configuration=Release;VisualStudioVersion=15.0; PublishProfile=CustomProfile1
構建之后,站點會發布到CustomProfile1中設置的publishUrl的物理路徑下。
常見的構建問題報錯,參考:Jenkins構建常見問題
其他參考:
