原文地址:https://www.yuque.com/wujisheng/gx7677/eb4l5q

 

什么是Jenkins?

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

什么是MSbuild?

MSBuild 是 Microsoft 和 Visual Studio的生成系统。它不仅仅是一个构造工具,应该称之为拥有相当强大扩展能力的自动化平台。MSBuild平台的主要涉及到三部分:执行引擎、构造工程、任务。其中最核心的就是执行引擎,它包括定义构造工程的规范,解释构造工程,执行“构造动作”;构造工程是用来描述构造任务的,大多数情况下我们使用MSBuild就是遵循规范,编写一个构造工程;MSBuild引擎执行的每一个“构造动作”就是通过任务实现的,任务就是MSBuild的扩展机制,通过编写新的任务就能够不断扩充MSBuild的执行能力。所以这三部分分别代表了引擎、脚本和扩展能力。

PS. Visual Studio最终还是需要通过MSbuild去编译项目发布,只是IDE背后去完成了这些工作而已,而通过Jenkins我们需要去使用命令去调用MSbuild编译发布。

一、Jenkins的安装

Jenkins有windows版本也有linux版本,由于我们项目都是基于.net freamwork进行开发,而jenkins构建需要编译.net程序,为了更方便的编译,因此选择安装windows版本。

1、下载

打开官网:https://jenkins.io/download/

去到DownLoad页面即可,选择windows下载。当然也可以选择 java 的war包去部署。安装tomcat服务器,将war包放进去。

2、安装

下载完成后,可按照提示进行安装即可。(windows下傻瓜式安装,注意Jenkins是java开发,因此需先安装对应jdk版本,目前下载最新的JDK,然后配置JDK环境变量即可)

3、配置

安装完成后会自动安装并启动一个windows服务,名为Jenkins,打开浏览器localhost:8080(Jenkins默认端口号为8080,如需修改可打开Jenkins安装目录找到Jenkins.xml修改其中端口,然后打开服务重启Jenkins服务即可)之后按照提示进行配置即可!配置完成后看到如下界面代表安装成功!

windows安装包,整个安装过程非常简单,基本上是傻瓜式按照提示操作即可,期间并未遇到问题,基本上10分钟左右就搞定了!接下来介绍.NET下Jenkins的持续集成与自动化部署!

二、通过SVN获取源码

1、安装插件

首先要做的就是获取到我们的源代码。由于我们公司使用的源代码管理工具主要是SVN因此在这里主要介绍SVN的方式方法。根据度娘的指引,我们需要安装一个SVN的插件:Subversion Plug-in(如果:安装Jenkins时选择的安装推荐的插件,则Jenkins会直接给安装上这个插件,无需自己安装)。

在系统管理--插件管理--已安装中我们可以找到这个插件

2、SVN凭证的全局配置

SVN拉取都是需要账号的,所以我们先去首页的凭据里去添加SVN的全局账号,按照说明输入 保存即可。

三、构建项目

选择新建一个自由风格的软件项目,起个名字,进入到项目配置后,找到源代码管理选项:

主要有以下几个选项需要配置:

  • Repository URL:要获取的SVN的路径,如:https://127.0.0.1:9666/svn/HS.Mall/SoureCode/Trunk/Test

  • Credentials:配置SVN用户名和密码

  • Ignore externals:是否忽略SVN外部引用

  • Additional Credentials:当你的SVN版本库使用外部引用关联其它版本库是这个就很重要了

    Realm:填写SVN服务器的地址 <https://127.0.0.1:9666> VisualSVN Server //(注意这个格式)

Credentials: 填写SVN用户名和密码信息

其它一些选项直接按照默认值就可以,关于每一项的详细介绍可以点击后面的小?号查看。

配置完成后点击保存后,构建该项目查看结果。若能够将源代码更新至Jenkins的工作空间内,则代表配置成功!

Jenkins的工作空间目录是安装目录下的 workspace 目录,每新建一个工程,就会产生一个同命名的文件夹。

PS、这里 .net 项目 我们全部是放在一个解决方案下,所以即使我们是发布解决方案中的一个项目,都需要把整个解决方案的源码拉取下来。至于只拉取一个项目的方案,可以自己去深入研究一下。

四、通过MSBuild编译应用程序

1、安装插件与环境

 编译.NET应用程序可通过微软提供的MSBuild工具,先安装插件:MSBuild。(注意:Jenkins服务器需安装MSBuild,建议在Jenkins上安装VS开发工具,可以在构建出问题的时候打开VS调试,省去很多不必要的麻烦,同样是在插件管理中安装)。

