前言
因每次发布版本的时候,都需要打开vs项目,然后进行编译。如果刚好手里有文件在修改,就需要先签入之类的。所以想找个可以实现自动编译的工具。
在网上查询了不少资料,终于基本上实现了自动编译的功能。因为自动部署涉及到服务器管理,本人也不熟悉,就不讨论了。
1. 我这边使用的是git,也可以用svn之类的其他版本控制器。git服务器用的是gitlab.
2. 下载git windows客户端,在自动编译服务器上安装。
3. 下载TortoiseGit windows客户端, 安装。
4. 在任意目录上右键,选择Git Bash here, 输入ssh-keygen, 一直默认回车。 之后会在用户目录(c:\user\你的系统用户名\.ssh)下生成2个文件: id_rsa和id_rsa.pub.
5. 打开开始菜单,打开TortioseGit里面的PuTTYGen 。 点击Conversion下的Import Key, 打开之前生成的id_rsa(不带后缀的)。复制输入框中的ssh-rsa那一大串文字到gitlab里面的ssh keys. 点击Save private key, 保存文件为id_rsa.ppk。
6. 下载jenkins安装。需要安装的插件:git plugin, msbuild plugin, credentials binding plugin, Parameterized trigger plugin.
7. 下载nuget.exe.
二、编写msbuild
1. 新建一个空解决方案Lake, 里面有Lake.Web这个web项目。
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>