Jenkins持续集成 & .NET

 

最近受累于测试环境每次发布都很麻烦,而且我们有多个测试环境,因此专门抽时间做了Jenkins的配置和研究。

折腾了两天终于绿灯以后,先来个截图,BlueOcean UI还是很nice的。

环境搭建

找一个干净点的Build服务器,然后开始持续集成之旅吧!

  1. 安装JDK

我安装了Oracle的JDK之后貌似发送邮件SSL方式有些问题,然而网上的方案貌似不能修复。stack上人家推荐安装openjdk的,我还没来及折腾,不过全新安装的话,推荐openjdk吧。

  1. Jenkins安装

Jenkins官网下载最新的安装包,选择对应的系统。安装都是无脑的包括启动,

  1. 安装.NET编译环境

这里有点弯路!刚开始我也是满怀期待的想尽量的让Build服务器干净一些,所以找的是独立的MSBuild方式,然而后续的过程证明依赖VS编译的我们离不开VS环境!

独立的MSBuild安装包:下载

当然我的推荐是直接安装Visual Studio,由于我们全部用.NET 4.6.1 所以直接安装了 Visual Studio 2015社区版,尽量少些东西!

以上就是基础的Build环境了。

配置持续集成Job

Jenkins的强大之处在于,所有的任务可以被拆分成粒度自由的Job。而Job之间可以通过很多方式来组织。例如正常的持续集成流程是:获取代码->Build->单元测试脚本->发布到相应环境->自动化测试脚本->Email报告。这里的所有步骤可以分拆成单独的job然后再串起来执行,不过这样需要很了解Jenkins,这不是今天要记录的。(其实我也没研究会。。。长路漫漫了)

  1. 新建Job

Job选择"自由风格的软件项目",OK之后General选项卡中默认即可。唯一需要注意的是如果你的多个工程之间有关联,又或者你有很多工程想放在一起,那么我建议配置上"自定义的工作空间"。

如图,我指定了我的工作控件是yqnwork,我创建的所有job都这样设定,那样源代码都会被获取到这里,之后的工作都在一个根目录下进行,将大大方便处理。不然坑起来都是填不完的(我爬出来的!!)

  1. 源码管理

获取代码这里,我选择的是TFS,TFS不是原生支持的。如果选择Git/Subversion应该会更方便一些。

TFS需要插件支持,Team Foundation Server Plug-in,插件安装失败的先看Jenkins插件手动更新章节

安装完插件之后,重新编辑job,配置如下:

CollectionURL是TFS URL + 集合名称!
Project path是相对于集合的项目文件夹路径,必须要$开头,这些配置在VS源码管理中都可以自己看到的。

Credentials也是一个坑!坑了我大半天!务必要新建一个TFS帐号专门用于Jenkins,不然有workspace的冲突风险。我进了一直不能获取到最新版本的坑,google了半天,最后才发现的!
Local workfolder&Woekspace name根据实际填写。

  1. 构建 Build

构建触发器构建环境根据实际需要填写,这里默认即可。

.NET Build需要MSBuild插件的支持,如果根据前面的环境搭建已经安装了VS那么万事大吉!

安装完MSBuild Plugin需要配置下默认的MSBuild路径。在Global Tool Configuration中找到MSBuild节,新增一个配置如下:

注意依然有坑!!! MSBuild的路径需要根据.NET的版本来决定,.NET 4.5以下的貌似引用的是C:\Windows\Microsoft.NET\Framework64\v4.0.30319中的,4.5以上的才是在图中的路径,具体的自己尝试吧~

回到Job的配置:

选择刚才配置的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服务器上开启了代理。

  1. 附加的任务执行

由于我不想把不同环境的配置文件也在这个时候生成,被push到相应的环境(我们分QA、STA环境),所以这里我直接删掉了生成后的文件。选择添加一个windows command的步骤,执行del指令,这里本来可以用环境变量但是作为del指令的参数出了些问题,所以改用绝对路径!

关于这些配置文件我的想法是根据不同环境从TFS中获取不同的文件,这点在将来再讨论实现。

  1. 发布

发布一般都是使用FTP或者SSH,windows的服务器自然选择FTP。由于IIS自带FTP发布功能,因此首先配置IIS FTP发布功能。

先从MS的Microsoft Web Platform Installer中安装 IIS:FTP发布服务&IIS:FTP扩展性。 然后打开IIS之后选择目标网站,右键里会出现添加FTP发布,配置如下:


建议是启用虚拟的主机名,这样便于多个站点的FTP分开维护,当然你可以选择默认的IP,然后修改成指定的website目录的FTP,这样很方便,但是不建议哦!

然后选择"基本"的身份验证,授权给指定的账户,建议单独建立一个Jenkins账户用来发布!这样IIS FTP就配置完成了,测是的话可以用command的ftp命令来测试。

如果使用虚拟主机名配置了FTP,访问时的帐号是 www.demo.com|jenkins!!! 域名 + "|" + 账户名

然后回到Jenkins,添加FTP配置:首先安装插件Publish over FTP。然后到系统设置中添加FTP帐号。依然提醒注意帐号名称。

接着回到Job配置FTP:

