.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文件,甚至可以把配置放入到统一个数据库中,根据机器的名字自动获取对应环境。

 

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

    .NET代码自动编译发布,古老的榕树,5-wow.com

    郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。