[独孤九剑]持续集成实践(二)– MSBuild语法入门

遵照体系小说包含:

遵守连串随笔包含:

[独孤九剑]穿梭集成实践(一)-
引子

[独孤九剑]绵绵集成实践(二)–
MSBuild语法入门

[独孤九剑]持续集成实践(三)-
Jenkins安装及配置(Jenkins+MSBuild+GitHub)

[独孤九剑]不断集成实践(一)-
引子

[独孤九剑]穿梭集成实践(二)–
MSBuild语法入门

[独孤九剑]连集成实践(三)-
Jenkins安装及配置(Jenkins+MSBuild+GitHub)

 

 

本文是转发“据此MSBuild和Jenkins搭建持续集成环境”,由于该文内容非常显著,我便不再画蛇添足的重写一首了。只是内会掺杂一些个体的喻,如若各位看官介意,请走至原文。

1、前言                                                                                                                           

正文是对准用“MSBuild和Jenkins搭建持续集成环境(2)”的解读,原文中部分装置并无克拿到作者所讲述的结果,由此下文会结合实际部署对原文稍作改。

先是立立刻去,Jenkins像是一个专为Java项目准备的持续集成工具:有否Maven项目规划之job,有成百上千为Java项目提供的默认插件,更不要说那多少个用Java写的插件了。

而Jenkins其实是一个非常灵活的工具,它可以结合各个本子管理网以及构建工具,用来构建任何类型的色。在当下篇稿子中,我们谋面采纳她的八面玲珑,从Mercurial中pull代码,用MSbuild构建项目。首先,我们得下载并安装Jenkins,然后安装Git和MSBuild插件。【原文中行使的凡Mercurial,由于自家平常使用Git,由此此汇合转移为对Git的布置】

1、开始                                                                                                                       

每当当下篇稿子中,大家会从头初阶,一步步好一个属于我们团结之MSBuild脚本。在她成功之后,我们仅需要一个发令就好去除在此以前的构建产物,构建.NET应用,运行单元测试。前边大家还会面配一个Jenkins
Job,让她自从代码库中革新代码,执行MSBuild脚本。最后还会师配另一个Jenkins
Job,让它们监听第一单Job的结果,当第一步成功将来,它会将相关的构建产物复制出来,放到web服务器里启动运作。

咱之所以一个ASP.NET MVC 3应用做例子,在VS里面成立ASP.NET MVC
3应用并摘“application”模版就举办。大家还要因此一个单元测试项目来飞测试。代码可以在此间下载。【由于自己的机器环境不可能跑通他受的例子,由此我大概的创始了其他一个webForm项目用于测试,假诺您平不能跑起HelloCI这么些连串,并且懒癌严重,要点击这里下载我之代码】

2、配置Jenkins                                                                                                             

官方网站下载安装程序。它的Windows安装包大简单,会将Jenkins安装成Windows服务。Jenkins的默认的拜访路径是“localhost:8080”,请确保8080端口不要给其他应用占用。

图片 1

装收尾后就是弄虚作假插件。请点击“系统管理”链接,然后还点击“插件管理”。

图片 2

在“可用插件”标签页可以查时可是装之插件──你用来一个能上网的环境,才可以看出就无异页的情节。用“过滤框”找到Git
Plugin、GitHub Plugin和
MSBuild插件,点击插件名称前的复选框,举行设置【在拔取安装时,会自行关联有少不了之插件举行设置,很便宜】。

图片 3

卿可以点击“已设置”标签页,来确保及时简单独插件都为设置成功了。

当安过程中,你恐怕会师视指示音讯说Jenkins需要重开才会做到安装,请吃其更开,等重新开完成后再也看“已装”标签页,看看是休是安装成功。

是因为前以GitHub,由此只有待精通一个Code的地点即可,配置好方便。回到“系统管理”这等同页上,点击“系统装置”,找到“Git”这无异于组成部分──如若你寻找不至“Git”的话,就证实Git插件没有装好──点击“Add
Git”按钮之后,你用吃那一个Git实例起个名字(自己用在更加便宜越好);还待输入Git可执行文件的装置路径,这里用的是git.exe文件之四处目录;

