4

我已经配置和测试 CCNet 有一段时间了,现在使用 Virtual PC 来托管它。一切都很顺利,决定将配置转移到服务器位置——这和预期的一样顺利。一些调整和踢腿,我让它像以前一样运行。

问题是我们现在需要将 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 身份登录还是仅使用 Run As),一切似乎都正常。

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

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

4

4 回答 4

2

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

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

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

我现在要配置 CCService,因此希望它能够像控制台应用程序一样正常工作。

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

于 2009-01-16T11:27:36.827 回答
1

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

于 2009-01-16T11:36:50.177 回答
1

与 Frederik 的响应相关 - 在我们的服务器上,我们在项目本身中指定了颠覆凭证。这些项目之一的源代码控制块看起来像这样:

<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>
于 2009-01-21T20:24:17.900 回答
0

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

于 2009-01-21T00:00:23.843 回答