Jenkins持续集成 & .NET
2016-12-19 18:30
162 查看
最近受累于测试环境每次发布都很麻烦,而且我们有多个测试环境,因此专门抽时间做了Jenkins的配置和研究。
折腾了两天终于绿灯以后,先来个截图,BlueOcean UI还是很nice的。
![](https://images2015.cnblogs.com/blog/452359/201612/452359-20161219164407728-1742033163.png)
安装JDK
我安装了Oracle的JDK之后貌似发送邮件SSL方式有些问题,然而网上的方案貌似不能修复。stack上人家推荐安装openjdk的,我还没来及折腾,不过全新安装的话,推荐openjdk吧。
Jenkins安装
Jenkins官网下载最新的安装包,选择对应的系统。安装都是无脑的包括启动,
安装.NET编译环境
这里有点弯路!刚开始我也是满怀期待的想尽量的让Build服务器干净一些,所以找的是独立的
独立的
当然我的推荐是直接安装
以上就是基础的Build环境了。
新建Job
Job选择"自由风格的软件项目",OK之后General选项卡中默认即可。唯一需要注意的是如果你的多个工程之间有关联,又或者你有很多工程想放在一起,那么我建议配置上"自定义的工作空间"。
![](https://images2015.cnblogs.com/blog/452359/201612/452359-20161219170936400-1531741359.png)
如图,我指定了我的工作控件是yqnwork,我创建的所有job都这样设定,那样源代码都会被获取到这里,之后的工作都在一个根目录下进行,将大大方便处理。不然坑起来都是填不完的(我爬出来的!!)
源码管理
获取代码这里,我选择的是TFS,TFS不是原生支持的。如果选择Git/Subversion应该会更方便一些。
TFS需要插件支持,Team Foundation Server Plug-in,插件安装失败的先看Jenkins插件手动更新章节
安装完插件之后,重新编辑job,配置如下:
![](https://images2015.cnblogs.com/blog/452359/201612/452359-20161219173145822-1291970084.png)
构建 Build
.NET Build需要
安装完
![](https://images2015.cnblogs.com/blog/452359/201612/452359-20161219173810525-1665139393.png)
注意依然有坑!!! MSBuild的路径需要根据.NET的版本来决定,.NET 4.5以下的貌似引用的是
回到Job的配置:
![](https://images2015.cnblogs.com/blog/452359/201612/452359-20161219174112822-1069930723.png)
选择刚才配置的MSBuild,注意我这里是直接发布Asp.NET MVC项目,所以我Build File的目标是csproj。如果是要编译整个工程,请选择对应的sln。
编译参数根据需要配置。
其中需要说明的是,如果是发布那么就按照我这里来。
这里我遇到一个坑,由于nuget版本太低导致dll获取错误编译失败。手动升级了工程中.nuget目录下的nuget.exe。(打到这里vs code死了。。。没保存。。。)
另外Nuget由于墙的问题很卡啊,我还手动在Build服务器上开启了代理。
附加的任务执行
由于我不想把不同环境的配置文件也在这个时候生成,被push到相应的环境(我们分QA、STA环境),所以这里我直接删掉了生成后的文件。选择添加一个windows command的步骤,执行del指令,这里本来可以用环境变量但是作为del指令的参数出了些问题,所以改用绝对路径!
![](https://images2015.cnblogs.com/blog/452359/201612/452359-20161219175200885-402850569.png)
关于这些配置文件我的想法是根据不同环境从TFS中获取不同的文件,这点在将来再讨论实现。
发布
发布一般都是使用FTP或者SSH,windows的服务器自然选择FTP。由于IIS自带FTP发布功能,因此首先配置
先从MS的
![](https://images2015.cnblogs.com/blog/452359/201612/452359-20161219180012775-1515509290.png)
建议是启用虚拟的主机名,这样便于多个站点的FTP分开维护,当然你可以选择默认的IP,然后修改成指定的website目录的FTP,这样很方便,但是不建议哦!
然后选择"基本"的身份验证,授权给指定的账户,建议单独建立一个Jenkins账户用来发布!这样
如果使用虚拟主机名配置了FTP,访问时的帐号是 www.demo.com|jenkins!!! 域名 + "|" + 账户名
然后回到Jenkins,添加FTP配置:首先安装插件Publish over FTP。然后到系统设置中添加FTP帐号。依然提醒注意帐号名称。
接着回到Job配置FTP:
![](https://images2015.cnblogs.com/blog/452359/201612/452359-20161219181006994-1228612616.png)
我这里由于我每个项目都publish到指定文件夹,因为带了前缀。然后发布到服务器的FTP地址是不需要这些前缀文件夹的,因此需要配置
'Transfer Set'我研究了下还有更复杂的功能可以配置,自行研究吧。
备份发布
由于每次发布都会直接删掉原来的发布文件,因此一般发布完成之后都会备份一份文件,这样做也便于回滚哦~!
备份的话我选择执行一段
![](https://images2015.cnblogs.com/blog/452359/201612/452359-20161219181610447-1136283729.png)
邮件配置
这个功能不提了,配置很简单,先到系统配置下邮件的发送服务器,然后添加一个步骤
![](https://images2015.cnblogs.com/blog/452359/201612/452359-20161219174628525-478113075.png)
bak:我用来存放备份文件,一会再说。
CodeV2:是对应的TFS上的代码路径
publish:对应各个项目的发布文件地址。上边提到的
各个文件夹下,我也是按照项目划分 Demo1/Demo2/Demo3...
下载地址是:http://updates.jenkins-ci.org/download/plugins/
这个列表里有所有插件的安装包,先找到wiki看下插件的依赖,下载的时候把依赖也都下载一遍。这里有个坑是
下载了文件之后,保存到
重启指令是: http://你的Jekins地址/restart
另外文章开头和结尾的截图都是Jenkins的BlueOcean插件,这是它的新UI,老的真的有点丑啊。
这个插件不成功就直接手动吧,安装了好多回,累!
最后来一张success:
折腾了两天终于绿灯以后,先来个截图,BlueOcean UI还是很nice的。
![](https://images2015.cnblogs.com/blog/452359/201612/452359-20161219164407728-1742033163.png)
环境搭建
找一个干净点的Build服务器,然后开始持续集成之旅吧!安装JDK
我安装了Oracle的JDK之后貌似发送邮件SSL方式有些问题,然而网上的方案貌似不能修复。stack上人家推荐安装openjdk的,我还没来及折腾,不过全新安装的话,推荐openjdk吧。
Jenkins安装
Jenkins官网下载最新的安装包,选择对应的系统。安装都是无脑的包括启动,
安装.NET编译环境
这里有点弯路!刚开始我也是满怀期待的想尽量的让Build服务器干净一些,所以找的是独立的
MSBuild方式,然而后续的过程证明依赖
VS编译的我们离不开
VS环境!
独立的
MSBuild安装包:下载
当然我的推荐是直接安装
Visual Studio,由于我们全部用
.NET 4.6.1所以直接安装了
Visual Studio 2015社区版,尽量少些东西!
以上就是基础的Build环境了。
配置持续集成Job
Jenkins的强大之处在于,所有的任务可以被拆分成粒度自由的Job。而Job之间可以通过很多方式来组织。例如正常的持续集成流程是:获取代码->Build->单元测试脚本->发布到相应环境->自动化测试脚本->Email报告。这里的所有步骤可以分拆成单独的job然后再串起来执行,不过这样需要很了解Jenkins,这不是今天要记录的。(其实我也没研究会。。。长路漫漫了)新建Job
Job选择"自由风格的软件项目",OK之后General选项卡中默认即可。唯一需要注意的是如果你的多个工程之间有关联,又或者你有很多工程想放在一起,那么我建议配置上"自定义的工作空间"。
![](https://images2015.cnblogs.com/blog/452359/201612/452359-20161219170936400-1531741359.png)
如图,我指定了我的工作控件是yqnwork,我创建的所有job都这样设定,那样源代码都会被获取到这里,之后的工作都在一个根目录下进行,将大大方便处理。不然坑起来都是填不完的(我爬出来的!!)
源码管理
获取代码这里,我选择的是TFS,TFS不是原生支持的。如果选择Git/Subversion应该会更方便一些。
TFS需要插件支持,Team Foundation Server Plug-in,插件安装失败的先看Jenkins插件手动更新章节
安装完插件之后,重新编辑job,配置如下:
![](https://images2015.cnblogs.com/blog/452359/201612/452359-20161219173145822-1291970084.png)
CollectionURL是TFS URL + 集合名称!
Project path是相对于集合的项目文件夹路径,必须要
$开头,这些配置在VS源码管理中都可以自己看到的。
Credentials也是一个坑!坑了我大半天!务必要新建一个TFS帐号专门用于Jenkins,不然有workspace的冲突风险。我进了一直不能获取到最新版本的坑,google了半天,最后才发现的!
Local workfolder&
Woekspace name根据实际填写。
构建 Build
构建触发器和
构建环境根据实际需要填写,这里默认即可。
.NET Build需要
MSBuild插件的支持,如果根据前面的环境搭建已经安装了VS那么万事大吉!
安装完
MSBuild Plugin需要配置下默认的MSBuild路径。在
Global Tool Configuration中找到
MSBuild节,新增一个配置如下:
![](https://images2015.cnblogs.com/blog/452359/201612/452359-20161219173810525-1665139393.png)
注意依然有坑!!! MSBuild的路径需要根据.NET的版本来决定,.NET 4.5以下的貌似引用的是
C:\Windows\Microsoft.NET\Framework64\v4.0.30319中的,4.5以上的才是在图中的路径,具体的自己尝试吧~
回到Job的配置:
![](https://images2015.cnblogs.com/blog/452359/201612/452359-20161219174112822-1069930723.png)
选择刚才配置的MSBuild,注意我这里是直接发布Asp.NET MVC项目,所以我Build File的目标是csproj。如果是要编译整个工程,请选择对应的sln。
编译参数根据需要配置。
其中需要说明的是,如果是发布那么就按照我这里来。
publishProfile是发布的配置文件,这个建议在VS中手动创建一个配置针对Jenkins的发布配置,选择发布对象为文件系统,目录是重点!!!目录请选择Build服务器上对应的目录,建议还是发布到workspace中。workspace的目录可以参看我的workspace目录
VisualStudioVersion请选择对应的VS版本!!
这里我遇到一个坑,由于nuget版本太低导致dll获取错误编译失败。手动升级了工程中.nuget目录下的nuget.exe。(打到这里vs code死了。。。没保存。。。)
另外Nuget由于墙的问题很卡啊,我还手动在Build服务器上开启了代理。
附加的任务执行
由于我不想把不同环境的配置文件也在这个时候生成,被push到相应的环境(我们分QA、STA环境),所以这里我直接删掉了生成后的文件。选择添加一个windows command的步骤,执行del指令,这里本来可以用环境变量但是作为del指令的参数出了些问题,所以改用绝对路径!
![](https://images2015.cnblogs.com/blog/452359/201612/452359-20161219175200885-402850569.png)
关于这些配置文件我的想法是根据不同环境从TFS中获取不同的文件,这点在将来再讨论实现。
发布
发布一般都是使用FTP或者SSH,windows的服务器自然选择FTP。由于IIS自带FTP发布功能,因此首先配置
IIS FTP发布功能。
先从MS的
Microsoft Web Platform Installer中安装
IIS:FTP发布服务&
IIS:FTP扩展性。 然后打开IIS之后选择目标网站,右键里会出现
添加FTP发布,配置如下:
![](https://images2015.cnblogs.com/blog/452359/201612/452359-20161219180012775-1515509290.png)
建议是启用虚拟的主机名,这样便于多个站点的FTP分开维护,当然你可以选择默认的IP,然后修改成指定的website目录的FTP,这样很方便,但是不建议哦!
然后选择"基本"的身份验证,授权给指定的账户,建议单独建立一个Jenkins账户用来发布!这样
IIS FTP就配置完成了,测是的话可以用command的ftp命令来测试。
如果使用虚拟主机名配置了FTP,访问时的帐号是 www.demo.com|jenkins!!! 域名 + "|" + 账户名
然后回到Jenkins,添加FTP配置:首先安装插件Publish over FTP。然后到系统设置中添加FTP帐号。依然提醒注意帐号名称。
接着回到Job配置FTP:
![](https://images2015.cnblogs.com/blog/452359/201612/452359-20161219181006994-1228612616.png)
Source files这里最好点击问号,看看详细的正则规则,全部文件夹及文件就配置成
**/*。
我这里由于我每个项目都publish到指定文件夹,因为带了前缀。然后发布到服务器的FTP地址是不需要这些前缀文件夹的,因此需要配置
Remove prefix来移除。
'Transfer Set'我研究了下还有更复杂的功能可以配置,自行研究吧。
备份发布
由于每次发布都会直接删掉原来的发布文件,因此一般发布完成之后都会备份一份文件,这样做也便于回滚哦~!
备份的话我选择执行一段
windows command,直接贴Command:
![](https://images2015.cnblogs.com/blog/452359/201612/452359-20161219181610447-1136283729.png)
邮件配置
这个功能不提了,配置很简单,先到系统配置下邮件的发送服务器,然后添加一个步骤
Email Notification就可以了。
workspace目录
这里贴一下我的workspace目录:![](https://images2015.cnblogs.com/blog/452359/201612/452359-20161219174628525-478113075.png)
bak:我用来存放备份文件,一会再说。
CodeV2:是对应的TFS上的代码路径
publish:对应各个项目的发布文件地址。上边提到的
publishProfile中的目标路径就是这个。
各个文件夹下,我也是按照项目划分 Demo1/Demo2/Demo3...
Jenkins插件手动更新
Jenkins可能受墙的影响更新起来出错概率非常高,所以建议出错了直接手动下载。下载地址是:http://updates.jenkins-ci.org/download/plugins/
这个列表里有所有插件的安装包,先找到wiki看下插件的依赖,下载的时候把依赖也都下载一遍。这里有个坑是
permalink to the latest这个链接下载来的有时候不是最新的,所以最好是手动点最新的!
下载了文件之后,保存到
Jekins目录下的
plugins,然后重启
Jenkins即可。
重启指令是: http://你的Jekins地址/restart
另外文章开头和结尾的截图都是Jenkins的BlueOcean插件,这是它的新UI,老的真的有点丑啊。
这个插件不成功就直接手动吧,安装了好多回,累!
总结
以上就是整个Jenkins自动化构建的研究,建议每个步骤单独分解成job配置run成功之后再整合,否则每次跑一遍狠费时。这也是反复强调的一个workspace,合理文件夹存放的好处之一,否则都没法单独拆分成job来测试。文章中有任何问题,欢迎探讨指正。最后来一张success:
![](https://images2015.cnblogs.com/blog/452359/201612/452359-20161219182501650-1505314355.png)
相关文章推荐
- Jenkins+maven+git+sonar 系统持续集成&代码单測管理
- ASP.NET Core+Docker+Jenkins实现持续集成的完整实例
- Jenkins持续集成 & .NET cmd创建日期时间文件夹
- Jenkins+SVN+.NET+Slave项目持续集成实战
- 【转载】Maven安装配置+ GIt&SVN + Jenkins详细配置 软件项目管理 持续集成实验
- 简单介绍Jenkins&持续集成
- ASP.NET Core + Docker + Jenkins + gogs + CentOS 从零开始搭建持续集成
- Net 项目构建基于Jenkins + Github + Mono 的持续集成环境
- Jenkins+maven+git+sonar 系统持续集成&代码单测管理
- ASP.NET 4.0七大新特性之"集成jQuery"
- CruiseControl.Net持续集成平台搭建总结
- 基于 Jenkins 快速搭建持续集成环境
- 构建基于Jenkins + Github的持续集成环境
- 基于 Jenkins 快速搭建持续集成环境
- 持续集成环境搭建(hudson+ant+JUNIT+EMMA)<1>
- 转载:CruiseControl.Net持续集成平台搭建总结
- 持续集成工具CruiseControl.net对软件项目过程的改善
- 持续集成学习笔记-入门篇(9)团队管理:成员&权限设置、成果追踪与结果通知
- CruiseControl.Net持续集成实战指南
- 敏捷开发,持续集成 fxcop 在 CruiseControl.NET中的使用