图片 4

 

2、你好,MSBuild                                                                                                          

MSBuild是于.NET 2.0丁引入的指向Visual
Studio的构建系统。它可以实施构建脚本,完成各个Task──最要的凡把.NET项目编译成可执行文件或者DLL。从技术角度来说,制作EXE或者DLL的要害工作是由编译器(csc,vbc等等)完成的。MSBuild会从里面调用编译器,并成功其他必要之办事(例如拷贝引用──CopyLocal,执行构建前后的备选跟清理工作等)。

这些干活儿依旧MSBuild执行脚本中的Task完成的。MSBuild脚本就是XML文件,根元素是Project,使用MSBuild自己的命名空间。

MSBuild文件还设发生Target。Target由Task组成,MSBuild运行这多少个Task,完成一个整机的对象。Target中可因为非带有Task,不过拥有的Target都设出名字。

脚来并创立一个“Hello
World”的MSBuild脚本,先确保配置是。我提议用VS来形容,因为它们可供AMDliSense补助,但是用文本编辑器为无所谓,因为只是写个XML文件,AMDliSense的用也无是死挺。先创建一个XML文件,命名吧“basics.msbuild”,这么些扩大名特是只约定而已,好于我们好认出这是独MSBuild脚本,你倒不用非写这样的扩大名。给文件添加一个Project元素作为根元素,把
http://schemas.microsoft.com/developer/msbuild/2003设置成命名空间,如下所示

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>

产同样步,给Project元素添加一个Target元素,起名叫“EchoGreeting”

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="EchoGreeting" />
</Project>

即时便尽了。我们已闹矣一个得以运作的MSBuild脚本。它即使还啥事都并未涉及,但咱得就此它们来评释时环境是匪是好运作MSBuild脚本。

在运转脚本的时光,大家而因而到.NET框架安装路径下之MSBuild可执行文件。打开命令执行,执行“MSBuild
/nologo
/version”命令,看看.NET框架安装路径是休是放手了PATH环境变量里面。假设一切对,你应当能观看屏幕及打印出MSBuild的脚下本。尽管无的话,或者把.NET框架安装路径放到PATH里面去,或者直接用Visual
Studio Command Prompt,它就将该配的都配好了。【我的Path里没有,所以要配置PATH环境变量,机器是Win7
x64之,VS2013,MSBuild.exe文件的Bin目录地点于C:\Program Files
(x86)\MSBuild\12.0\Bin】

登存放刚才杀剧本的目后,以文件名当作参数调用MSBuild,就可以尽脚本了。在自家的机器上得以看来下边的履结果:

C:\>msbuild basics.msbuild

Microsoft (R) Build Engine Version 4.0.30319.1
[Microsoft .NET Framework, Version 4.0.30319.269]
Copyright (C) Microsoft Corporation 2007. All rights reserved.
Build started 8/2/2012 5:59:45 AM.

Build succeeded.

0 Warning(s)
0 Error(s)

Time Elapsed 00:00:00.03

执行完脚本后,MSBuild会首先展现一个启动界面及版权信息(用 /nologo
开关可以隐藏掉它们)。接下来会显得一个起步日,然后就是真的构建过程。因为我们的下论啥还并未涉及,所以构建就径直成了。总结用时为会师彰显在界面及。上边我们来深受EchoGreeting
Target添加一个Task,让脚论真干点事。【以下内容在练是肯定假若注意拼写错误,不要问我为何。。。】

<Target Name="EchoGreeting">
    <Exec Command="echo Hello from MSBuild" />
</Target>

近日EchoGreeting Target有矣一个Exec
Task,它会师执行Command属性中定义的另外命令【Command里之通令应该都是批判处理命令】。再运行一回于剧本,你应该能收看更多音信了。在多数时,MSBuild的输出音信都颇充足,你可以据此
/verbosity 开关来才展现必要音信【使用MSBuild
/help可查询所有命令参数】。但是无论咋样,MSBuild都会师把我们的文字显示到屏幕及。下边还添加一个Target。

