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

http://www.2cto.com/kf/201403/287399.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值