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

  首先是我用到的工具:

              

  上面缺少了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>

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

                    

持续集成:CruiseControl.NET + VisualSVN.Server的更多相关文章

  1. 【Jenkins持续集成(一)】SonarQube 入门安装使用教程

    一.前言 持续集成管理平台不只是CI服务器,是一系列软件开发管理工具的组合. 源码版本管理:svn.git 项目构建工具:Maven.Ant 代码质量管理:Sonar(Checkstyle.PMD.F ...

  2. 搭建你的持续集成server - CruiseControl step by step(1)

    CruiseControl是CIserver的老者,诞生已是多年,在很多方面,CruiseControlserver已经成为持续集成实践的同义词.而如今,CruiseControl已发展成为一个家族式 ...

  3. 使用CruiseControl.Net全面实现持续集成

    持续集成想必大家很多人都听说过,甚至都实践过,最近我又一次亲历了一次持续集成,现将我的经验分享给大家.关于持续集成的理论在本文概不涉及,本文的主要目的是实战CruiseControl.Net,用它来全 ...

  4. (转)使用CruiseControl+SVN+ANT实现持续集成之二

    1. 环境搭建 1.1. 下载及目录介绍 从官方站点http://cruisecontrol.sourceforge.net/download.html下载一份最新的 CC 压缩包,最新的版本号为2. ...

  5. (转)使用SVN+CruiseControl+ANT实现持续集成之一

    在前面的文章中, 介绍自己当时所在团队的处境(使用.NET开发),一个不到十个人的研发团队在保证正常开发进度同时需要并发支持四.五十个项目问题处理,经常为了程序版 本冲突.日常测试版本.发布版本提供等 ...

  6. CruiseControl.Net全面实现持续集成

    使用CruiseControl.Net全面实现持续集成   持续集成想必大家很多人都听说过,甚至都实践过,最近我又一次亲历了一次持续集成,现将我的经验分享给大家.关于持续集成的理论在本文概不涉及,本文 ...

  7. .NET持续集成与自动化部署之路第二篇——使用NuGet.Server搭建公司内部的Nuget(包)管理器

    使用NuGet.Server搭建公司内部的Nuget(包)管理器 前言     Nuget是一个.NET平台下的开源的项目,它是Visual Studio的扩展.在使用Visual Studio开发基 ...

  8. Xcode Server持续集成

    这是一篇2017-11-12 年我还在 ezbuy 的一篇文章,时间过去很早了,最近在整理笔记的时候发现了, 同步过来,文章内容现在是否有效不确定,应该大差不差,读者仅做参考 最后更新 2017-11 ...

  9. 持续集成及部署利器:Go

    Go是一款先进的持续集成和发布管理系统,由ThoughtWorks开发.(不要和Google的编程语言Go混淆了!)其前身为CruiseControl,是ThoughtWorks在做咨询和交付交付项目 ...

随机推荐

  1. [C#] 软硬结合第二篇——酷我音乐盒的逆天玩法

    1.灵感来源: LZ是纯宅男,一天从早上8:00起一直要呆在电脑旁到晚上12:00左右吧~平时也没人来闲聊几句,刷空间暑假也没啥动态,听音乐吧...~有些确实不好听,于是就不得不打断手头的工作去点击下 ...

  2. premere cs4绿色版 安装 并且 视频导出 讲解

    最近室友,开始在玩视频剪辑,用的是 premere cs4 绿色版.让他遇到的最大问题也是我之前遇到的最大问题,就是视频导出. 所以我在这里上传一套自己的一点点经验吧. 接下来,我就总结一下 我是怎么 ...

  3. Python列表去重

    标题有语病,其实是这样的: 假设有两个列表 : L1 = [1,2,3,4] ; L2 = [1,2,5,6] 然后去掉L1中包含的L2的元素 直接这样当然是不行的: def removeExists ...

  4. 23种设计模式--代理模式-Proxy

    一.代理模式的介绍       代理模式我们脑袋里出现第一个词语就是代购,其实就是这样通过一个中间层这个中间成是属于什么都干什么都买得,俗称"百晓生",在平时得开发中我们经常会听到 ...

  5. JavaScript之职责链模式

    一.概述 职责链模式(Chain of responsibility),就是使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有 ...

  6. Hibernate中事务声明

    Hibernate中JDBC事务声明,在Hibernate配置文件中加入如下代码,不做声明Hibernate默认就是JDBC事务. 一个JDBC 不能跨越多个数据库. Hibernate中JTA事务声 ...

  7. 如何使用swing创建一个BeatBox

    首先,我们需要回顾一些内容(2017-01-04 14:32:14): 1.Swing组件 Swing的组件(component,或者称之为元件),是较widget更为正确的术语,它们就是会放在GUI ...

  8. GJM : C#设计模式(1)——单例模式

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  9. 如何区别char与varchar?

    1.varchar与char两个数据类型用于存储字符串长度小于255的字符,MySQL5.0之前是varchar支持最大255.比如向一个长度为40个字符的字段中输入一个为10个字符的数据.使用var ...

  10. jquery.multiselect 多选下拉框实现

    第一步:链接下列文件,如果没有,到此网页下载 https://github.com/ehynds/jquery-ui-multiselect-widget,此插件基于jquery ,所以jquery的 ...