因每次發佈版本的時候,都須要打開vs項目,而後進行編譯。若是恰好手裏有文件在修改,就須要先簽入之類的。因此想找個能夠實現自動編譯的工具。ios
在網上查詢了很多資料,終於基本上實現了自動編譯的功能。由於自動部署涉及到服務器管理,本人也不熟悉,就不討論了。git
1. 我這邊使用的是git,也能夠用svn之類的其餘版本控制器。git服務器用的是gitlab. web
2. 下載git windows客戶端,在自動編譯服務器上安裝。windows
3. 下載TortoiseGit windows客戶端, 安裝。服務器
4. 在任意目錄上右鍵,選擇Git Bash here, 輸入ssh-keygen, 一直默認回車。 以後會在用戶目錄(c:\user\你的系統用戶名\.ssh)下生成2個文件: id_rsa和id_rsa.pub.ssh
5. 打開開始菜單,打開TortioseGit裏面的PuTTYGen 。 點擊Conversion下的Import Key, 打開以前生成的id_rsa(不帶後綴的)。複製輸入框中的ssh-rsa那一大串文字到gitlab裏面的ssh keys. 點擊Save private key, 保存文件爲id_rsa.ppk。ide
6. 下載jenkins安裝。須要安裝的插件:git plugin, msbuild plugin, credentials binding plugin, Parameterized trigger plugin.svn
7. 下載nuget.exe.工具
1. 新建一個空解決方案Lake, 裏面有Lake.Web這個web項目。gitlab
2. 在解決方案根目錄增長一個文件: build.msbuild。
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" DefaultTargets="Build-Release" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <BuildArtifactsDir Include="BuildArtifacts\" /> <Solution Include="$(MSBuildThisFileDirectory)Lake.Web\Lake.Web.csproj"> <Properties> Platform=Any CPU; Configuration=Release; DeployOnBuild=True; DeployTarget=Package; _PackageTempDir=$(OutDir); AutoParameterizationWebConfigConnectionStrings=false; UseWPP_CopyWebApplication=true; PipelineDependsOnBuild=false; OutputPath=..\Published\Lake.Web </Properties> </Solution> </ItemGroup> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration> <BuildPlatform Condition=" '$(BuildPlatform)' == '' ">Any CPU</BuildPlatform> <OutDir>$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), common.targets))\release\Lake.Web</OutDir> </PropertyGroup> <Target Name="Build-Release" BeforeTargets="BeforeBuild" AfterTargets="AfterBuild" DependsOnTargets="Init"> <MSBuild Projects="@(Solution)" Targets="Rebuild"> <Output TaskParameter="TargetOutputs" ItemName="Assemblies" /> </MSBuild> </Target> <Target Name="CopyContentFiles" AfterTargets="Build"> </Target> <Target Name="Clean"> <RemoveDir Directories ="$(MSBuildThisFileDirectory)..\Published\Lake.Web" /> <RemoveDir Directories="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), common.targets))\release\Lake.Web" /> </Target> <Target Name="Init" DependsOnTargets="Clean"> <!-- <MakeDir Directories="@(BuildArtifactsDir)" /> --> </Target> <Target Name="RunUnitTests" DependsOnTargets="Compile"> <Exec Command='"@(NUnitConsole)" @(UnitTestsDLL) /xml=@(TestResultsPath)' /> </Target> <Target Name="BeforeBuild"> <Message Text="%(AssembliesBuiltByChildProjects.Identity)" /> </Target> <Target Name="AfterBuild"> <Message Text="after build" Importance="high" /> </Target> </Project>
這裏面有幾個目錄:
$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), common.targets))\release\Lake.Web 這個是表示從當前目錄,一直往上找,找到一個common.targets的文件,最終的的發佈文件會在這個目錄裏面的release\Lake.web下。
..\Published\Lake.Web 這個目錄表示編譯後的輸出目錄。
3. 簽入提交到git.
1. 打開Manager Jenkins/Configure System, 點擊Home directory 下的Advanced..., 其中Workspace Root Directory就是之後全部的git repoistory放置的目錄。
我這裏設置的是: D:\git/${ITEM_FULLNAME} .
而後在這個目錄下(d:\git)新建一個空文件: common.targets.
把以前下載的nuget.exe也複製到這裏。
2. Manager Jenkins/ Global Tool Configuration
Git-Path to Git executable, 這個是你的git安裝地址: C:\Program Files\Git\bin\git.exe
MSBuild-> MSBuild installations: Name:Dotnet4.0, Path to MSBuild: C:\Program Files (x86)\MSBuild\14.0\Bin\ 注: 這個path是看你安裝的.net版本.
1. New Item
Enter an item name, 而後選擇Freestyle project.
2. Git
Repositoryies: git@192.168.1.8:.net/Lake.git (git裏面能夠查看到)
Credentials: 點擊Add, 在key裏面輸入以前id_rsa.ppk內容。
Repository browser: gitlab
version: 6.5
3. Build: Add build step -> Build a Visual Studio project or solution using MSBuild
MSBuild Version: 以前MSBuild輸入的Dotnet4.0
MSBuild Build File: D:\git\Lake\build.msbuild
4. 若是這個任務依賴於別的任務,在此項目以前,必須編譯另一個任務,在Add build step裏面選擇Trigger/call builds onother projects. 而後輸入另一個Projects的名稱。 勾選Block until.
5. 還原Nuget包
Add build step -> Execute Windows batch command.
輸入: d:\git\nuget.exe restore "D:\git\Lake\Lake.sln"
6. Post-build Actions
Archive the artifacts(這個主要是爲了nuget下載的包,每次編譯以前保留)
File to archive: packages/**
7. 若是有時候提示git沒有權限,則進入服務,切換Jenkins的運行在爲當前用戶。
8. Build Now, 能夠看到成功仍是失敗。
9. 全部的編譯文件,都在以前build.msbuild裏面的release\Lake.web
1. 用MSBuild和Jenkins搭建持續集成環境(1)