zoukankan      html  css  js  c++  java
  • 使用jenkins配置.net mvc5网站自动构建全过程记录

    持续集成是个简单重复劳动,人来操作费时费力,使用自动化构建工具完成是最好不过的了。最终可以实现的一个效果是,svn提交代码,服务器端自动编译并发布。

    所使用的版本:windows server 2008 r2,并使用它自带的iis服务器。

    1.机器上安装好.net framework 4.5及.net framework 4.5 sdk(下载地址:https://msdn.microsoft.com/zh-cn/windows/hardware/hh852363),如果你的机器上已经安装好了vs,并能够编译.net 项目,那可以跳过这一步。

    2.下载jenkins到服务器,并安装。

      地址:http://jenkins-ci.org/ 

    你可以看到这样的界面:

    3.点击左边的系统管理,选择插件管理,安装一个新的插件叫MSBuild Plugin

    如下图,打勾之后点击直接安装即可。

    4.安装完成后重启Jenkins,然后点击左侧的系统管理,进入系统设置中。

    5.找到下面的MSBuild节点,并点击新增MSBuild,然后填写名称和MSBuild的路径,我的配置如下:

    6.在系统管理中找到Subversion节点(注:我使用的是svn代码管理工具,如果你使用其他的,请配置其他节点),选择为目前使用的版本。

    这时候,最基本的环境就配置起来了,不过这时候的Jenkins随便谁都能进来改配置,自己百度一下,把身份验证启用了吧,相信作为高级攻城狮的你,这个不在话下。

    环境好了之后,我们来新增一个项目进去。let's go

    1.点击页面上面的创建一个新任务,选择构建一个自由风格的软件项目,并填写好名称。

     2.告诉Jenkins你的svn账号,以便它来获取你当前svn上面的程序。Repository中,填写好你要自动构建的项目的svn地址,在Credentials这一项中,你需要先点击add,填写好您的用户名和密码(本文中未说明的项均保持默认即可)。

    3.构建触发器中勾选Poll SCM,日程表中填写* * * * *,表示每一分钟它去svn服务器看一次有没有最新的版本。

    4.在构建下面点击增加构建步骤,并选择Build a Visual Studio project or solution using MSBuild,在Command Line Arguments这一项中,填写我下面的这段代码

    /m trunk/xxx.sln /t:Rebuild  /p:Configuration=Release /p:DeployOnBuild=true;PublishProfile=xxx  /p:TargetFrameworkVersion=v4.5

    /m 后面写你要编译的sln文件,/p:后面是一个个的参数,Configuration=Release表示release方式的编译,PublishProfile=xxx指的是你的发布的文件名称,TargetFrameworkVersion表示你的目标.net framework版本,我用的是4.5,所以就写4.5就行了。

    我的配置如下(网上有人说把/m参数写到MSBuild Build File那里也行,我尝试了一下没有成功):

    在此过程中,还遇到了很多的问题,但是有时候真的是稀里糊涂的解决的,大概我给大家说说我遇到的问题:

    1.开发机上的MSBuild文件夹需要copy到服务器.Microsoft ASP.NET也需要copy到服务器。

    2.服务器上需要安装.net framework的sdk,你需要编译哪个版本的项目就装哪个版本的sdk

    从下面额链接找到对应的SDK下载:

    http://msdn.microsoft.com/en-us/library/windows/desktop/ff851942.aspx

    Win8.1 对应 .NET Framework V4.5.1

    Win8   对应 V4.5

    2.编译mvc项目废了很大的劲,过程中走了很多的弯路,最后我发现,服务器上还是少一些SDK(我目前还没有搞明白这些SDK要从哪里下载)

    我把开发机器上C:Program Files (x86)Microsoft SDKsWindows复制到服务器上,并且要把对应的注册表的项备份了恢复到服务器,最后编译还是报错了,说是找不到aspnet_merge这个东西,找了许久,找到了http://stackoverflow.com/questions/16070886/vs-2012-publish-cant-find-the-valid-aspnetmergepath这篇参考文章,然后把C:Program Files (x86)MSBuildMicrosoftVisualStudiov12.0WebTransform文件夹下面的Microsoft.Web.Publishing.AspNetCompileMerge文件中其中的一个<PropertyGroup>下面新增了下面的代码(注:我用的是4.5的FrameWork,所以是v8.0A这个文件夹,4.5.1应该是v8.1A这个文件夹下面)

     <TargetFrameworkSDKToolsDirectory>C:Program Files (x86)Microsoft SDKsWindowsv8.0AinNETFX 4.0 Tools</TargetFrameworkSDKToolsDirectory>

    它前后的内容如下,大家去找AspnetMergeName去区分就差不多了,服务器上只有记事本,所以无法提供行号。

     <PropertyGroup>
        <GetAspNetMergePathDependsOn>
          GetFrameworkPaths;
        </GetAspNetMergePathDependsOn>
      </PropertyGroup>
      <Target
          Name="GetAspNetMergePath"
          DependsOnTargets="$(GetAspNetMergePathDependsOn)"
          Condition ="'$(GetAspNetMergePath)' != 'false'">
        <PropertyGroup>
          <TargetFrameworkSDKToolsDirectory>C:Program Files (x86)Microsoft SDKsWindowsv8.0AinNETFX 4.0 Tools</TargetFrameworkSDKToolsDirectory>
          <AspnetMergeName>aspnet_merge.exe</AspnetMergeName>
          <AspnetMergePath Condition="Exists('$(TargetFrameworkSDKToolsDirectory)$(AspnetMergeName)')">$(TargetFrameworkSDKToolsDirectory)</AspnetMergePath>
        </PropertyGroup>
        <Error Condition="'$(AspnetMergePath)' == '' Or !Exists($(AspnetMergePath))"
               Text="Can't find the valid AspnetMergePath" />
      </Target>

    3.如果失败原因是缺少某个系统的程序集(比如:system.web.mvc),那么你一定要在本地项目中,检查一下这个程序集的属性中的复制到本地这一项是否为True,不为True,改为True即可。

    4.其实中间还有很多的错误,都是慢慢解决掉的,如果你不介意,可以给服务器上安装一个vs 2012 express for web,也不大,安装包600M左右,能为你省不少事儿。

    5.过程中我遇到一个非常蛋疼的问题,一直提示我找不到system.web.http这个dll,但是我确定我有这个dll,而且是复制到本地=True,但是死活就是编译不过,提示我没有这个dll,少命名空间,到现在都没有搞明白,最后是我安装了vs 2012 express好像就没有了,如果哪位大牛知道为啥,请告诉我,万分感谢。

    时间不早了,为编译通过正在兴奋的我该平静下来去睡觉了。

  • 相关阅读:
    UVA 562 Dividing coins
    who is in front of me 解题报告
    UVA 111 历史考试
    UVA 1045 最长公共子序列
    HDU 1003 解题报告
    ACM2014-04训练计划
    基于邻接表的新顶点的增加
    4004.六度空间理论
    4003.基于Dijsktra算法的最短路径求解
    4002.基于快排思想的查找
  • 原文地址:https://www.cnblogs.com/baiyunchen/p/4724350.html
Copyright © 2011-2022 走看看