随笔-146  评论-2144  文章-13  trackbacks-12

DailyBuild全攻略

久学培训网--国内最大的培训平台!
免费发布课程,需求,查找课程,讲师,机构
培训课程:电脑,英语,日语,企业管理,职业,法语,软件,驾驶,口语,物流,厨师,网络,网络,美容,才艺,会计,股票,舞蹈
...


请大家看最新版的,最新版下载地址:

http://www.snailsoft.com/download/db1.2.rar

不负重望,终于完工了.如果遇到什么问题,大家一起来测试哦.我就躲在一边休息了想想这些日子,梦里都是写程序,没有点累是假的. 言归正传吧.

随着软件开发规模的扩大,软件内在bug的增多,以致于项目经理和开发者被许多无名bug和各种故障弄得焦头烂额,甚至为了一个小问题,而到会议室开会。于是软件的发布日期被无限地延期。可是这一切如果有了DailyBuild,项目经理只要在上班前沏上一壶茶,然后在命令提示符下敲入一个命令,这一切便尽在掌握之中。不信,请跟我来。

DailyBuild中文译作“每日构建”是利用一序列软件,对进行中的项目进行监控,如果发现服务器上共享的项目文件有所改动,便会再次编译,得到软件的最新版本,并且生成测试和代码规范文档。本文将带你步入.NET下每日构建的佳境。


一.  系統需求

Win2000 以上操作系统   VS.NET 2003 被安裝

二.  相关工具安裝說明

    为了能够实现功能,以下的软件是必须下载安装的(为了程序运行,请载最新版本),后边有相关的下载地址.

1.     Nant

http://nant.sourceforge.net/builds/

2.     NAntContrib

http://nantcontrib.sourceforge.net/nightly/builds/

3.     NUnit  

http://www.nunit.org/

4.     Visual Source Safe

http://www.microsoft.com/vstudio

5.      FxCop

http://www.gotdotnet.com/team/fxcop/

6.     CruiseControl.NET

http://ccnet.thoughtworks.com

7.     NUnit2report(NUnit生成的XML文件“样式”成HTML文件)

http://sourceforge.net/projects/nunit2report/

三.  制作说明

首先安装上边所列出来的所有软件.

程序运行总框架如下图:


1 整个程序框架图

说明:

