持续集成是个简单重复劳动,人来操作费时费力,使用自动化构建工具完成是最好不过的了。最终可以实现的一个效果是,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 SDKs\Windows复制到服务器上,并且要把对应的注册表的项备份了恢复到服务器,最后编译还是报错了,说是找不到aspnet_merge这个东西,找了许久,找到了http://stackoverflow.com/questions/16070886/vs-2012-publish-cant-find-the-valid-aspnetmergepath这篇参考文章,然后把C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Web\Transform文件夹下面的Microsoft.Web.Publishing.AspNetCompileMerge文件中其中的一个<PropertyGroup>下面新增了下面的代码(注:我用的是4.5的FrameWork,所以是v8.0A这个文件夹,4.5.1应该是v8.1A这个文件夹下面)

 <TargetFrameworkSDKToolsDirectory>C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 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 SDKs\Windows\v8.0A\bin\NETFX 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好像就没有了,如果哪位大牛知道为啥,请告诉我,万分感谢。

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

使用jenkins配置.net mvc5网站自动构建全过程记录的更多相关文章

  1. Jenkins持续集成(下)-Jenkins部署Asp.Net网站自动发布

    环境:Windows 2008 R2.Jenkins2.235.1.Visual Studio 2017: 概要 前面写过一篇文章,<自动发布-asp.net自动发布.IIS站点自动发布(集成S ...

  2. 使用jenkins配置.net mvc网站进行持续集成二

    上一篇使用jenkins配置.net mvc网站进行持续集成一只是简单介绍了jenkins构建站点到本地服务器,这一篇,就来讲解如何部署站点到指定的服务器上面. 1.IIS远程发布配置 1.在服务器管 ...

  3. jenkins配置.net mvc网站

    jenkins配置.net mvc网站 上一篇使用jenkins配置.net mvc网站进行持续集成一只是简单介绍了jenkins构建站点到本地服务器,这一篇,就来讲解如何部署站点到指定的服务器上面. ...

  4. jenkins的 git多分支自动构建

    一.先做好jenkins和gitlab的webhook自动构建 二.选择哪个分支(我这是test分支) 三.选择build Triggers 四.过滤test分支 五.保存即可

  5. 使用Jenkins配置Git+Maven的自动化构建

    Jenkins是一个开源的持续集成工具,应用Jenkins搭建持续集成环境,可以进行自动构建.自动编译和部署,非常方便. 在服务器比较少的情况下,Jenkins的优势并不明显,但是随着项目发展,服务器 ...

  6. jenkins+maven+git+tomcat+salt自动构建

    jenkins 安装步骤 环境: centos7,jdk1.8.0,jenkins2.165,maven3.5.2 一. 安装配置java环境   JDK1.8下载地址:http://www.orac ...

  7. [CentOS]使用Jenkins配置Git+Maven的自动化构建

    背景 最近安装Jenkins,参照网上的各种资料进行尝试,折腾了好久,但是查找了这么多资料,相似度在90%以上!!!,相同的安装过程,测试了几台机器,未曾成功,不得不感慨自己能力有限,最终慢慢摸索,形 ...

  8. 使用jenkins配置.net mvc网站进行持续集成三

    前两篇讲解了Jenkins的配置和VS远程发布,现在还有一个问题,VS项目远程发布的时候,配置的是覆盖所有文件重生成的,而通常类似于配置文件这种东西,在本地开发环境和测试环境是不一样的.所以我们通常需 ...

  9. 使用Jenkins进行android项目的自动构建(3)

    建立Jenkins项目 1. “新增作业”->填写作业名称->选择“建置 Maven 2 或 3 專案”->OK.新增成功后会进入“組態設定”,暂时先保留默认值,稍后再进行设定. 2 ...

随机推荐

  1. 互联网轻量级框架SSM-查缺补漏第三天

    简言:平安夜,继续慵懒的学习.我真的是不喜欢学习··· 第三章认识MyBatis核心组件 3.1 持久层的概念和MyBatis的特点 持久层:可以将业务数据存储带磁盘,具有长期存储的能力.一般执行持久 ...

  2. 二 Channel

    Java NIO的通道类似流,但又有些不同 既可以从通道中读取数据,也可以写数据到通道.但是流的读写通常是单向的 通道可以异步读写 通道中的数据通常总是要先读到一个Buffer,或者总是从Buffer ...

  3. About custom Theme and Style

    For android system, of course you can custom your own style and theme, but you can't break compatibi ...

  4. 多版本python如何切换

    一.在命令行中 通过py -x 二.在py文件中 头部字段添加 #!python2 或 #!python3 即可调用相应版本解释器 命令行调用python:py helloworld.py

  5. Goodbye Bingshen

    在uoj上打的第二场比赛......还凑合(卧槽C题80分没了QAQ 第一次接触交互题还挺好玩的哈哈 可能是人比较多吧.....rating涨了不少...... 现在我rating正好比lrd高1哈哈 ...

  6. .NET开源工作流RoadFlow-流程运行-工作委托

    如果某一个人某一段时间不在单位,则可以将自己的工作委托给他人代为处理. 在 流程处理-->工作委托 中可以管理自己的委托,管理员也可以在 流程管理-->工作委托 中管理所有人的委托: 委托 ...

  7. 常见的浏览器兼容性问题与解决方案——CSS篇

    1.不同的浏览器的标签默认的外补丁和内补丁不同 问题症状:随便写几个标签,不加样式控制的情况下,各自的margin和padding差异较大. 碰到频率:100% 解决方案:初始化CSS的默认样式,*{ ...

  8. Java—IO流 字符流

    java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码). 文件是byte byte byte ... 的数据序列. 文本文件是文本(char)序列按照某种编码方案(uf ...

  9. Math类中常用方法

    public static int abs(int a) , public static long abs(long a), public static float abs(float a),  pu ...

  10. vsphere的P2V工具做的物理机迁移到虚拟机报错out of memory

     vsphere的P2V工具做的物理机迁移到虚拟机  迁移成功,但是启动报错  进入rescue模式后发现是sysctl.conf文件的参数设大了因为虚拟机的内存没有物理机内存大 kernel.shm ...