<Target Name="EchoDate">
    <Exec Command="echo %25date%25" />
</Target>

这些Target会输出当前几日子。它的吩咐要开的政工虽是“echo
%25date%25”,可是“%”字符在MSBuild中生出与众不同含义,所以这令需要被转义。当遇转义字符的时,“%”前面的十向前制字符会被反成对应的ASCII码。MSBuild只会面履Project元素中之第一只Target。要实践此外Target的时候,需要把/target开关(可简写为
/t)加上Target名称传被MSBuild。你吧足以指定MSBuild执行四只Target,只要用分号分割Target名字就可。

C:\>msbuild basics.msbuild /nologo /verbosity:minimal /t:EchoGreeting;EchoDate
Hello from MSBuild
Thu 08/02/2012

3、创制一个Jenkins Job                                                                                                  

点击Jenkins的logo,回到控制面板上来,然后点击“新建”链接。你谋面视同样组job类型,选拔“构建一个随机风格的软件类”,给它命名吧“CIProjectWebDemo1-RunUnitTests”,点击OK。

图片 5

下同样步是job配置页面。那无异页有许多安排起,而且多数还饱含详细的讲述信息,点击右边的相助图标就可以看到。

图片 6

俺们现只有布置有限有,一是代码库所在地点,二凡是怎么样用MSBuild构建项目。

找到“源码管理”,选用Git。在“Repository
URL”输入框中输入”你协调的GitHub中之代码地址”。然后在Credentials中选用证书【假若没有就创办一个,一向默认就行,最起首自己从不采纳证书,在进行Job时,有时会卡壳于GitHub的通信及,可能与这关于,网上为出说与https协议有关】。最终当Branch中输入你想跟的分支名,其他的选料项看自己喜欢好。

图片 7

接通下去到“构建”这一部分。点击“增添构建步骤”按钮后,下拉框中即碰面并发一样多重之step类型以供选拔,其中便包括“Build
a Visual Studio project or solution using
MSBuild”,如若您无看是选项,就印证MSBuild插件没有正确安装。

图片 8

点击“Build a Visual Studio project or solution using
MSBuild”之后,在“MSBuild Build
File”输入框中输入构建脚本的讳:CIProjectWebDemo1.msbuild。我们想被Jenkins执行“RunUnitTests”这多少个Target
,如若您没有将DefaultTargets属性设成RunUnitTests的言语,可以当“Command
Line Arguments”中输入“/t:RunUnitTests”,其中/t是/target的简写。

图片 9

点击“Save”或“Apply”保存之后,这些job一旦让硌,就足以pull代码下来,编译项目,执行单元测试【这里感觉Save的指示很分明,不知道用之特别UI框架,源码中出张引用YUI,没因而过不知是未是是,有了解之仇敌请求留言为自身,不胜感激】。

咱事先来手工触发两回等,看看配置是否对。先返“控制面板”,那时可以当屏幕主旨看齐我们的job。点击job名字,然后在左的链接中找到“Build
Now”链接,点击它,Jenkins就会师起举办。

图片 10

当就组链接的下方来一个“Build
History”列表,它呈现的凡这个job的具备构建历史,当第一不良构建起先运行的时候,你碰面以列表中见到一个进度修,同时还发出一个稍圆球形构建状态。圆球闪烁表示构建正在拓展中,它已闪烁的时光一般会是革命或青色,黑色表示构建战败,粉红色表示成功。

假使此job可以访问GitHub版本库,找到了CIProjectWebDemo1.msbuild脚本,“RunUnitTest”执行成功,这么些球应该会更换蓝。这时候你呢就算顺利完成了第一只Jenkins构建。假若构建退步,请点击“Build
History”对应之号查看详细音讯,然后点击“Console
Output”,就可以看到Jenkins所执的各国一个发令和对应结果,从中可以分析暴发构建失利的原因。

3、更实用的构建脚论                                                                                                         

