文档章节

持续集成:CruiseControl.NET + VisualSVN.Server

drv
 drv
发布于 2016/12/28 11:18
字数 1646
阅读 27
收藏 0

  刚换了工作,有需要搭建一套持续集成的平台,做一下总结。

  首先是我用到的工具:

              

  上面缺少了Microsoft Fxcop,可以用来做代码校验,不过实际情况暂时还没有用到。主要的需求目前是,使用已发布的稳定版本代码作为新发布版本代码的基础,避免有未完成的代码存在于发布版本中,同时自动化集成发布后,上传该新发布版本代码到tags中。elevate一般情况下是不需要的,不过VisualSVN无法使用命令行登陆,可以使用它来提升执行权限,不过最终我使用了另外一个办法,这个方法需要购买VisualSVN Server的License,后面会说。

  安装过程就不赘述了,相信有兴趣看这个的都是做软件的,下一步之类还有一些选项什么的没什么可说的。安装的时候部署的监控网站可能不成功,只要自己手动在IIS上布下就好。另外,先提一句CCTray是可以把配置好的集成方案服务添加运行的工具,添加好后本身也具有监控的功能,区别是它客户端工具。

  先说SVN服务器,VisualSVN Server是比较简单的SVN服务端,所以功能比较简单,比如就缺少命令行登陆的功能,不过另一方面就是安装很简单。有两点需要说明一下,一是新建Repository时,勾选分为branches tags trunk三个目录,分别用来放分支代码,发布版代码,主干版本代码,其中tags下的代码是只能新增不能修改的;另外一点是权限问题,我使用的是windows的账户做操作的,在这种情况下,有个选项要勾选上,不然执行svn提交代码命令时,会报错身份验证不通过。

                      

  上图红框就是需要勾选的,不过勾选这个是需要License的。

  接下来就是主题部分了,安装完CC以后,到开始菜单里找到对应的菜单,会发现里面有个配置文件,对应的就是安装好的目录下的ccnet.config文件,另外还有个验证工具,可以用来辅助配置,一目了然的东西就不细说了,下面说说配置。

<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
  <!-- This is your CruiseControl.NET Server Configuration file. 
       Add your projects below! -->

这里配置服务的名字,一个project对应的就是一个集成方案,可以独立执行 <project name="ProjectTest" description="demoproject showing a small config" queue="Q1">
工作使用的目录 <workingDirectory>D:\Store</workingDirectory>
这里是正在集成工程中的临时配置文件保存的地方,一次执行结束后,该配置文件会被放到配置的日志文件夹中
   <artifactDirectory>D:\Store\Artifacts</artifactDirectory> <!-- specify a state folder to prevent CCNet from saving it in Program Files\CruiseControl.NET\server programs may not standard write their data in it on windows Vista and up) --> <state type="state" directory="D:\Store\State" /> <!-- specify a artifactDirectory to prevent CCNet from saving it in Program Files\CruiseControl.NET\server programs may not standard write their data in it on windows Vista and up) --> 这是监控页面
<webURL>http://localhost:90/ViewLatestBuildReport.aspx</webURL> <modificationDelaySeconds>10</modificationDelaySeconds> <triggers> <!-- check the source control every X time for changes, and run the tasks if changes are found --> <!--<intervalTrigger name="continuous" seconds="30" buildCondition="IfModificationExists" initialSeconds="5"/>--> <intervalTrigger name="continuous" seconds="6000" /> </triggers>
这里是配置获取源码的位置,使用svn <sourcecontrol type="svn"> <executable>C:\Program Files\VisualSVN Server\bin\svn.exe</executable> <trunkUrl>https://aaa/svn/Test/trunk</trunkUrl> <username>svn</username>--登陆svn使用的用户名密码,这个是我在测试服务器上创建的测试账户 <password>svn</password> <workingDirectory>D:\Store\Code</workingDirectory>--获取下来源码的存放位置 <autoGetSource>true</autoGetSource> </sourcecontrol> <tasks> <!-- if you want the task to fail, ping an unknown server -->
这个ping的作用在这里仅仅是测试的时候,改成错的可以让它后面的配置都不执行 <exec> <executable>ping.exe</executable> <buildArgs>localhost</buildArgs> <buildTimeoutSeconds>15</buildTimeoutSeconds> <description>Pinging a server</description> </exec> 这里是编译解决方案的配置,也可以每个项目分别编译,projectFile配置成项目的csproj文件就可以
<msbuild>
        <executable>C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable>
        <workingDirectory>D:\Store\Code</workingDirectory>
        <projectFile>D:\Store\Code\*******.sln</projectFile>
        <buildArgs>/noconsolelogger /p:Configuration=Release;OutDir=D:\Store\Run\ /v:diag</buildArgs>
        <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger>
        <targets>Build</targets>
        <timeout>900</timeout>
      </msbuild>