2、全局配置

插件安装完毕后,进入系统管理->全局工具配置(ConfigureTools)找到MSBuild配置选项:

如图我们配置了两个MSbuild,供全局使用,一般使用X86即可。

name:自定义名称

Path to MSBuild:MSBuild.exe程序的物理路径

此处MSBuild.exe必须与程序所使用freamwork版本相对应,此处我在这就遇到了一个大坑,一开始随便找个一个MSBuild工具,没想到根本编译不了。建议直接指向visual studio安装目录内的MSBuild.exe,可以避免很多问题。如VS2017在:Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin路径内。

3、配置项目

首先我们需要使用 nuget.exe 包管理工具,执行这样一条命令。用来进行 NuGet 包还原

nuget.exe 可自行下载,放在任意的目录

D:\Tools\CI\nuget.exe restore .\SnService.sln

 打开我们之前创建的项目,找到构建选项->增加构建步骤->Build a Visual Studio project or solution using MSBuild

  • MSBuild Version:这里是MSBuild的版本,前面我们已经全局配置好了,选择即可

  • MSBild Build File: ./ShiNiu.PolicyApi/ShiNiu.PolicyApi.csproj --目标项目或解决方案文件的路径+文件名

  • Command Line Arguments:MSBuild 参数

/t:Rebuild --重新生成

/P:Configuration=Release --Release 生成模式(也可Debug)

/p:VisualStudioVersion=14.0 --指定子工具集版本,VS2015对应的是14.0

/p:TargetFrameworkVersion=v4.5.2 --Framework的版本

/p:DeployOnBuild=True --表示部署加编译

PublishProfile=policyapi.test.com.pubxml --使用 xxxx.pubxml 发布文件来发布项目

/p:WebProjectOutputDir=F:\Mytest\API\policyapi.test.com --发布的目标目录

/p:OutputPath=F:\Mytest\API\policyapi.test.com\bin --发布的目标目录的bin目录

如果后面还要执行某些操作可继续增加构建,由于发布时,很多文件无法发布至目标目录,这是可以通过更改配置文件去达到目的,但是由于不是开发人员,所以尽可能不去更改项目的配置,这边后续又增加了python脚本去复制文件至目标目录的构建。总之不管是更改配置也好,命令也好,脚本也好,最终的目的是将编译好的文件发布至目标点。

如上,我不管他有没有这几个文件夹,有就覆盖一次,没有就创建覆盖一次。

至此,保存后,项目就构建完成。

什么?每次都要点一次发布?不不不,持续集成怎么能这么傻呢。

五、Jenkins构建触发器

可以在工程中找到构建触发器。

构建触发器以: * * * * * (五颗星表示)

  • 第一个*表示分钟,取值0~59

  • 第二个*表示小时,取值0~23

  • 第三个*表示一个月的第几天,取值1~31

  • 第四个*表示第几月,取值1~12

  • 第五个*表示一周中的第几天,取值0~7,其中0和7代表的都是周日

下面列举一些常见的参数:

每隔5分钟构建一次

H/5 * * * *

每两小时构建一次

H H/2 * * *

每天中午下班前定时构建一次

0 12 * * *

每天下午下班前定时构建一次

0 18 * * *

表示每周7天从9:10点到20:10每隔一小时构建一次

10 9-20 * * 1-7

以上就是定时构建触发器,到了设置的时间,自动拉取代码,编译,发布。

另外可以看到还有一个轮询SCM,此种触发器,是设置时间去轮询仓库,如果有代码变更,立即执行构建。这里就不展开讲了,暂时用不到那么频繁的构建。(定时构建和轮询SCM使用互不冲突,具体如何组合,需要根据项目情况合理配置)

如上,就是基于Jenkins从部署到简单使用的介绍。

发布至服务器的方法,类同,不管是通过复制、FTP、还是其他方式,都是将编译好的程序,发布出去。FTP应做一些配置,这里不做讨论,用到的时候再研究。

问题:

1、比如拉取SVN源码到工作空间少了文件,会构建失败,所以会将文件复制过去,这样就可以构建成功。

2、Jenkins端口修改:

修改XML 中的端口号

重启Jenkins服务

修改对应的系统设置,不然报反向代理错误

3、关于SVN拉取报错,在服务中,使用账户系统,admin账号,然后重启Jenkins,解决问题

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