演示就优先到这边。下边来之所以MSBuild来构建一个实打实项目。首先将示例代码下载下来,或是自己创造一个ASP.NET应用。给她上加一个MSBuild脚本,以solution或project名字叫脚论命名,增加名用“.msbuild”。照先前一样指定MSBuild命名空间。

起来写剧本往日,先管脚论要涉及的工作列下:

  1. 创建BuildArtifacts目录

2.
构建solution,把构建产物(DLL,EXE,静态内容等等)放到BuildArtifacts目录下。

  1. 运作单元测试。

坐示例应用叫HelloCI,于是这本子也就是取名也HelloCI.msbuild。先添补加命名空间,然后就足以长第一只Target了,我无它称为Init。

<Target Name="Init">
    <MakeDir Directories="BuildArtifacts" />
</Target>

此Target会调用MakeDir
Task创造一个新的目,名叫BuildArtifacts,跟脚本在同一目录下。运行脚本,你会意识该目录给成功成立。假设再次运行,MSBuild就会晤跳了这多少个Task,因为同名目录就是了。

通下去写一个Clean Target,它负责删除BuildArtifacts目录及内部的文件。

<Target Name="Clean">
    <RemoveDir Directories="BuildArtifacts" />
</Target>

精通了Init之后,这段脚本就应当分外好明了。试着执行一下,BuildArtifacts目录应当就让删掉了。上面再来把代码中之再一次干掉。在Init和Clean四只Target里面,我们且管BuildArtifacts的目录名硬编码到代码里面了,假使将来如修改是名字的话,就得又更改少只地点。这里可以动用Item或Property制止这种题材。

Item和Property只暴发些许差异。Property由简单的键值对构成,在本子执行之上还好为此
/property
赋值。Item更有力一些,它能够就此来存储更扑朔迷离的数额。大家这里不用其他扑朔迷离数据,但待为此Items获取额外的老大消息,例如文件都路线。

接通下修改一下剧本,用一个Item存放路径名,然后修改Init和Clean,让它们引用那Item。

<ItemGroup>
    <BuildArtifactsDir Include="BuildArtifacts\" />
</ItemGroup>

<Target Name="Init">
    <MakeDir Directories="@(BuildArtifactsDir)" />
</Target>
<Target Name="Clean">
    <RemoveDir Directories="@(BuildArtifactsDir)" />
</Target>

Item是于ItemGroup里面定义的。在一个Project中可生差不两个ItemGroup元素,用来拿发生关联的Item分组。这么些效果在Item较多之下特意有因而。我们当ItemGroup里定义了BuildArtifactsDir元素,并就此Include属性指定BuildArtifacts目录。记得BuildArtifacts目录后要起个斜杠。最终,大家由此了@(ItemName)语法在Target里面引用这目录。现在若一旦修改目录名的话,只需要改BuildArtifactsDir的Include属性就好了。

对接下还生个问题如拍卖。在BuildArtifacts目录就有的景下,Init是什么事都不涉及的。也是不怕说,在调用Init的上磁盘上的曾发出文件还碰面让封存下来。这或多或少真正不妥,假设会每一次调用Init的时候,都将目录及目录里的有文件还并删掉再另行成立,就可知保证持续环节还在绝望之条件下执行了。我们尽管可以当每一遍调用Init的上先手工调一下Clean,但为Init
Target加一个DependsOnTargets属性会更简明,这个特性会告知MSBuild,每一遍执行Init的时候还先举办Clean。

<Target Name="Init" DependsOnTargets="Clean">
    <MakeDir Directories="@(BuildArtifactsDir)" />
</Target>

近来MSBuild会匡助咱以调Init此前先行调Clean了。跟DependsOnTargets这么些特性所暗示的同,一个Target可以靠让多独Target,之间为此分号分割就实施。

连片下大家若编译应用程序,把编译后的结果放到BuildArtifacts目录下。先勾勒一个Compile
Target,让她依靠让Init。那多少个Target会调用另一个MSBuild实例来编译应用。我们拿BuildArtifacts目录传上,作为编译结果的输出目录。