这是用来配置发布位置的,sourceDir是生成的位置,publishDir是发布的位置可以配置成远程的共享目录
<buildpublisher> <sourceDir>D:\Store\Run</sourceDir> <publishDir>D:\Store\Release</publishDir> <useLabelSubDirectory>false</useLabelSubDirectory> </buildpublisher> <!--删除.svn文件--> 这个批处理文件时用来清除代码中svn绑定的,因为这份代码需要提交到Tags上,这个批处理代码类似的网上到处都是我就不贴了
<exec executable="D:\Store\delSVN.bat" />
这段注释掉的是单元测试的配置,不过由于原来的代码都没做单元测试,所以就先注释掉了 <!--删除单元测试结果文件,否则不会创建新的结果文件 <exec executable="D:\Store\delTestResult.bat" />--> <!-- buildArgs:参数,/testcontainer:单元测试项目程序集(可以包含多个) /resultsfile:测试结果文件 <exec> <executable>C:\Program Files\Microsoft Visual Studio 11.0\Common7\IDE\mstest.exe</executable> <baseDirectory>D:\Store\UNTest</baseDirectory> <buildArgs>/testcontainer:TestProject\bin\Debug\TestProject.dll /resultsfile:TestResults\mstest-results.xml</buildArgs> <buildTimeoutSeconds>300</buildTimeoutSeconds> </exec>--> 提交代码的批处理:

cd /d %~dp0
"C:\Program Files\VisualSVN Server\bin\svn.exe" import -m "New Tags" D:\Store\Code https://aaa/svn/Test/tags/Tags_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%

<!--提交Tags代码-->
      <exec executable="D:\Store\svnCTags.bat" />
    </tasks>

    <publishers>
这个是完成后全部的日志
<xmllogger logDir="D:\Store\Log"/> 日志可以配置成发送邮件,不过这里不需要 </publishers> </project> 第二个集成服务
<project name="ProjectTestWithOutGetSource" description="demoproject showing a small config" queue="Q1"> <workingDirectory>D:\Store</workingDirectory> <artifactDirectory>D:\Store\Artifacts</artifactDirectory> <state type="state" directory="D:\Store\State" /> <webURL>http://localhost:90/ViewLatestBuildReport.aspx</webURL> <modificationDelaySeconds>10</modificationDelaySeconds> <triggers> <intervalTrigger name="continuous" seconds="6000" /> </triggers> <sourcecontrol type="svn"> <executable>C:\Program Files\VisualSVN Server\bin\svn.exe</executable> <trunkUrl>https://aaa/svn/Test/trunk</trunkUrl> <username>svn</username> <password>svn</password> <workingDirectory>D:\Store\Code</workingDirectory> <autoGetSource>true</autoGetSource> </sourcecontrol> <tasks> <!-- if you want the task to fail, ping an unknown server --> <exec> <executable>ping.exe</executable> <buildArgs>localhost</buildArgs> <buildTimeoutSeconds>15</buildTimeoutSeconds> <description>Pinging a server</description> </exec> <msbuild> <executable>C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable> <workingDirectory>D:\Store\Code</workingDirectory> <projectFile>D:\Store\Code\*******.sln</projectFile> <buildArgs>/noconsolelogger /p:Configuration=Release;OutDir=D:\Store\Run\ /v:diag</buildArgs> <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger> <targets>Build</targets> <timeout>900</timeout> </msbuild> <buildpublisher> <sourceDir>D:\Store\Run</sourceDir> <publishDir>D:\Store\Release</publishDir> <useLabelSubDirectory>false</useLabelSubDirectory> </buildpublisher> <!--删除.svn文件--> <exec executable="D:\Store\delSVN.bat" /> <!--提交Tags代码--> <exec executable="D:\Store\svnCTags.bat" /> </tasks> <publishers> <xmllogger logDir="D:\Store\Log"/> </publishers> </project> </cruisecontrol>

