.NET代码自动编译发布

发布时间:2017-09-09 10:41:14
.NET代码自动编译发布 因本人一直使用.NET开发,在做项目的时候,每次都要涉及到各个环境的部署问题,站群,手工操作容易出错,并且重复劳动多,所以一直在寻找一个能实现自动化部署的方案。

废话不多讲,先讲讲我的初步实现方案。

准备工具:GIT版本控制(gitlab),Jenkins, msbuild

1. 安装git版本控制器,提交代码。(svn好像也可以), 并生成ssh public key上传到gitlab的ssh key中(个人配置/SSH KEY)。

2. 安装jenkins开源工具。

3. Jenkins安装git plugin, Msbuild插件(Manager Jenkins/Manage Plugins)

4. 配置Jenkins中的git(Manager Jenkins/Configure System)

在git栏中输入name和Path: git install path\cmd\git.exe

5. 添加对应.NET framework version MSBuild

Name: .NET4.0

Path to MSBuild:

%system%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe

6. 建立.NET项目文件,并添加MSBuild文件

建立一个解决方案nonsuch.sln,里面包含一个website: nonesuch.web.

在解决方案根目录建立一个xml文件,改名为: build.targets

复制代码

<?xml version="1.0" encoding="utf-8"?>

<Project ToolsVersion="4.0" DefaultTargets="Build-Release" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<ItemGroup>

<Solution Include="$(MSBuildThisFileDirectory)nonsuch.sln">

<Properties>

Platform=Any CPU;

Configuration=Release;

DeployOnBuild=True;

DeployTarget=Package;

_PackageTempDir=$(OutDir);

AutoParameterizationWebConfigConnectionStrings=false;

UseWPP_CopyWebApplication=true;

PipelineDependsOnBuild=false

</Properties>

</Solution>

</ItemGroup>

<!--Log level properties-->

<PropertyGroup>

<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>

<BuildPlatform Condition=" '$(BuildPlatform)' == '' ">Any CPU</BuildPlatform>

<OutDir>$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), common.targets))\..\WebSite\nonsuch.web</OutDir>

</PropertyGroup>

<Target Name="Build-Release" BeforeTargets="BeforeBuild"

AfterTargets="AfterBuild"

DependsOnTargets="Init">

<MSBuild Projects="@(Solution)" >

<Output TaskParameter="TargetOutputs" ItemName="Assemblies" />

</MSBuild>

</Target>

<Target Name="CopyContentFiles" AfterTargets="Build">

</Target>

<Target Name="Clean">

<Message Text="如果需要,可以清除之前的目录" Importance="high" />

</Target>

<Target Name="Init" DependsOnTargets="Clean">

<Message Text="在编译前做的一些事情" Importance="high" />

</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="编译之后做的事情" Importance="high" />

</Target>

</Project>

复制代码

7. 新建一个任务: Build a free-style software project

1) Advanced Project options: Use custom workspace

输入此任务的文件夹,获取的git项目文件,将放入此文件夹中(d:\Git\nonsuch)。

2) Source code Management: Git

Repositories Url: 输入项目的Git地址,如:

git@gitlab.gofund.com:dotnet/nonsuch.git

Repository browser: gitlab

Version: 6.2

3) Build

Build a Visual Studio Project or solution using MSBuild

MSBuild Version: .NET 4.0(之前配置的MSBuild版本)

MSBuild Build File: 这个地址就是之前配置的workspace路径:

d:\Git\nonsuch\Build.targets

4) Post-build Actions

Archive the artifacts(这个主要是为了nuget下载的包,每次编译之前保留)

File to archive : packages/**

5) 点击Save保存,之后点击:Build Now

8. 如果有时候提示git没有权限,则进入服务,切换Jenkins的运行者为当前用户。

9. 为了解决一些引用依赖路径问题,我用在msbuild中用了GetDirectoryNameOfFileAbove这个关键字,有兴趣的可以搜索下。

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:宜昌网站建设 http://yichang.45qun.com