<ItemGroup>
    <BuildArtifactsDir Include="BuildArtifacts\" />
    <SolutionFile Include="HelloCI.sln" />
</ItemGroup>

<PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
    <BuildPlatform Condition=" '$(BuildPlatform)' == '' ">Any CPU</BuildPlatform>
</PropertyGroup>

<Target Name="Compile" DependsOnTargets="Init">
    <MSBuild Projects="@(SolutionFile)" Targets="Rebuild" Properties="OutDir=%(BuildArtifactsDir.FullPath);Configuration=$(Configuration);Platform=$(BuildPlatform)" />
</Target>

下边的本子做了几宗工作。

首先,ItemGroup添加了别一个Item,叫做SolutionFile,它对solution文件。在构建脚论被之所以Item或Property代替硬编码,这毕竟的是一个不错实践吧。

其次,我们创造了一个PropertyGroup,里面包含两单Property:Configuration和BuildPlatform。它们的值分别是“Release”和“Any
CPU”。当然,Property也可以当运转时经过/property(简写为/p)赋值。我们还为此了Condition属性,它于此间的义是,唯有当就半独特性没有价值的情景下,才用我们定义的数量被它赋值。这段代码实际上就是让她一个默认值。

接下来,就是Compile
Target了,它借助让Init,里面内嵌了一个MSBuild
Task。它以运作的早晚会调用此外一个MSBuild实例。在剧本中定义了这一个叫内嵌的MSBuild
Task要操作的色。在此地,我们既然可以传另外一个MSBuild脚本,也堪传染入.csproj文件(它自身为是只MSBuild脚本)。但咱捎了传播HelloCI应用的solution文件。Solution文件未是MSBuild脚本,然则MSBuild可以分析其。脚本中还点名了内嵌的MSBuild
Task要实践之Target名称:“Rebuild”,这些Target已经给导入到solution的.csproj文件中了。最终,我们深受内嵌的Task传入了三单Property。

OutDir 编译结果的输出目录
Configuration 构建(调试、发布等)时要使用的配置
Platform 编译所用的平台(x86、x64等)

吃点这两只Property赋值用的就是是先概念之Item和Property。OutDir
Property用之凡BuildArtifacts目录的全路径。这里用了%(Item.MetaData)
语法。这几个语法应该看起很是眼熟吧?就与访问C#本着象属性的语法一样。MSBuild创设出来的另外Item,都提供了好几元数据为供应访问,例如FullPath和Modified提姆(Tim)e。但这么些元数据有时也尚未啥大用,因为Item不必然是文本。

Configuration和Platform用到了以前概念好的Property,语法格式是$(PropertyName)。在此可以见见系统保留的一对属性名,用户不能更改。定义Property的当儿要不要由此它。

此间尚时有暴发来东西值得提一下。用了Property将来,我们得以以非另行改构建脚本的状下下不同之Configuration或者BuildPlatform,只要以运行的当儿用
/property 传值进去便执行。所以“msbuild HelloCI.msbuild /t:Compile
/p:Configuration:Debug”这一个令会由此Debug配置构建项目,而“msbuild
HelloCI.msbuild /t:Compile
/p:Configuration:Test;BuildPlatform:x86”会于x86平台下以Test配置。

现运行Compile,就得编译solution下之蝇头个档次,把编译结果放到BuildArtifacts目录下。在完成构建脚本以前,只剩下最终一个Target了:

<ItemGroup>
    <BuildArtifacts Include="BuildArtifacts\" />
    <SolutionFile Include="HelloCI.sln" />
    <NUnitConsole Include="C:\Program Files (x86)\NUnit 2.6\bin\nunit-console.exe" />
    <UnitTestsDLL Include="BuildArtifacts\HelloCI.Web.UnitTests.dll" />
    <TestResultsPath Include="BuildArtifacts\TestResults.xml" />
</ItemGroup>
<Target Name="RunUnitTests" DependsOnTargets="Compile">
    <Exec Command='"@(NUnitConsole)" @(UnitTestsDLL) /xml=@(TestResultsPath)' />
