使用Cruise几日发现的问题#768

Subscribe to 使用Cruise几日发现的问题 6 post(s), 3 voice(s)

 
Avatar zhmocean 6 post(s) #2015

用Cruise有几日了,经过一段时间的研究发现如下几个问题:
1、Agent在run的时候似乎是把pipelines下的相应repository删除然后重新check out,而这个时候,经常由于某种未知原因(有时候是杀毒软件占用),这个repository无法正常删除,导致run失败。不知道是否能够增加这个动作的可靠性或者等待时间。
比如,我提交一个版本的代码,Cruise在检测到变更后开始工作,但很多时候我都会收到以下错误:
java.lang.RuntimeException: org.tmatesoft.svn.core.SVNException: svn: Failed to add directory ‘Sln’: object of the same name already exists
这个’Sln’是不固定的,也可能是repository中的任意一个文件夹

2、系统网络连接断开的时候会触发一个Cruise的动作,这个时候我会收到以下错误:
2008-08-06 20:36:10 +0800 – Error occurred while scheduling pipeline:
java.lang.RuntimeException: org.tmatesoft.svn.core.SVNException: svn: PROPFIND request failed on ’/svn/QHPackage/trunk/DotNet’
svn: No route to host: connect

我的Server和Agent安装在同一个机器上

3、Cruise run的速度有待改善,以前用CC构建2分钟的项目,移植到Cruise下之后达到了10分钟(每个job)

 
Avatar Yandong Moderator 17 post(s) #2025

zhmocean, 你好:

多谢您的反馈!

1. cruise在run的时候,第一次会在agent端checkout代码,以后如果material的url没有变化,只会svn update,不会删掉重新checkout. 另外,关于svn “Failed to add directory ‘Sln’”的错误,我们以前遇到过类似的问题,是由不正确的checkin操作导致的。如果还有问题,请详细描述,以便于我们帮助解决。
2. cruise server每隔一段时间会连接repository来检查是否有新的代码checkin, 所以网络断开时会有这种错误。
3. 这个问题,您能详细描述一下么?我们目前无法复现。

Thanks,
Yandong

 
Avatar zhmocean 6 post(s) #2120

感谢耐心解答。
1、今天我注意看了一下,每次agent都会删除repository,然后再次checkout。
在这里我到是觉得每次都删除是合理的,因为我可能会让一个agent来run两个job,但编译环境是不一样的,比如,我现在在一个stage中有一个VS2003的job和一个VS2005的job,他们使用了同一个repository(Agent目录下是一个),但是VS环境在编译的时候要求项目目录是干净的,比如一个项目用VS2005编译后不清理,再用VS2003编译会出错,所以删除原来的repository会防治这种情况的产生。
不知道我这种配置是不是存在一些问题,或者每次都删除有一定的原因,望指点。

2、-

3、我仔细观察了下,两者差的时间都浪费在了prepare上,应该是合理的。

另外,我想问一下,如果一个pipeline有2个stage,那么在第二个run的时候,是不是会删除第一个的repository,如果是,第二个stage怎么继承第一个生成的文件呢?是不是只能通过ANT脚本来控制?比如,我有dev和test两个stage,test需要使用dev编译产生的库文件,那如果每个stage都会先清理repository,我是不是还要在第二个stage中再次运行一次dev的过程。
还有,每个job的Artifacts是不是会在启动一个job的时候分发给agent?

谢谢

 
Avatar Yandong Moderator 17 post(s) #2122

Hi zhmocean,

1. 对于属于同一个pipeline下stage下的job, 在第一次checkout之后如果pipeline material的配置不变,下次再在这个agent上build的时候是不会删除以前的checkout的,只会update以节省时间,这是cruise的预期。但是,您提到在您host的cruise环境里,同一pipeline下的job,每次build,agent都会删除以前的code重新checkout, 如果确实是cruise的行为,您能告诉我们您的pipeline material的配置以方便我们分析么?

对于您所要求的,每次编译时项目目录干净,建议配制成VS2003的job和VS2005的job用不同的agent去build。这样两个job可以同时build, 既能提高速度,又能减少干扰。配置方法也很简单,配置成job的resource和agent的resource匹配即可。

3. 一个pipeline的2个stage,第一个stage的第一个job运行时会checkout或者update代码,以后的job(只要是在这个pipeline下,不论哪个stage)再在这个agent上运行同一版本的build时,会继续用这个code来运行,不会重新checkout,这是cruise的行为。也就是说,dev stage运行完后,再运行同一版本的test stage时cruise不会删除以前的repository code.

对于每个job的artifacts, 在job运行完后,artifacts会从agent端publish到server端。这样artifacts就可以从job detail页面或者cruise server的文件系统上看到.

Thanks,
Yandong

 
Avatar zhmocean 6 post(s) #2123

因为现阶段我们的服务器资源并不多,仅有一台机器在运行Agent,所以短时间内无法配置多个Agent,另外,住处的试验机也仅有一台,同样无法配置多个Agent,不知道这种情况下如何解决。

目前,我是使用ANT脚本来自己创建一个临时目录来保存build的生成文件,以备后续的stage使用。

 
Avatar Qiao Liang Administrator 18 post(s) #2130

在这台机器上装VM,把另一个Agent安装在VM上。当然可能会影响速度。