最后是我集成使用的测试目录,可以不用自己创建,集成过程中会自己创建的

                    

 

© 著作权归作者所有

drv

drv

粉丝 2
博文 57
码字总数 75382
作品 0
东城
架构师
私信 提问
CruiseControl.NET 1.8.0 发布,持续集成框架

CruiseControl.NET 1.8.0 发布了,下载地址:CruiseControl.NET-1.8.0.0-Setup.exe CruiseControl.NET 是 .NET 平台下的持续集成工具,CruiseControl (Java) 的 .NET 移植版本。...

oschina
2012/07/27
1K
0
CruiseControl.NET/CCNET配置(SVN+MSBuild+BAT+FTP)

CCNET目前最新版本为1.8.5,官方很久没更新过了,如果投入生成环境使用,建议全部转到Jenkins上。 可以直接在这里下载:http://www.cnblogs.com/EasonJim/p/5773328.html 如果在配置MSBuild...

easonjim
2016/12/05
0
0
CruiseControl.NET开篇

  在这里说明一下,我终于踏上了CruiseControl.NET这条不归路了,为什么我会觉得是一条不归路,原因很简单,就是这东西在现在这个阶段已经很久没有在园子里有活跃度了,基本上到了已经可以...

easonjim
2016/04/06
0
0
基于.NET的大型Web站点StackOverflow架构

A lot has happened since my first article on the Stack Overflow Architecture(2009-8-5). Contrary to the theme of that last article, which lavished attention on Stack Overflow's ......

华宰
2011/04/01
0
0
持续集成之路

去年的公司从上至下全力推行持续集成, 各大部门, 各小部门, 个项目组, 强推持续集成, 汇报工作的第一句话: “你们的持续集成报表在哪? 发给我了吗?”, 经过cruisecontrol集成过后的ICP-CI 成...

晨曦之光
2012/03/09
358
0

没有更多内容

加载失败,请刷新页面

加载更多

干货 | 京东云弹性伸缩功能实践

弹性伸缩AS(Auto Scaling)是一项 Web 服务,可以根据您的业务需求和策略,自动调整云主机计算资源,可帮助确保您拥有适量的云主机实例来处理您的应用程序负载。 使用 AS 进行容量调整,您只需...

京东云技术新知
21分钟前
2
0
Docker 问答录(100 问)

Docker 问答录(100 问)

石日天
22分钟前
2
0
CQRS之旅——旅程6(我们系统的版本管理)

  旅程6:我们系统的版本管理      准备下一站:升级和迁移      “变化是生活的调味品。”威廉·考珀      此阶段的最高目标是了解如何升级包含实现CQRS模式和事件源的限界上下...

SEOwhywhy
22分钟前
2
0
批量自动化配置Dell服务器idrac管理口IP

背景说明 工作中经常会遇到一次上几十台、几百台服务器的情况 每当到这个时候小伙伴们拿台笔记本和一根网线,一台服务器、一台服务器的去修改idrac IP 为了节约这个工作量,利用dell的racad...

xiangyunyan
24分钟前
0
0
Reference Table overflow (max=1024)异常处理

首先说一下出现这个问题的背景,通过Android的Camera采集视频信息然后通过JNI来调用C来软编码,但是发现有的手机再录制时间超过5分钟后就会出现异常崩溃!通过抓log发现是:“JNI pinned ar...

shzwork
28分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部