【问题标题】:Running Cruise Control .NET as a Service将 Cruise Control .NET 作为服务运行
【发布时间】:2009-01-16 10:09:17
【问题描述】:

我已经配置和测试了一段时间的 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 @987654321@ to trunk]

2009-01-15 16:55:51,478 [Pepsi Webservices:DEBUG] 身份验证领域:https://ash-dev-005.[path 到存储库] Subversion 存储库

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

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

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

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

好消息是,当我以 Cruisecontrol 用户身份运行控制台应用程序时(无论是以 Cruisecontrol 身份登录还是仅使用 Run As),一切似乎都正常。

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

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

【问题讨论】:

    标签: svn configuration cruisecontrol.net


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 此类问题最好在 Google 用户组或开发者组中提出,除非您有可重现的问题。在这种情况下,您可以在 ThoughtWorks 网站上的 JIRA 中记录问题
    • 您的配置有问题。我们已经使用 CC.Net 多年了,我可以保证它确实使用了配置文件中的用户名和密码。
    【解决方案2】:

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

    【讨论】:

    • 确实如此,但是当我以我的身份运行控制台或服务时,我没有任何问题。我不知道为什么我必须手动缓存密码以及为什么 CCNet 不使用配置文件。
    【解决方案3】:

    与 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>
    

    【讨论】:

    • 我有类似的配置,即我指定了 svn 的用户名和密码,但 ccnet 似乎忽略了这一点。我现在已经完成了这项工作,但我会在五分钟后尝试在 VM 上重新生成它。
    【解决方案4】:

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

    【讨论】:

    • 我的日志没有任何密码命令行,只有用户名。我确实尝试重新启动服务以查看它是否会抱怨某些事情,但它从未抱怨过。还是谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 2013-03-09
    • 2013-05-27
    • 1970-01-01
    相关资源
    最近更新 更多