Cruisecontrol cruisecontrol 发送域内邮件如何配置?

violin · 发布于 2009年11月04日 · 58 次阅读
96

1、公司内部局域网上使用 SVN,采用域认证的方式,格式为:domain\username ,现在要求在发现采用CC构建失败后可以给提交该部分代码的开发人员发送构建失败的内网邮件。 2、公司域内成员的邮件系统采用foxmail, 假设公司域名为A,则成员的邮件地址格式为:[email=“[email]username@A.com[/email]]“[email]username@A.com[/email][/email]” ,( 公司内外网采用的是相同的域名,只不过内外网邮件服务器用的不一样 ) (假设公司域名为A,内网邮件格式: [email=“[email]username@A.com[/email]] “[email]username@A.com[/email] [/email] svn登录账户域前缀为B:则格式为:B\username)

我在cruisecontrol的config.xml文件中关于邮件的代码设置: [color=blue] 49 defaultsuffix="@A.com" 50 username=" [email=123@A.com][color=blue]123@A.com [/email][color=blue]" 51 password="123" 52 returnname="CruiseControl" 53 returnaddress=" [email=456@A.com][color=blue]456@A.com [/email][color=blue]" 54 subjectprefix="构建日志" 55 xsldir="webapps/cruisecontrol/xsl" 56 css="webapps/cruisecontrol/css/cruisecontrol.css"> 57 58 59
60 [color=black]这样设置的话,我总觉得有点问题,好像没有跟SVN的域账户关联,而且公司域名服务器是不是也应该有些设置,在运行cruisecontrol.bat时果然报错了,应该是配置文件错误造成的,但是我也不知道具体应该怎么修改,不知道大家在对于域内发邮件是怎么设置的,希望大家能指点一下,非常感谢!

