运行Cruise Control .NET即服务

时间:2009-01-16 10:09:17

标签: svn configuration cruisecontrol.net

我一直在使用Virtual PC来配置和测试CCNet一段时间。一切顺利,决定将配置转移到服务器位置 - 这也是可以预期的。一些调整和踢,我像以前一样运行。

问题是我们现在需要将CCNet作为服务运行,这证明是有问题的。

我已经为域级用户配置了与我相同的访问权限(毕竟,控制台应用程序已经像我一样运行了大约3个月),并将服务配置为在该用户下运行。

我启动了服务并挂了! [我不会向你提供强制服务停止和关闭打开的插座的细节]。当我最终能够再次运行控制台时,我执行了“运行方式”并输入了“cruisecontrol”用户详细信息,单击“确定”,发现通过https访问SVN时出现问题。我通过运行IE作为'cruisecontrol',导航到存储库并接受/安装证书来对其进行排序。 接下来当我将控制台应用程序作为'cruisecontrol'运行时,它会挂起以下几行:

2009-01-15 16:55:50,994 [Pepsi Webservices:DEBUG] Running Subversion with arguments : log --xml --limit 1 https://ash-dev-005.[path to trunk]

2009-01-15 16:55:51,478 [Pepsi Webservices:DEBUG] Authentication realm: https://ash-dev-005.[path to repository] Subversion Repositories

超时后我可以关闭控制台,正常运行它(就像我一样),运行正常。我尝试以“cruisecontrol”用户身份登录服务器并尝试运行控制台但结果相同。

现在,事情就是这样:今天早上我作为'cruisecontrol'用户登录服务器并打开了一个命令窗口。我导航到我项目的主干并键入'svn update'并提示输入密码。

这并不奇怪,但该提示上方的行是上面的“身份验证领域:......”行!查看日志文件,肯定在CCNet终止进程后会出现密码提示。 CCNet / SVN是否在等待密码输入然后超时?如果是这样,为什么它不使用配置文件中的那个?

我输入了密码,更新继续进行而没有任何问题(因此cruisecontrol用户确实有权从服务器访问存储库)。我再次输入命令,第二次没有提示,所以我尝试打开一个新的命令窗口并重新运行命令 - 仍然没有提示输入密码,所以我退出并重新登录(作为cruisecontrol)并再次尝试但仍未提示

好消息是,当我作为cruisecontrol用户运行控制台应用程序时(无论是以cruisecontrol还是使用Run As登录),一切似乎都没问题。

那么我的问题是什么?     那么,为什么CCNet没有在配置文件中使用密码?     如何在命令提示符下输入密码解决了问题(并且会持续存在)?

任何建议/见解表示赞赏。

4 个答案:

答案 0 :(得分:2)

嗯 - 我可能在这里回答了我自己的问题(或者不是,只有时间会证明)。

出于某种原因,CCNet似乎没有在配置文件中使用凭证(不知道为什么)。当它调用SVN时,它会等待输入密码,即使用户看不到密码,然后在没有密码时超时。

通过从命令行访问SVN,可以看到密码提示并输入,此外密码缓存在该用户的加密文件内的%app_data%\ Subversion \ auth \ svn.simple中。这就是为什么后续命令不会提示输入密码以及为什么控制台应用程序将运行没有任何问题的原因。

我现在要配置CCService,希望这可以和控制台应用程序现在一样工作。

如果您有任何类似的经历,请告诉我。与此同时,我可能会向ThoughtWorks提出这个问题。

答案 1 :(得分:1)

据我记得,当您将cc.net作为服务运行时,它会使用另一个配置文件,然后将其作为控制台应用程序运行。 (ccservice.exe.config而不是cc.exe.config)。

答案 2 :(得分:1)

与Frederik的响应相关 - 在我们的服务器上,我们在项目本身中指定了subversion凭据。其中一个项目的sourcecontrol块看起来像这样:

<sourcecontrol type="svn">
    <trunkUrl>http://myserver/svn/myproject/trunk</trunkUrl>
    <workingDirectory>C:\source\MyProject</workingDirectory>
    <username>foo</username>
    <password>bar</password>
    <autoGetSource>true</autoGetSource>
</sourcecontrol>

答案 3 :(得分:0)

戴夫 如果CruiseControl在配置文件中使用密码,则很容易诊断,因为您将在日志中看到命令行,如果正在使用密码参数和密码,则会传递给svn。如果您在配置文件中有密码和用户并且没有传递它们,那么我要检查的第一件事是您的配置文件是有效的,文件系统中的配置文件是实际使用的。如果对配置文件进行了无效更改,只要服务正在运行,CC.NET就会忽略它,只是继续使用它在内部缓存的版本而没有任何警告或消息。因此,验证的唯一方法是通过Web仪表板查看配置并确保它反映您的期望,或者您可以退回服务,此时它将停止并指出您的错误。最后,你可以通过使用subversion缓存密码来解决这个问题。