</Target>

ItemGroup里现在又大多了三单Item:

NUnitConsole指向NUnit控制高运行器(console runner);

UnitTestDLL指于单元测试项目变更的DLL文件;

TestResultsPath是要传给NUnit的,这样测试结果就是会见坐BuildArtifacts目录下。

RunUnitTests Target用到了Exec
Task。假设生一个测试运行战败,NUnit控制高运行器会重回一个非0的结果。这一个再次回到值会告诉MSBuild有个地点串了,于是一切构建的状态就是没戏。【这里领一下,单元测试之类的老三正类库要保管一向于项目中,否则在上传至版本管理服务器上时时,可能会师为忽略导致前面的履行测试间出现问题】

当今这么些剧本相比完善了,用一个下令就得去旧的构建产物、编译、运行单元测试:

C:\HelloCI\> msbuild HelloCI.msbuild /t:RunUnitTests

我们尚足以于脚论设一个默认Target,就看看得某次都设指定了。在Project元素上加一个DefaultTargets属性,让RunUnitTests成为默认Target。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="RunUnitTests">

你还足以创设和谐之Task。这里发生个例子,AsyncExec【我是没有打开,可能为Q了】,它同意人们以异步的不二法门执行命令。比如来只Target用来启动Web服务器,假设用Exec命令的话,整个构建都晤面停住,直到服务器关闭。用AsyncExec那些命令可以给构建继续执行,不用等待命令执行了。

正文的整脚本可以在此地下载【或者下载我的】。

每当搭下的章中,我会讲述咋样布置Jenkins。大家不再需要手动运行命令来构建整个项目,Jenkins会检测代码库,一旦有更新就会自行触发构建。

诸君看官,请继续读书 [独孤九剑]持续集成实践 –
引子

4、触发构建                                                                                                                     

构建成功将来,下一样步而做的固然是让Jenkins检测版本库的变迁,一旦发生代码提交,Jenkins就如pull代码并推行构建。有一些种艺术好就这或多或少。

顶简便的虽然是深受Jenkins定时构建,不过只要在这一段时间内没有代码提交,这一次构建反是浪费。

任何一样栽方法是被Jenkins定时轮询,看看版本库中是否生代码提交。这种办法的弱点是当起了代码提交将来,Jenkins要赶下一个轮询周期才可以尽构建。当然,你为堪给Jenkins每分钟都轮询一浅,尽可能收缩等待时。但咱还有此外一样栽更优雅的方案──给版本库中放一个post-commit的钩,这样要版本库接受了新代码,它都会师通报Jenkins,让其这起始构建。【原文是行使Mercurial作为本管理工具的,由此下的这种艺术,我未曾尝试,有趣味的情人可以拜读原文,尝试一下】

归来job配置页面,在“Build Trigger”区域拔取“Poll
SCM”,在“Schedule”输入框中输入轮询周期。它使用的语法格式是cron的品格。即便只要每5分钟轮询几回等,就输入“H/5
* * * *”。你可点击输入框左边的协助按钮,查看轮询周期的语法介绍。

图片 11

 

5、构建流水线                                                                                                                  

Jenkins能够以某个构建成功停止之后启动其他job。于是就发出了构建流水线,它的定义就是一个job成功后触发其他job。触发者叫做上游job,被触发者被称呼下游job。

构建流水线的接纳场景有多:让耗时较丰硕之测试在单元测试停止未来执行;运行静态代码检查;把构建结果部署到试机环境(staging)或者产品环境面临。我们下面来演示一下斯力量,让Jenkins在构建了后开行web服务器,运行CIProjectWebDemo1这款接纳。

咱只有待开三起事情:

  1. CIProjectWebDemo1-RunUnitTests
    job成功之后触发一个新job;

2.
把CIProjectWebDemo1-RunUnitTests的构建结果拷贝出来;

  1. 启动web服务器。

于先河前,你还索要安装Copy Artifacts插件。回到Manage
Plugins页面,参考前设置Mercurial插件的不二法门安装Copy
Artifacts。在盼重复开的提醒消息时又启Jenkins。【这等同品级要连续的源有些是外国的,很有或吃Q,导致安装退步,到时自行FQ即可】