运行cruisecontrol.bat报错如下: Starts a continuous integration loop cruisecontrol [options] Build loop options are: -configfile file configuration file; default config.xml -debug set logging level to DEBUG -log4jconfig url URL to a log4j config (example: "file:/c:/mylog4j.xml") -? or -help print this usage message Options when using JMX Note: JMX server only started if -jmxport and/or -rmiport specified -jmxport [number] port of the JMX HttpAdapter; default 8000 -rmiport [number] RMI port of the Controller; default 1099 -user username username for HttpAdapter; default no login required -password pwd password for HttpAdapter; default no login required -xslpath directory location of jmx xsl files; default files in package -agentutil [true/false] load JMX Build Agent utility; default is true Options when using embedded Jetty -webport [number] port for the Reporting website; default 8080, removing this propery will make cruisecontrol start without Jet ty -jettyxml file Jetty configuration xml. Defaults to jetty.xml -postenabled enabled switch of posting current build information to dashboard default is true -dashboardurl url the url for dashboard (used for posting build information) default is [url=http://localhost:8080/dashboardhttp://localhost:8080/dashboard[/url]] -postinterval interval how frequently build information will be posted to dashboard default is 5 (in second). -ccname name A logical name which will be displayed in the Reporting Application's status page.

共收到 35 条回复
96
scmroad · #1 · 2009年11月04日

哪里有错误信息?

96
scmroad · #2 · 2009年11月04日

发送邮件的邮箱帐户用户名密码和svn的用户密码是没有关联的。

你可以用相同的帐户相同的密码,也可以分开设置,用两个帐户的信息,一个是用来登录svn,一个是用来发邮件

96
violin · #3 · 2009年11月04日

这个上面没报错吗,但是运行cruisecontrol.bat时,窗口弹出一下就没了,在cmd下面执行.bat文件才看到上面报的那些信息,还有一句是找不到config.xml文件,这种情况以前也出现过,一般是config.xml编写错误,运行cruisecontrol.bat窗口弹出一下就没了

96
scmroad · #4 · 2009年11月04日

就是要在命令行下执行,这样才可以得到更多的信息。你可以尝试 .bat -debug 模型运行,请帖出更详细的信息

[[i] 本帖最后由 scmroad 于 2009-11-4 13:42 编辑 ]

96
violin · #5 · 2009年11月04日

[cc]十一月-04 13:31:07 Main - error setting config file on controller net.sourceforge.cruisecontrol.CruiseControlException: Config file not found: C:\Documents and Settings\jing_luo\config.xml at net.sourceforge.cruisecontrol.CruiseControlController.setConfigFile(CruiseControlController.java:88) at net.sourceforge.cruisecontrol.Main.createController(Main.java:159) at net.sourceforge.cruisecontrol.Main.start(Main.java:126) at net.sourceforge.cruisecontrol.launch.Launcher.run(Launcher.java:259) at net.sourceforge.cruisecontrol.launch.Launcher.main(Launcher.java:117)

96
scmroad · #6 · 2009年11月04日

你明显是打开了一个cmd窗口,然后把那个bat文件拖拽过去直接就执行了。

你要打开一个cmd窗口,然后cd 到 cruisecontrol的根目录下去执行,类似下面的位置: D:\D\DevEnv\CruiseControl 那底下默认就有个config.xml文件的

你再试试

96
violin · #7 · 2009年11月04日

谢谢提醒,解决了,原来是配置文件中有中文字符,替换成英文之后运行是没报错了,不过邮件目前还未有收到,今天下午再测试下, 另外还有一个问题是,为什么在http://localhost:8080/dashboard/tab/dashboardbuild时会变成绿色的圈,构建完后就立即成灰色的了,但构建结果显示是成功的,它应该显示的是绿色的方块以表示构建成功的吧,如果不成功也应该是红色的方块才对啊页面,项目都是灰色的,只是在

96
violin · #8 · 2009年11月04日

还有一个问题就是如果build失败,cc会检测出在上次build跟本次build之间的代码修改信息,及修改人,那么在失败时,如果要给在这之间提交代码的人发送邮件,可以通过参数设置来进行吗,我上面那样写的是把收件人地址写死了的,应该怎么灵活设置呢

96
scmroad · #9 · 2009年11月04日

violin 于 2009-11-4 14:21 发表
还有一个问题就是如果build失败,cc会检测出在上次build跟本次build之间的代码修改信息,及修改人,那么在失败时,如果要给在这之间提交代码的人发送邮件,可以通过参数设置来进行吗,我上面那样写的是把收件人地址写死了的,应该 ... [/quote]

可以通过build 成功发送给谁,失败发送给谁来设置。但是我们的做法一般是发给这个项目组的所有人员。

ps:让PM给出一个名单,看谁应该在里边,然后给这个项目组创建一个mail group,直接发给这个组就可以了。

96
violin · #10 · 2009年11月04日

恩,good idea,:lol ,不过到现在为止,都build好几次了,也没收到邮件,貌似邮件没有发出:( 不知道咋回事 57 58 59
60

[[i] 本帖最后由 violin 于 2009-11-5 13:32 编辑 ]

96
scmroad · #11 · 2009年11月04日

violin 于 2009-11-4 14:49 发表
恩,good idea,:lol ,不过到现在为止,都build好几次了,也没收到邮件,貌似邮件没有发出:( 不知道咋回事

57
58
59
60 ... [/quote]

把邮件用户名改成“domain\username” 如: username="domain\username"

96
violin · #12 · 2009年11月04日

scmroad 于 2009-11-4 15:10 发表

把邮件用户名改成“domain\username” 如: username="domain\username" [/quote]

加上域名之后,build成功可以收到邮件,但是发现了另一个问题: 当build失败时,假设Z提交了代码导致编译不通过,则cruisecontrol会自动把邮件发送给Z,而Z在svn上的账户为domain\Z, 所以CC自动发邮件给他时采用的地址为domain[email]Z@A.com[/email] 这样就会报非法的字符:domain[email]Z@A.com[/email] 邮件格式前面不能加domain\,这个问题要怎么设置呢?

96
scmroad · #13 · 2009年11月04日

violin 于 2009-11-4 16:36 发表
加上域名之后,build成功可以收到邮件,但是发现了另一个问题: 当build失败时,假设Z提交了代码导致编译不通过,则cruisecontrol会自动把邮件发送给Z,而Z在svn上的账户为domain\Z, 所以CC自动发邮件给他时采用的地址为dom ... [/quote]

可以收到邮件了就是个好现象阿,呵呵

请帖你邮件部分的配置和最后的出错log, 谢谢

96
violin · #14 · 2009年11月04日

太谢谢你了,在你的提示下,终于可以收邮件了, 我邮件部分配置:

如果项目build成功,这样配置是可以收到邮件的 但是如果项目build失败,在发送给检测到的提交代码的那个人 (Z ) 时则报错: caused by:javax.mail.internet.AddressException:illegal character in lacal name in string ''domain[email=Z@A.com]Z@A.com[/email]"

[[i] 本帖最后由 violin 于 2009-11-5 13:31 编辑 ]

96
scmroad · #15 · 2009年11月04日

violin 于 2009-11-4 17:35 发表
太谢谢你了,在你的提示下,终于可以收邮件了, 我邮件部分配置:

如果项目build成功,这样配置是可以收到邮件的 但是如果项目build失败,在发送给检测到的提交代码的那个人 (Z ) 时则报错: caused by:javax.mail.internet.AddressException:illegal character in lacal name in string ''domain[email=Z@A.com]Z@A.com[/email]"[/quote]

你可以把 都换成同一个邮箱,试一试,看是什么情况。

96
violin · #16 · 2009年11月04日

scmroad 于 2009-11-4 17:47 发表

你可以把

都换成同一个邮箱,试一试,看是什么情况。 [/quote]

还是一样的,因为构建失败时发送给Z的邮件是自动发送的,不是我指定的邮箱地址

96
scmroad · #17 · 2009年11月05日

violin 于 2009-11-4 18:09 发表
还是一样的,因为构建失败时发送给Z的邮件是自动发送的,不是我指定的邮箱地址 [/quote]

为啥是自动的呢?不是你设置成哪个地址就是哪个邮箱地址么?

96
violin · #18 · 2009年11月05日

失败时,它是先检测谁做了修改,在这个人的svn帐号后面加的邮件后缀,会自动给提交修改的人发送邮件,估计这个机制是在CC源码里面设置的,我在想是不是如果能找到CC的源码,把这个地方修改一下,就可以过滤掉了

96
xiaoxiang7788 · #19 · 2009年11月05日

violin 于 2009-11-4 17:35 发表
.......... .......... .......... caused by:javax.mail.internet.AddressException:illegal character in lacal name in string ''domain[email=Z@A.com]Z@A.com[/email]"[/quote]

你应该知道了, Cruisecontrol在发送邮件的时候, 邮件地址是拼凑起来的. 前缀domain\Z是来自于SVN, 后缀是来自于它的配置[color=black]defaultsuffix="@A.com"

我了解的有两个方法:

第一个: 为CC加一个mailaddress.properties文件, 这个文件可以将SVN的帐号(domain\Z)转为email地址的, 比如 domain\Z= [email=Z@A.com]Z@A.com[/email]

[color=magenta]Note: 这个方法我只是了解, 具体怎么实现我也不太清楚. 没有实践过. 网上应该有相关的资料.:D

第二个: 修改Cruisecontrol源码. 但这个方法我不太推荐, 有点得不偿失.

给你个建议: 直接使用Hudson这个CI工具, 替换Cruisecontrol. 两个都是开源的, Hudson对这种问题处理的相当happy, 而且其它功能, 可操作性等等绝对比Cruisecontrol要强悍的多.

96
scmroad · #20 · 2009年11月05日

xiaoxiang7788 于 2009-11-5 11:06 发表
Cruisecontrol在发送邮件的时候, 邮件地址是拼凑起来的. 前缀domain\Z是来自于SVN [/quote]

为什么Cruisecontrol的邮件地址前缀是来自svn?而不是来自于下面指定的地址?

这个是怎么能来自于SVN的呢?

96
xiaoxiang7788 · #21 · 2009年11月05日

如果要使用检测两次build之间谁提交了代码, 在失败后把邮件发送给提交者. 就是这样呢.

这种的话是说, 在cruisecontrol里面把邮件地址写死掉了, 如果build成功会发送给 如果失败则发送. 这种格式是固定死的.

violin要达到的效果是, 如果build失败, 则发送给造成失败的提交者(即上次成功----这次失败之间提交代码的人员). 直接使用是不行的.

96
violin · #22 · 2009年11月05日

xiaoxiang7788 于 2009-11-5 11:06 发表

你应该知道了, Cruisecontrol在发送邮件的时候, 邮件地址是拼凑起来的. 前缀domain\Z是来自于SVN, 后缀是来自于它的配置defaultsuffix="@A.com"

我了解的有两个方法:

第一个: 为CC加一个mailaddress.properties ... [/quote]

:D,版主你好厉害, 恩,这是个好办法,我现在正在尝试使用这个方法,先编写mailaddress.properties ,将邮件地址转换,然后在CC中调用此文件:

不过现在构建都是成功的,还测试不了,等下一次构建失败时看它的效果了, 呵呵,谢谢你的建议,hudson我之前还没接触过,想知道下跟CC的区别,看哪个对于我们来说更好用,希望各位前辈能给点建议,谢谢了

[[i] 本帖最后由 violin 于 2009-11-5 14:04 编辑 ]

96
scmroad · #23 · 2009年11月05日

xiaoxiang7788 于 2009-11-5 11:30 发表
如果要使用检测两次build之间谁提交了代码, 在失败后把邮件发送给提交者. 就是这样呢. 这种的话是说, 在cruisecontrol里面把邮件地址写死掉了, 如果build成功会发送给 如果失败则发送.这种格式是固定死的. violin要达到的效果是, 如果build失败, 则发送给造成失败的提交者(即上次成功----这次失败之间提交代码的人员). 直接使用是不行的.[/quote]

明白了。

那请问如果你想这样,你要如何配置?因为即便你写到另外一个文件 mailaddress.properties 里,然后再引用进来 ,也是固定的,请问你如何针对每个人造成的失败构建发送邮件呢?在这一点上还不是很明白。

96
violin · #24 · 2009年11月05日

scmroad 于 2009-11-5 12:22 发表

明白了。

那请问如果你想这样,你要如何配置?因为即便你写到另外一个文件 mailaddress.properties 里,然后再引用进来 ,也是固定的,请问你如何针对每个人造成的失败构建发送邮件呢?在这一点上还不是很明白。 ... [/quote]

你可以把你们项目组的人员都列出来,在mailaddress.properties 里全转换好,在发送构建失败的邮件时,如果碰到提交失败的人,它会先在这个文件里查找指定人的别名,然后再发送,没有涉及到造成构建失败的代码提交人员邮件列表,它可以不用管

96
scmroad · #25 · 2009年11月05日

[font=Helvetica,Arial,sans-serif][size=14px] violin 于 2009-11-5 12:35 发表
你可以把你们项目组的人员都列出来,在mailaddress.properties 里全转换好,在发送构建失败的邮件时,如果碰到提交失败的人,它会先在这个文件里查找指定人的别名,然后再发送,没有涉及到造成构建失败的代码提交人员邮件列表 ... [/quote] [/font] 等你设置好,试验成功之后,欢迎你来分享你是怎么做的,谢谢

96
xiaoxiang7788 · #26 · 2009年11月05日

对的. 等你的试验结果哈, 我们都很期待.

4
laofo · #27 · 2009年11月05日

violin 于 2009-11-5 12:35 发表
你可以把你们项目组的人员都列出来,在mailaddress.properties 里全转换好,在发送构建失败的邮件时,如果碰到提交失败的人,它会先在这个文件里查找指定人的别名,然后再发送,没有涉及到造成构建失败的代码提交人员邮件列表 ... [/quote]

想法不错, Cruisecontrol 和 svn 结合现在支持这个?看来我out了

如果Cruisecontrol 和 svn 内嵌的支持,而不用 CM 用脚本来完成,那这个功能就真的太好了。

96
violin · #28 · 2009年11月05日

哈哈,会的,希望可以试验成功,

96
violin · #29 · 2009年11月05日

好消息:试验是成功的,详细设置如下: 1.编写mailaddress.properties
将帐号与邮件转换:如:domain\Z=Z@A.COM 2.CC配置文件中调用:

当构建失败时,会自动给造成失败的提交者发送邮件

96
xiaoxiang7788 · #30 · 2009年11月05日

恭喜恭喜

96
xiaoxiang7788 · #31 · 2009年11月05日

violin 于 2009-11-5 11:39 发表

hudson我之前还没接触过,想知道下跟CC的区别,看哪个对于我们来说更好用,希望各位前辈能给点建议,谢谢了 [/quote]

具体hudson是什么,怎么使用。 可以先参看下论坛的Hudson版块。从CI工具的角度来看,绝对是Hudson比CC好用,呵呵。我们项目组在一年前也是使用CC的,但是现在已经换成了Hudson。个人觉得效果挺好。

96
scmroad · #32 · 2009年11月05日

violin 于 2009-11-5 14:22 发表
试验结果 好消息:试验是成功的,详细设置如下: 1.编写mailaddress.properties
将帐号与邮件转换:如:domain\Z=Z@A.COM 2.CC配置文件中调用:

当构建失败时,会自动给造成失败的提交者发送邮件 [/quote]

恭喜恭喜。有一个问题: 如果build失败,cc如何检测出在上次build跟本次build之间的代码修改信息,及修改人?? 这里是不是应该检测出上次成功build和这次build之间的代码提交者?

96
violin · #33 · 2009年11月05日

呵呵,谢谢谢谢,小happy一下,不过问题不断啊,我还得继续研究,不断学习:D 现在又有一个新的问题:发现CC上显示的构建时间不对,发出的报告,跟实际时间相差了9个小时,不知道这个在什么地方可以改过来 回头有时间,我再研究下hudson,:D

96
violin · #34 · 2009年11月05日

scmroad 于 2009-11-5 14:44 发表

恭喜恭喜。有一个问题: 如果build失败,cc如何检测出在上次build跟本次build之间的代码修改信息,及修改人?? 这里是不是应该检测出上次成功build和这次build之间的代码提交者? ... [/quote]

这个它会自动解决的:运行CC后,在安装CC的机器上,查看这个页面:[url=http://localhost:8080/cruisecontrol/buildresultshttp://localhost:8080/cruisecontrol/buildresults[/url]] 就可以看到你所提出的那些信息了,发送邮件时,实际上看到的就是这个构建结果的页面

96
scmroad · #35 · 2009年11月05日

violin 于 2009-11-5 14:55 发表
这个它会自动解决的:运行CC后,在安装CC的机器上,查看这个页面:http://localhost:8080/cruisecontrol/buildresults 就可以看到你所提出的那些信息了,发送邮件时,实际上看到的就是这个构建结果的页面 ... [/quote]

不错的功能,我回去研究研究,hehe thx

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册