Source files这里最好点击问号,看看详细的正则规则,全部文件夹及文件就配置成**/*
我这里由于我每个项目都publish到指定文件夹,因为带了前缀。然后发布到服务器的FTP地址是不需要这些前缀文件夹的,因此需要配置Remove prefix来移除。

'Transfer Set'我研究了下还有更复杂的功能可以配置,自行研究吧。

  1. 备份发布

由于每次发布都会直接删掉原来的发布文件,因此一般发布完成之后都会备份一份文件,这样做也便于回滚哦~!

备份的话我选择执行一段windows command,直接贴Command:

  1. 邮件配置

这个功能不提了,配置很简单,先到系统配置下邮件的发送服务器,然后添加一个步骤Email Notification就可以了。

workspace目录

这里贴一下我的workspace目录:

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:

 
分类: .NET,DevOps

Jenkins持续集成的更多相关文章

  1. python_java_selenium_ jenkins持续集成Firfox_chrome浏览器不显示的解决方法?

    python_java_selenium_ jenkins持续集成Firfox_chrome浏览器不显示的解决方法: 原因:因为jenkins是用windows installer 安装成 windo ...

  2. jenkins持续集成源码管理选项为None,构建失败找不到git.exe解决办法

    我的jenkins版本为Jenkins ver. 2.19.1 1.源码管理选项只有None的解决办法: 在插件管理中心,搜索对应的源码管理插件这里以git为例,搜索git plugin点击右下角的安 ...

  3. 【转】jenkins持续集成配置

    搭建jenkins持续集成服务器 1.jenkins简介 Jenkins,前身为Hudson,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,包括: 持续的软件版本发布/测试项目. 监控 ...

  4. Jenkins持续集成相关文章整理

    构建iOS持续集成平台(一)——自动化构建和依赖管理 构建iOS持续集成平台(二)——测试框架 构建iOS持续集成平台(三)——CI服务器与自动化部署 使用Jenkins搭建iOS开发的CI服务器 一 ...

  5. Docker+Jenkins持续集成环境(4):使用etcd+confd实现容器服务注册与发现

    前面我们已经通过jenkins+docker搭建了基本的持续集成环境,实现了服务的自动构建和部署,但是,我们遇到一个问题,jenkins构建出来的镜像部署后,需要通过ip:port去访问,有什么更好的 ...

  6. Docker+Jenkins持续集成环境(5): android构建与apk发布

    项目组除了常规的java项目,还有不少android项目,如何使用jenkins来实现自动构建呢?本文会介绍安卓项目通过jenkins构建的方法,并设计开发一个类似蒲公英的app托管平台. andro ...

  7. windows部署jenkins持续集成maven测试项目不能访问测试报告

    买了一台阿里云的服务器用于练习maven test项目,系统版本wiondows server 2012,将jenkins war包部署在Tomcat服务器上,项目构建后,生成的报告在C:\Windo ...

  8. Linux-GitLab+Jenkins持续集成+自动化部署

    GitLab+Jenkins持续集成+自动化部署 什么是持续集成? (1)Continuous integration (CI) 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个 ...

  9. 行为驱动:Cucumber + Selenium + Java(二) - extentreports 测试报告+jenkins持续集成

    1.extentreports 测试报告 pom文件 <dependency> <groupId>com.vimalselvam</groupId> <art ...

随机推荐

  1. iOS 简单动画 序列帧动画

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ NSLog(@"旭宝爱吃 ...

  2. 怎么样使用yum来安装、卸载jdk

    安装好的CentOS会自带OpenJdk,用命令 java -version ,会有下面的信息: java version "1.6.0"OpenJDK  Runtime Envi ...

  3. 正则表达式 exec 获取字符串中的汉字

    要求:仅获取attr中的 “编辑发起状态的执行人表单” ,路径C:\fakepath\是不固定的,可以是C:\fakepath\hhh\hhhh\ 解决: var attr = C:\fakepath ...

  4. callback的实现

    Callback.h 继承层次 CallBack实现类 基类 第一层子类 第二层子类 第三层子类 SimpleRefCount CallbackImplBase CallbackImpl Functo ...

  5. 服务器磁盘扩展卷时遭遇“There is not enough space available on the disk(s) to complete this operation.”错误

    在ESX VM的一台服务器由于磁盘空间告警,打算决定给E盘扩展空间,增加20G的空间,在操作过程遭遇了Expanding Disk Volume gives error "There is ...

  6. MySQL数据库出现The server quit without updating PID file.

    一.服务器环境 操作系统:CentOS-6.4 服务器环境:集成环境LNMP1.0 二.步骤重现 1.安装LNMP1.0,具体操作方法见这里,安装成功: 2.因个人需求,现将MySQL数据库存放在/d ...

  7. SQL Server 用链接服务器 同步MySQL

    --测试环境SQL 2014 在MySql环境: use test ; Create Table Demo(ID int,Name varchar(50)) 在控制面板—管理工具—数据源(ODBC)— ...

  8. x01.FileProcessor: 文件处理

    姚贝娜落选,意味着好声音失败.“我们在一起”的精彩亮相,正如同她的歌声,愈唱愈高,直入云霄. 文件处理,无外乎加解密,加解压,分割合并.本着“快舟"精神,花了两天时间,写了个小程序,基本能满 ...

  9. [转载]python脚本删除一定时间以外的文件

    import os; import sys; import time; class DeleteLog: def __init__(self,filename,days): self.filename ...

  10. JavaWeb学习----Cookie实现记住密码的功能

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...