前言 

因每次发布版本的时候,都需要打开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>
msbuild

相关文章: