.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 >
Build.targets

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地址,如:

[email protected]:dotnet/nonsuch.git

Repository browser: gitlab

Url: gitlab的url地址,比如: http://gitlab.gofund.com.cn/dotnet/nonsuch

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这个关键字,有兴趣的可以搜索下。

 

10.   这样就通过Jenkins工具,调用git版本控制器,自动获取最新版本代码,发布到某个文件夹,然后IIS可以指向到发布的文件夹。但这样涉及到web.config配置,如果希望不同环境的web.config配置不一样,可以利用debug, release生成的web.config文件,甚至可以把配置放入到统一个数据库中,根据机器的名字自动获取对应环境。

 

.NET代码自动编译发布_第1张图片

这是我的实现,不知道有没有更好的解决方案。主要是利用msbuild, 这个还有很多功能需要去探索。

你可能感兴趣的:(.net)