cc.net 监控VSS里的变化,如果发现有变化,cc.net立即调出NAnt将最新改动的VSS里的数据拷贝到本地并且进行编译,将结果输出.生成DLL程序集或者EXE可执行文件.NAnt将得到的将要执行单元测试的程序集DLL文件交给NUnit检测并且生成XML文件(为了方便我在这里又将XML文件样式HTML文件,打开即以图形方式查看.NAnt并且将得到的程序集交给FxCop检查,并生成XML文件,看编码是否规范.  这一切都是自动的,只要将CC.NET打开,这一切就是自动化的,需要的只是你的眼睛来看结果而已.

 

1.VS建立两个工程

VS编译成两个程序集,TestUNit.dll项目所需要的程序集,Test.dll单元测试用例.

VSD:\ClientVSS下新建 (类库)工程Project 代码如下:


2 程序集图


编译生成TestNUnit.dll文件.

再打开VS生成类库和TestProject工程,引用上边生成的TestNUnit.dll文件和NUnit:

3  添加引用NUnit

代码如下:





4 测试样例图

编译生成 test.dll程序集(作为单元测试用)

 

2.建立VSS服务器

打开VSS的服务端,添加帐号 coolbug,密码:******,然后创建数据库,这里数据库用的是安装的自带的srcsafe.ini文件.然后打开客户端,将刚建立的两个工程加到拖到服务器上.



5 建立VSS服务器图

并将所有项check in到服务器上.

 

3.建立与所有相关的default.build文件

D:\test 下建立 default.build  文件,代码如下(nunit2report bin下的文件都拷贝到nantBIN目录里)

6 Default.build文件内容图

为了要将文件全放到记事本里,排版有点不好看.

因为fxcopcmd的参数在exec task里不能指定,所以必须再写一个fxcop.bat文件(此是本人的独创感觉很很不错,如果大家有什么更好的方法可以MAIL给我),内容如下:



7  fxcop.bat 文件内容图

为了fxcopcmd能够运行,只有将fxcopcmd.exe加到系统的环境变量中去,我发现这个不像nant那么好加,每次加完后,重启系统后还要重新加到环境变量中去,谁有更好的方法?

测试这个build文件,得到下图所示结果:






8 编译default.build文件结果图

这时候在d:\test文件夹里将会得到结果.

 

4. CC.Net主控制

先进入CC.Net的安装目录,进入Server文件夹,新建一个ccnet.config文件(如果里边有则修改之),修改如下(我以C#里的注释方式”//”进行注释,大家调试的时候,删掉前边的”//”一行的内容即可):




9 CC.Net.config文件内容图

现在打开 D:\test 文件夹,发现只有build文件和引用的bat文件,其他要得到的信息都没有.如下:




10  还没得到文件时的d:\test

这时,打开CC.Net目录里 ..\server 下的 StartCCNet.bat 文件,双击,(意最好只双击一次,然后不要关掉,否则第二次打开的时候,会一闪而过,所有的结果与错误都在ccnet.log文件里,如果你想用WEB的方式查看,可以再配置一下ccnet.config文件)如图所示:




11 运行StartCCNet.bat时的图

这个时候,d:\test 文件夹里还是那两个文件,为什么.因为VSS服务器里还没有改动情况,现在我们打开VSS客户端,并随便check in一个文件,D:\Test文件夹下得到如下文件:




12 得到文件时的d:\test

打开这些文件看看:

Local文件夹里的结构和VSS客户端上的顺序一样,当然得要看你Build文件里是取哪个目录.result文件夹里只有dllexe文件. 先打开test.dll-results.xml文件看看.




13 NUnit生成的XML文档

 

最后生成的网页文件如下:




14  NUnit生成的XML文档转换成HTML文件

呵呵,真酷,都通过测试了.100%通过哦.

再看看FxCop生成的XML文件:




15 FxCop生成的XML文件

  所遇到的问题及版
由于时间仓促,请大家一起来测试,如果有Bug请Blog上提出来或者发到我的邮箱coolbug@126.com.

 

 

 

 

 

 

 

0
0
(请您对文章做出评价)
« 上一篇:用NAnt 将StarTeam中的文件CheckOut回本地计算机
» 下一篇:DailyBuild全攻略"隆重"发布V1.0
posted on 2004-07-27 15:36 CoolBug 阅读(11439) 评论(55)  编辑 收藏 网摘

评论:
#1楼 2004-07-28 01:35 | NetCobra

非常好!找了很久的资料,自己琢磨出来过其中的一些,不过差的很多。

不过都是“然”没有“所以然”,能多讲一点原理就更好了,是不是有点贪心不足


  回复  引用    
#2楼 2004-07-28 07:47 | CoolBug
不知道你所指的原理是什么? 就比如讲.NET让我讲CLR 是么? 我觉得对这几个开源软件来说,能会用就已经可以了.
  回复  引用    
#3楼 2004-07-29 17:44 | 吕震宇
非常好,提个建议,别把C#、Nant等代码以NOTEPAD图片的格式放在上面,如果直接以文本放在文中,我就可以复制、粘贴了,否则还要自己一点一点输入,太麻烦了。有劳。
  回复  引用    
#4楼 2004-07-30 08:55 | CoolBug
to atempcode :
Agree with you.
Version task in NAntContrib
the address of using version task is:
http://nantcontrib.sourceforge.net/help/tasks/version.html
to吕震宇 :
我这里有帮助文档,你如果要的话,在MSN上我发给你.
我的MSN:coolbug2004@hotmail.com

  回复  引用    
#5楼 2004-07-30 09:48 | delloby
so good!
  回复  引用    
#6楼 2004-07-31 20:11 | Kjing
fxcopcmd的参数设置可以
   
<target name="fxcop">
<exec program="fxcopcmd" commandline="/f:C:\Downloads\EXE\TestAPP.exe /o:fxcop.xml " />
</target>

  回复  引用    
#7楼 2004-08-02 08:19 | CoolBug
果然好使,THANKS. 这个比我的就方便多了.
  回复  引用    
#8楼 2004-08-02 21:08 | 山药蛋V3.5
我现在的过程,错误怎么不少呢,最新下的CC.NET,配置文件好象叫ccnet.exe.config,我编辑它的内容后,总是提示
未处理的异常: System.TypeInitializationException: “ThoughtWorks.CruiseControl.
Core.Util.Log”的类型初始值设定项引发异常。 ---> System.Configuration.Configurat
ionException: 配置文件 D:\Tools\DailyBuild\CruiseControl.NET\server\ccnet.exe.co
nfig 没有根 <configuration> 标记 (D:\Tools\DailyBuild\CruiseControl.NET\server\c
cnet.exe.config line 2)
   at System.Configuration.ConfigurationRecord.ScanFactoriesRecursive(XmlTextRea
der reader)
   at System.Configuration.ConfigurationRecord.Load(String filename)
   at System.Configuration.DefaultConfigurationSystem.System.Configuration.IConf
igurationSystem.Init()
   at System.Configuration.ConfigurationSettings.SetConfigurationSystem(IConfigu
rationSystem configSystem)
   at System.Configuration.ConfigurationSettings.GetConfig(String sectionName)
   at System.Diagnostics.DiagnosticsConfiguration.GetConfigTable()
   at System.Diagnostics.DiagnosticsConfiguration.Initialize()
   at System.Diagnostics.DiagnosticsConfiguration.get_SwitchSettings()
   at System.Diagnostics.Switch.Initialize()
   at System.Diagnostics.Switch.get_SwitchSetting()
   at System.Diagnostics.TraceSwitch.get_Level()
   at ThoughtWorks.CruiseControl.Core.Util.CruiseControlTraceSwitch..ctor() in d
:\sourceforge\ccnet\project\core\util\LogUtil.cs:line 92
   at ThoughtWorks.CruiseControl.Core.Util.Log..cctor() in d:\sourceforge\ccnet\
project\core\util\LogUtil.cs:line 86
   --- 内部异常堆栈跟踪的结尾 ---
   at ThoughtWorks.CruiseControl.Core.Util.Log.Error(Exception ex)
   at ThoughtWorks.CruiseControl.Console.ConsoleRunner.Main(String[] args) in d:
\sourceforge\ccnet\project\console\ConsoleRunner.cs:line 22

  回复  引用    
#9楼 2004-08-03 14:16 | CoolBug
你修改ccnet.config文件就行了,如果没有自己新建一个也可以.
你第一次打开CC.NET的时候就不要关闭,你就是改了CCnet.config里的设置,那个批处理文件运行的主程序里会读到你这个改动的.
如果你关了再重新开,就会显示这个错误. 切记切记.  他不允许你打开两次的.  (在短的时间内),如果你等过了一会儿再打开就OK了.

  回复  引用    
#10楼 2004-09-29 17:08 | hxh
能把版本号自动生成的具体写法结合到 全攻略 中吗?谢谢!
  回复  引用    
#11楼[楼主] 2004-09-29 17:13 | CoolBug      
这个功能我还没有试过,不过我看到有这个Task ,所以实现是可以的.
  回复  引用  查看    
#12楼 2004-09-30 09:39 | chelsea
NAntContrib有ClearCase的Task吗?
  回复  引用    
#13楼[楼主] 2004-09-30 09:42 | CoolBug      
http://nantcontrib.sourceforge.net/
自己查

  回复  引用  查看    
#14楼 2004-10-08 10:22 | 悠悠      
請問下面問題怎麼解決?我用的方法和你的差不多,謝謝!

2004/10/8 上午 08:56:20: [CruiseControl Server:Info]: Reading configuration file "D:\vsstest\ccnet.config"
2004/10/8 上午 08:56:20: [CruiseControl Server:Info]: Configuration changed: Restarting CruiseControl.NET Server
2004/10/8 上午 08:56:20: [CruiseControl Server:Info]: Stopping integrator for project: vsstest
2004/10/8 上午 09:05:50: [vsstest:Warning]: Process timed out: \\10.153.26.62\vss\win32\SS.EXE
history $/ -R -Vd2004/10/8;上午08:55~2004/10/8;上午08:26 -Ywgongwei,"781230" -I-Y. Process id: 2428
2004/10/8 上午 09:05:50: [vsstest:Warning]: The timed out process has been killed: 2428
2004/10/8 上午 09:05:51: [vsstest:Error]: Exception: Source control operation has timed out.
----------
ThoughtWorks.CruiseControl.Core.CruiseControlException: Source control operation has timed out.
at ThoughtWorks.CruiseControl.Core.Sourcecontrol.ProcessSourceControl.Execute(ProcessInfo processInfo) in d:\sourceforge\ccnet\project\core\sourcecontrol\ProcessSourceControl.cs:line 55
at ThoughtWorks.CruiseControl.Core.Sourcecontrol.ProcessSourceControl.GetModifications(ProcessInfo info, DateTime from, DateTime to) in d:\sourceforge\ccnet\project\core\sourcecontrol\ProcessSourceControl.cs:line 44
at ThoughtWorks.CruiseControl.Core.Sourcecontrol.Vss.GetModifications(DateTime from, DateTime to) in d:\sourceforge\ccnet\project\core\sourcecontrol\Vss.cs:line 82
at ThoughtWorks.CruiseControl.Core.Project.GetSourceModifications(IntegrationResult results) in d:\sourceforge\ccnet\project\core\Project.cs:line 179
at ThoughtWorks.CruiseControl.Core.Project.AttemptToRunIntegration(BuildCondition buildCondition, IntegrationResult result) in d:\sourceforge\ccnet\project\core\Project.cs:line 158
----------

  回复  引用  查看    
#15楼[楼主] 2004-10-08 10:41 | CoolBug      
按照你上边的理解,你的CC.net超时了,你自己进ccnet.config去设置一下时间.
  回复  引用  查看    
#16楼 2004-10-11 15:38 | 悠悠      
忘了說一聲,如果按照你上面的方法設置ccnet.config,如下:

<executable>\\10.153.26.62\VSS\win32\SS.EXE
</executable>(服務器上的SS.EXE)
<ssdir>D:\Program Files\Microsoft Visual studio\Common\VSS</ssdir>(本機的srcsafe.ini)
<project>$/</project>
<username>wgongwei</username>
<password>"781230"</password>
才會出現前面說的錯誤信息
2004/10/8 上午 09:05:50: [vsstest:Warning]: Process timed out: \\10.153.26.62\vss\win32\SS.EXE
history $/ -R -Vd2004/10/8;上午08:55~2004/10/8;上午08:26 -Ywgongwei,"781230" -I-Y. Process id: 2428
2004/10/8 上午 09:05:50: [vsstest:Warning]: The timed out process has been killed: 2428
2004/10/8 上午 09:05:51: [vsstest:Error]: Exception: Source control operation has timed out.


但如果我按下面的方法設置ccnet.config

<executable>D:\Program Files\Microsoft Visual Studio\Common\VSS\win32\SS.EXE
</executable>(本機的SS.EXE)
<ssdir>\\10.153.26.62\vss</ssdir>(服務器上的srcsafe.ini)
<project>$/</project>
<username>wgongwei</username>
<password>"781230"</password>
其他和你的相同。
卻無法檢測到check in,提示總是:
2004-10-11 14:44:20: [vsstest:Debug]: VSS: D:\Program Files\Microsoft Visual Studio\Common\VSS\win32\SS.EXE
history $/ -R -Vd2004-10-11;02:31~2004-10-11;02:08 -Ywgongwei,"781230" -I-Y
2004-10-11 14:44:21: [vsstest:Debug]: VSSPublisher: Building list for $/.......
2004-10-11 14:44:21: [vsstest:Info]: No modifications detected.
不管我checkin多少次結果都是一樣的
如果第二天過來再運行ccnet,就可以檢測得到昨天所有的checkin,並能順利地進行Autobuild。
我實在無法找出問題的根源,又很想能夠及時地檢測到任何checkin,請問到底是什麽地方出了問題?


  回复  引用  查看    
#17楼[楼主] 2004-10-11 16:34 | CoolBug      
ccnet.config里有这个设置:<schedule type="schedule" sleepSeconds="6"/> 你可能是把sleepSeconds设置太久了,或者没有设置. 上边这个是每6秒监视一下. 你能不能看得到你的 ccnet.config监视? 如果在命令提示符下的数据每几秒(你设定的时间)往上跳动,则说明没有配置错.
  回复  引用  查看    
#18楼 2004-10-11 17:43 | 悠悠      
可以看到ccnet.config的監視,我設置的sleepseconds=60, 每隔一分鐘都會跳動一次,配置應該是沒問題的,現在主要是不知道爲什麽不能及時檢測到checkin,而要等到過一天才能檢測到?


  回复  引用  查看    
#19楼[楼主] 2004-10-12 09:34 | CoolBug      
你对比一下我的:
<cruisecontrol>
<project name="MyProject">
<webURL>http://localhost/ccnet</webURL>
<schedule type="schedule" sleepSeconds="6"/>
<sourcecontrol type="vss" autoGetSource="true">
<ssdir>d:\program\vss\</ssdir>
<executable>\\coolbug\vss$\win32\ss.exe</executable>
<project>$/</project>
<username>coolbug</username>
<password>111111</password>
</sourcecontrol>
<build type="nant">
<executable> D:\Csdn\devtools\nant\bin\nant.exe</executable>
<baseDirectory>d:\test</baseDirectory>
<buildFile>default.build</buildFile>
<targetList>
<target>run</target>
</targetList>
<buildTimeoutSeconds>300</buildTimeoutSeconds>
</build>
<modificationDelaySeconds>10</modificationDelaySeconds>
</project>
</cruisecontrol>

  回复  引用  查看    
#20楼 2004-10-12 11:27 | 悠悠      

    實在不好意思,這個問題可能會耽誤你不少時間。我認爲我下面的配置應該沒有什麽問題:
<cruisecontrol>
  <project name="vsstest">
    <webURL>http://localhost/ccnet/</webURL>
     <schedule type="schedule" sleepSeconds="60"/>
 
   <sourcecontrol type="vss" autoGetSource="false">(我用nant從服務器下載
    <executable>D:\Program Files\Microsoft Visual Studio\Common\VSS\win32\SS.EXE
    </executable>(應該是用本機上的SS.EXE吧?)
    <ssdir>\\10.153.26.62\vss</ssdir>(我用的是服務器上的scrsafe.in)
    <project>$/</project>
    <username>wgongwei</username>
    <password>"781230"</password>
    <!--workingDirectory>d:\testndoc\test</workingDirectory-->
    <!--timeout>300</timeout-->
  </sourcecontrol>

    <build type="nant">
      <executable>D:\nant-0.85\bin\nant.exe</executable>
      <baseDirectory>D:\vsstest\local</baseDirectory>     
      <buildFile>default.build</buildFile>
      <buildTimeoutSeconds>300</buildTimeoutSeconds>
    </build>
   
    <publishers>
      <xmllogger>
        <logDir>..\web\log</logDir>
      </xmllogger>
</publishers>

   <modificationDelaySeconds>10</modificationDelaySeconds>
  </project>
</cruisecontrol>
運行ccnet后監視窗口如下(中間我有過checkin,但沒有檢測到):
D:\vsstest>ccnet
[CruiseControl Server:Info]: CruiseManager: Listening on tcp://10.153.27.30:1723
4/CruiseManager.rem
[CruiseControl Server:Info]: Starting CruiseControl.NET Server
[CruiseControl Server:Info]: Reading configuration file "D:\vsstest\ccnet.config
"
[CruiseControl Server:Info]: Starting integrator for project: vsstest
[vsstest:Info]: Starting integration for project: vsstest
[vsstest:Debug]: VSS: D:\Program Files\Microsoft Visual Studio\Common\VSS\win32\
SS.EXE
     history $/ -R -Vd10/12/2004;上午11:03~10/11/2004;下午02:08 -Ywgongwei,"7812
30" -I-Y
[vsstest:Debug]: VSSPublisher:
[vsstest:Info]: No modifications detected.
[vsstest:Debug]: VSS: D:\Program Files\Microsoft Visual Studio\Common\VSS\win32\
SS.EXE
     history $/ -R -Vd10/12/2004;上午11:04~10/11/2004;下午02:08 -Ywgongwei,"7812
30" -I-Y
[vsstest:Debug]: VSSPublisher:
[vsstest:Info]: No modifications detected.

如果按照你的方法配製:
<cruisecontrol>
  <project name="test">
     <schedule type="schedule" sleepSeconds="60"/>
 
    <sourcecontrol type="vss" autoGetSource="false">
   <executable>\\10.153.26.62\VSS\win32\SS.EXE
   </executable>(爲什麽用服務器上的SS.EXE??)
  <project>$/</project>
   <username>wgongwei</username>
   <password>"781230"</password>
   <ssdir>D:\Program Files\Microsoft Visual Studio\Common\VSS</ssdir>(又一疑惑?)
 <!--workingDirectory>d:\testndoc\test</workingDirectory-->
</sourcecontrol>

    <build type="nant">
      <executable>D:\nant-0.85\bin\nant.exe</executable>
      <baseDirectory>D:\testNdoc</baseDirectory>     
      <buildFile>D:\testNdoc\default.build</buildFile>
      <buildTimeoutSeconds>300</buildTimeoutSeconds>
    </build>
   
    <publishers>
      <xmllogger>
        <logDir>..\web\log</logDir>
      </xmllogger>
</publishers>

   <modificationDelaySeconds>2</modificationDelaySeconds>
  </project>
</cruisecontrol>
運行ccnet后,就出現下面問題(我按照你給我的提示做過改動,結果還是一樣的):
<cruisecontrol>
  <project name="test">
     <schedule type="schedule" sleepSeconds="60"/>
 
    <sourcecontrol type="vss" autoGetSource="false">
   <executable>\\10.153.26.62\VSS\win32\SS.EXE
   </executable>
  <project>$/</project>
   <username>wgongwei</username>
   <password>"781230"</password>
   <ssdir>D:\Program Files\Microsoft Visual Studio\Common\VSS</ssdir>
 <!--workingDirectory>d:\testndoc\test</workingDirectory-->
</sourcecontrol>

    <build type="nant">
      <executable>D:\nant-0.85\bin\nant.exe</executable>
      <baseDirectory>D:\testNdoc</baseDirectory>     
      <buildFile>D:\testNdoc\default.build</buildFile>
      <buildTimeoutSeconds>300</buildTimeoutSeconds>
    </build>
   
    <publishers>
      <xmllogger>
        <logDir>..\web\log</logDir>
      </xmllogger>
</publishers>

   <modificationDelaySeconds>2</modificationDelaySeconds>
  </project>
</cruisecontrol>


  回复  引用  查看    
#21楼 2004-10-12 11:51 | 悠悠      
忘了說一聲,我的操作系統是臺灣版的Win2000 Server
  回复  引用  查看    
#22楼 2004-10-13 09:34 | 悠悠      
     问题搞定了,谢谢你的帮助,由于我用的是台湾版本的操作系统,时间格式和ccnet要求的不一样,所以才检测不到modification,估计这个问题你也很难想到,今天把时间格式改了以一下就可以了。
      上面关于SS.EXE和scrsafe.ini的两种设置有什么区别?我还是不太清楚,烦请解释一下。好让小弟彻底明白。

  回复  引用  查看    
#23楼[楼主] 2004-10-13 09:59 | CoolBug      
昨天我看了你的这个FeedBack我就开会去了,结果我的邮件就没有再提示这个回复的消息.
你可以参考一下ccnet的文档. " ..\ccnet\doc\CCNET\VSS.html"
里边有写明:
sourcecontrol type="vss">
<executable>C:\Program Files\Microsoft Visual Studio\VSS\win32\SS.EXE</executable>
<project>$/CCNET</project>
<username>buildguy</username>
<password>buildguypw</password>
<ssdir>c:\repos\</ssdir>
</sourcecontrol>
project: the root project that CCNet should monitor
username: the VSS userid that be used to log into VSS
password: the password of the above user
ssdir (optional): this value sets the SSDIR environment variable which is used to specify the location of the SRCSAFE.INI file. If this environment variable is already set on the integration server then this property can be omitted.
executable (optional): this property points to the location of the SS.EXE executable. If VSS is installed on the integration server, the location of VSS will be read from the registry and this element can be omitted.
timeout (optional): this is how long (in milliseconds) the VSS operation will be permitted to run before timing out. The default value is 10 minutes.
上边例子用的都是本地的,所以你上边指的用本地和服务器的都没有关系.

  回复  引用  查看    
#24楼 2004-10-15 11:22 | littleseafowl      
你好,小弟不才,刚按照你的攻略进行配置,到CCNET时. 改了一下CCNET.CONFIG,运行时有以下错误:
2004-10-15 10:50:24: [MyProject:Debug]: VSS: \\ljg\vss\win32\SS.EXE history $/GetNews -R -Vd2004-10-15;10:50~1980-1-1;0:00 -Ylinjg,1 -I-Y
2004-10-15 10:50:24: [MyProject:Debug]: VSSPublisher: Building list for $/GetNews.....
2004-10-15 10:50:24: [MyProject:Info]: 40 modifications detected.
2004-10-15 10:50:24: [MyProject:Error]: INTERNAL ERROR: 值不能为空。
参数名: path
----------
System.ArgumentNullException: 值不能为空。
参数名: path
at System.IO.Directory.CreateDirectory(String path)
at ThoughtWorks.CruiseControl.Core.Sourcecontrol.Vss.GetSource(IntegrationResult result) in d:\sourceforge\ccnet\project\core\sourcecontrol\Vss.cs:line 176
at ThoughtWorks.CruiseControl.Core.Project.AttemptToRunIntegration(BuildCondition buildCondition, IntegrationResult result) in d:\sourceforge\ccnet\project\core\Project.cs:line 162
----------

是那个PATH为空引起的错误吗, 请问那个PATH是在哪里设置的? 谢谢.

  回复  引用  查看    
#25楼 2004-10-15 16:16 | littleseafowl      
你好,上面的PATH问题我已经解决了,添加了一行<workingDirectory>d:\dailybuild\test\local</workingDirectory> 便可以了,不过这样的话就是把VSS里面的代码拷到本地的目录,在NANT里面又拷了一遍,就等于拷了两遍,乱乱的挺别扭的.
现在CCNET是可以正常监测了,不过只能监测到有增加或者删除文件的情况,文件没变化(代码已经被修改)的签入是监测不到的,这又是怎么回事呢?

  回复  引用  查看    
#26楼[楼主] 2004-10-18 09:00 | CoolBug      
@littleseafowl : 我有好多天不在. 所以你的问题我没看. 你指代码被修改的 Check In 监测不到 我这里运行正常. 你对照一下我的代码. 你的CCNET里的VSS那块怎么写的?
  回复  引用  查看    
#27楼 2004-11-04 23:46 | 零下一度      
请问ccnet可以指定时间执行nant吗,我不想每次check in 代码就执行,也不想不用ccnet用批处理。

  回复  引用  查看    
#28楼[楼主] 2004-11-05 09:04 | CoolBug      
不可以。 我没有发现这个标签。
  回复  引用  查看    
#29楼 2004-11-10 14:32 | ice
10-11-04 14:29:33: [CruiseControl Server:Info]: Registered channel: tcp
10-11-04 14:29:33: [CruiseControl Server:Info]: CruiseManager: Listening on url: tcp://172.16.16.116:21234/CruiseManager.rem
10-11-04 14:29:33: [CruiseControl Server:Info]: Starting CruiseControl.NET Server
10-11-04 14:29:33: [CruiseControl Server:Info]: Reading configuration file "C:\Program Files\CruiseControl.NET\CruiseControl.NET-0.7.RC1\server\ccnet.config"
10-11-04 14:29:33: [CruiseControl Server:Info]: Starting integrator for project: MyProject
10-11-04 14:29:33: [MyProject:Info]: Starting integration for project: MyProject

为什么我的一运行到这里就停了啊,一点反应都没

  回复  引用    
#30楼 2004-11-10 14:34 | ice
我都对着你的和大家的代码试了N遍了,还是没反应
  回复  引用    
#31楼[楼主] 2004-11-11 12:56 | CoolBug      
你的 sleepSeconds设置是多少的? 而且你的VSS里的文件是否有改动?
  回复  引用  查看    
#32楼 2004-12-06 12:46 | hanfey
To ice,我和你遇到的情况一样,可惜解决不了啊,有没有其它人遇到的望指教,mail我一下,谢谢
  回复  引用    
#33楼[楼主] 2004-12-06 12:53 | CoolBug      
你的VSS开了吗?
  回复  引用  查看    
#34楼 2004-12-07 11:10 | hanfey
开了,但还是不行,一动不动的啊,真是郁闷:)
  回复  引用    
#35楼 2004-12-07 11:14 | hanfey
以下是我的cc.net的设置,请帮忙:
<cruisecontrol>
<project name="MyProject">
<webURL>http://localhost/ccnet</webURL>
<schedule type="schedule" sleepSeconds="6"/>
<sourcecontrol type="vss" autoGetSource="true">
<ssdir>e:\vss\</ssdir>
<executable>d:\program files\sourcesafe6.0c\win32\ss.exe</executable>
<project>$/</project>
<username>hanfey</username>
<password>hanfey</password>
</sourcecontrol>
<build type="nant">
<executable>d:\dailybuild\tools\nant\bin\nant.exe</executable>
<baseDirectory>d:\test</baseDirectory>
<buildFile>default.build</buildFile>
<targetList>
<target>run</target>
</targetList>
<buildTimeoutSeconds>300</buildTimeoutSeconds>
</build>
<modificationDelaySeconds>10</modificationDelaySeconds>
</project>
</cruisecontrol>

  回复  引用    
#36楼[楼主] 2004-12-21 20:55 | CoolBug      
晚上回来,我看了你的代码,没有错误。 你检查一下你的其他配置
1.你的VSS服务器是否可以正常运行?(vss服务器上的scrsafe.ini文件要共享)
2.文件夹命名尽量少用"-"和空格。
3.注意非简体系统的时区调整。
4.请下载最新最稳定版本(DailyBuild工具)。

  回复  引用  查看    
#37楼 2005-01-21 13:48 | chamcham
nant的一个问题.

在<solution>中指定了outputdir,如果outputdir目录中已经有编译产生的文件,那么虽然编译通过,新的产物也不会覆盖旧的,这是为什么?是不是有什么参数没有设置??
谢谢.

  回复  引用    
#38楼[楼主] 2005-01-21 14:45 | CoolBug      
没有其他的参数来设置,只要你的项目里的文件有改动的时候才会覆盖,否则不会变。你所谓"新的产物”其实是没有改动的"旧的产物".
  回复  引用  查看    
#39楼 2005-01-21 17:41 | chamcham
哦,明白了,再请教一个

VC6或者VC7的工程有什么自动编译的工具??
脚本怎么写??

  回复  引用    
#40楼[楼主] 2005-01-21 22:26 | CoolBug      
.Net方面自动编译的工具基本上都是参照Java方面来的。如NUnit(Unit),NAnt(Ant)等。我还没有听说过有vb6,vc7的。
  回复  引用  查看    
#41楼 2005-02-24 14:43 | Xia
You can just use Ant, CruiseControl, CppUnit ... if you're in VC6/7
  回复  引用    
#42楼 2005-03-03 09:20 | wjunfeng
I have a question in useing CruiseCnotrol,Can you help me?when I check in a file,ccnet.exe show:

A writable copy of D:\Work\GISM\v0.00\Code\ISMC\Report\PassWordFitSit.cs already
exists
A writable copy of D:\Work\GISM\v0.00\Code\ISMC\Report\PassWordFitSit.xsd alread
y exists
A writable copy of D:\Work\GISM\v0.00\Code\ISMC\Report\PassWordFitSit.xsx alread
y exists
A writable copy of D:\Work\GISM\v0.00\Code\ISMC\Report\PassWordSecurityPolicyRep
ort.cs already exists
A writable copy of D:\Work\GISM\v0.00\Code\ISMC\Report\PassWordSecurityPolicyRep
ort.rpt already exists
A writable copy of D:\Work\GISM\v0.00\Code\ISMC\Report\PolicyFitMachine.rpt alre
ady exists
A writable copy of D:\Work\GISM\v0.00\Code\ISMC\Report\PolicyFitMachine1.cs alre
ady exists
A writable copy of D:\Work\GISM\v0.00\Code\ISMC\Report\PolicyFitPc.cs already ex
ists
A writable copy of D:\Work\GISM\v0.00\Code\ISMC\Report\PolicyFitPc.xsd already e
xists
A writable copy of D:\Work\GISM\v0.00\Code\ISMC\Report\PolicyFitPc.xsx already e
xists
A writable copy of D:\Work\GISM\v0.00\Code\ISMC\Report\PolicyFitPcReport.cs alre
ady exists
A writable copy of D:\Work\GISM\v0.00\Code\ISMC\Report\PolicyFitPcReport.rpt alr
eady exists

  回复  引用    
#43楼[楼主] 2005-03-03 09:41 | CoolBug      
When you get a VSS file, the file is tagged as read-only. You cannot modify the file. When you check out the file for modification, the read-only flag is deleted. When you check it in, the file is flagged read-only again. This error has the following cause and solution:

You attempted to use the Get Latest Version command on a file that already exists on your hard disk in read/write form. If the local copy is read/write, you probably have it checked out; VSS does not replace the file, and displays this error message.
Click Yes or Yes All to replace the file or files with the current version in the VSS database.

Click No or No All to not replace the file(s).

Click Cancel to cancel the Get Latest Version command

  回复  引用  查看    
#44楼 2005-03-03 10:17 | wjunfeng
thanks for coolbug paladin's help,this problem have solved.before of modification default.build file is:
<target name="VSGet" depends="cleanSourceCode" description="Get the source from VSS Database">
<vssget user="wjunfeng"
password="wjunfeng"
localpath="D:\Work\GISM\v0.00\Code\ISMC"
recursive="true"
replace="true"
writable="true"
dbpath="\\10.98.29.149\VSSDataBase\GISM\srcsafe.ini"
path="$/KPD/GISM/V0.00/Code/ISMC"
/>

</target>

right confige should be writeable = "false"

  回复  引用    
#45楼 2005-08-17 16:46 | BlackRose[未注册用户]
我用nant命令时,出现:'fxcopcmd' failed to start.的提示,请问应该是什么样的问题?谢谢!

  回复  引用    
#46楼 2005-08-18 19:08 | Coolbug
你先单独用fxcop的命令,而不要在nant中去试一下。
  回复  引用    
#47楼 2005-10-19 14:18 | peng[未注册用户]
能对c,vc开发的软件进行DailyBuild嘛?
  回复  引用    
#48楼 2006-02-09 09:31 | MaxBoX      
DailyBuild:
你好~ 是这样的我在你的blog上面看见你的DailyBuild这发面的技术
我这段时间也在研究这方面的东西所以有些东西想向你请教

我在用<nunit>的时候编译从vss上面下来的文件时候,他编译结果不会生成在我指定的
目录下
代码如下
<?xml version="1.0" encoding="gb2312"?>
<project name="Projects" default="test">
<include buildfile="common.config"/>

<target name="test" description="查找并测试代码">
<!--获取测试项目工程名称,将solution.testprojects中用",",";"或" "分隔的工程
项目名提取出来,进行测试-->

<if test="${property::exists('solution.testprojects')}"> <foreach item="String" in="${solution.testprojects}" delim=";, " property="project"> <property name="testfile" value="F:\fw\DailyBuild\bin\netshop.dll"/>

<nunit2> <formatter type="Xml" usefile="true" extension=".xml" outputdir="f:\fw\NUnit\" /> <test assemblyname="F:\fw\DailyBuild\bin\netshop.dll" haltonfailure="false" /> </nunit2>

<nunit2report out="netshop.html" todir="F:\fw\DailyBuild\NUnit" >

<fileset>

<includes name="netshop\*.xml" />

</fileset>

</nunit2report>

</foreach>

</if> </target>
</project>
请你给点建议 想下你的原代码可以已经不能下了 或有什么帮助文档发到我这个邮箱就好 忠心表示感谢

  回复  引用  查看    
#49楼 2006-08-19 14:03 | leeairw
最近刚刚开始学习Daily Build,可是楼主的下载地址都不好用了?可以再上传新的地址让我下载吗?万分感谢!
  回复  引用    
#50楼 2007-11-08 22:42 | 北溟鱼逍遥游      
推荐一本书: Continuous Integration 还有就是Martin Fowler的文章, 在他的网站上有链接。
BTW, 楼主的资料链接失效了, 能否更新?谢谢

  回复  引用  查看    
#51楼[楼主] 2007-11-09 13:35 | CoolBug      
已更新,请下载。
  回复  引用  查看    
#52楼 2007-12-17 11:30 | ivylin1983[未注册用户]
我ccnet.config如下:
<cruisecontrol>
<project>
<name>Nant</name>
<workingDirectory>c:\ccnet\Nant</workingDirectory>
<modificationDelaySeconds>2</modificationDelaySeconds>
<labeller type="defaultlabeller">
<prefix>1.0.1</prefix>
<incrementOnFailure>true</incrementOnFailure>
</labeller>
<sourcecontrol type="vss" autoGetSource="true">
<executable>C:\Program Files\Microsoft Visual SourceSafe\ssexp.exe</executable>
<project>$/nant-0.85</project>
<username>guest</username>
<password>123</password>
<ssdir>C:\VSSDB</ssdir>
<workingDirectory>c:\ccnet\Nant</workingDirectory>
<cleanCopy>false</cleanCopy>
</sourcecontrol>
<tasks>
<msbuild>
<executable>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe</executable>
<workingDirectory>c:\ccnet\Nant</workingDirectory>
<projectFile>NAnt.sln</projectFile>
<buildArgs>/noconsolelogger /p:Configuration=Debug /v:diag</buildArgs>
<targets>Build</targets>
<timeout>5</timeout>
<logger>ThoughtWorks.CruiseControl.MsBuild.XmlLogger,C:\ccnet\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
</tasks>
</project>
</cruisecontrol>

运行时提示:Process timed out: C:\Program Files\Microsoft Visual SourceSafe\ssexp.exe history $/nant-0.85 -R -Vd2007-12-17;10:32~2007-12-16;10:20 -Yguest,123 -I-Y. Process id: 368. This process will now be killed.
2007-12-17 10:42:38,354 [Nant:WARN] The process has been killed: 368
2007-12-17 10:42:38,354 [Nant:ERROR] Exception: Source control operation has timed out.

我用的是英文版的Vss2005,这有影响吗?
另外我用Msbuild运行完成后,提示解决方案编译不通过,然后我怎么设置才能看到编译的细节,如是什么方法或者类出错吗?

紧急,请帮助


  回复  引用    
#53楼 2007-12-17 13:53 | ivylin1983[未注册用户]
Exception Message
Unable to execute transform: C:\ccnet\CruiseControl.NET\webdashboard\xsl\statistics.xsl

Exception Full Details
ThoughtWorks.CruiseControl.Core.CruiseControlException: Unable to execute transform: C:\ccnet\CruiseControl.NET\webdashboard\xsl\statistics.xsl ---> System.Xml.XmlException: Root element is missing. at System.Xml.XmlTextReaderImpl.Throw(Exception e) at System.Xml.XmlTextReaderImpl.ThrowWithoutLineInfo(String res) at System.Xml.XmlTextReaderImpl.ParseDocumentContent() at System.Xml.XmlTextReaderImpl.Read() at System.Xml.XPath.XPathDocument.LoadFromReader(XmlReader reader, XmlSpace space) at System.Xml.XPath.XPathDocument..ctor(TextReader textReader) at ThoughtWorks.CruiseControl.Core.Util.XslTransformer.Transform(String input, String xslFilename, Hashtable xsltArgs) --- End of inner exception stack trace --- at ThoughtWorks.CruiseControl.Core.Util.XslTransformer.Transform(String input, String xslFilename, Hashtable xsltArgs) at ThoughtWorks.CruiseControl.WebDashboard.Plugins.Statistics.ProjectStatisticsPlugin.Execute(ICruiseRequest cruiseRequest) at ThoughtWorks.CruiseControl.WebDashboard.MVC.Cruise.ServerCheckingProxyAction.Execute(ICruiseRequest cruiseRequest) at ThoughtWorks.CruiseControl.WebDashboard.MVC.Cruise.ProjectCheckingProxyAction.Execute(ICruiseRequest cruiseRequest) at ThoughtWorks.CruiseControl.WebDashboard.MVC.Cruise.CruiseActionProxyAction.Execute(IRequest request) at ThoughtWorks.CruiseControl.WebDashboard.MVC.Cruise.ExceptionCatchingActionProxy.Execute(IRequest request)
这种情况该怎么处理?是由于什么原因引起的呢?

  回复  引用    
#54楼 2008-05-20 09:22 | qingling[未注册用户]
老是提示:Unused node detected: <schedule type="schedule" sleepSeconds="60" />
是什么错误呀?
谢谢!

  回复  引用