图片 12

创制新job此前,我们要报CIProjectWebDemo1-RunUnitTests
job,让她把构建产物保存下去,以供应新job使用。回到CIProjectWebDemo1-RunUnitTests
job的配备界面,找到“扩展构建后操作步骤”,选中“Archive the
artifacts”,页面及就相会产出一个文本框:“用于存档的文本”。

图片 13

俺们设归档的目录有一定量份,一卖是BuildArtifacts目录,一卖是packages目录,后者是以吃我们能够访问NuGet
package。倘若假若指定某个目录和目录下具有内容,就待以目后与一个斜杠和简单独星号。不同的目录或文件里为此逗号分割。在这里我们输入的凡“BuildArtifacts/**”。

图片 14

现开创一个新job,起名叫“CIProjectWebDemo1-StartWebServer”【选拔“构建一个自由风格的软件类”】。在布局页面及“构建触发器”这同样节省里选中“Build
after other projects are
built”,把往日分外job配置成如碰时job的类。

图片 15

属下给job添加一个build
step,让那job所举行的率先桩业务虽是拷贝往日job所保存之构建产物。这里要用“Copy
artifacts from another project”这么些step(它是出于Copy
Artifacts插件提供的)。我们无非待填入CIProjectWebDemo1-RunUnitTests
job的名字即可。

图片 16

 

图片 17

最后还要加上一个build step,让她启动web server。那里用底凡“Execute
Windows batch command”,大家为此Visual Studio提供的Cassini来运转应用。

Cassini可以在“C:\Program Files (x86)\Common Files\microsoft
shared\DevServer\10.0\WebDev.WebServer40.EXE”找到【我是全搜索找到的】。运行Cassini很粗略,把web应用存放的路作为参数传为她就是尽,如果没有点名端口号的话,它便会动默认的捧口号80。

“Execute Windows batch
command”step需要一个得以BuildArtifacts和packages拷贝后的目录下执行的命。大家将下面是令复制到“Command”输入框中:

"C:\Program Files (x86)\Common Files\microsoft shared\DevServer\10.0\WebDev.WebServer40.EXE" /port:9988 /vpath:"BuildArtifacts\_PublishedWebsites\CIProjectWebDemo1"

【上边的命令是本人要好测试出的,原文中的指令不可能尽,可能是Cassini版本不一致】

此命令能够启动Cassini,把其对拷贝过来的以,然后在9988端口启动服务器。

享有的布局都早就就绪。试着修改一下代码然后交到。Jenkins应该力所能及监听到转,运行CIProjectWebDemo1-RunUnitTests。假使代码编译成功,所有测试都因通过,Jenkins应该起首运行CIProjectWebDemo1-StartWebServer
job,把CIProjectWebDemo1-RunUnitTests的构建产物拷贝过来,在9988端口启动Cassini。假设就所有还运行无误,我们的连集成系统就加好了。

6、结尾                                                                                                                           

是布局的结果是网站拷贝了后,启动Cassini,指定网站目录,然后这一个job就直接处于等待的状态,我道那就是交结果了咔嚓,十分给在Jenkins的经过遭到被了一个Web服务,此时在浏览器被输入http://localhost:9988/main.aspx(这里我是用的自己的webFrom网站)就可以访问到你的页面了。

而是,假诺非手动截至是Job,那么尽管汇合直接施行下,当下一律破受CIProjectWebDemo1-RunUnitTests运行了的信息启动,除非在布局里打开并发执行,否则用会见一贯等上一个过程的推行;而产出执行又会面由于端口被占用,导致Cassini不可能启动,并要其倒。。感觉好乱。

笔者写这例子的目标,可能是为演示Job链吧。

后来想到,假使无应用Cassini,而是用任何的web服务器来启动网站,可能就未会合满怀于这种题材了。

 

诸君看官,请继续看  [独孤九剑]不断集成实践 –
引子

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图