代码之家  ›  专栏  ›  技术社区  ›  DilbertDave

将Cruise Control.net作为服务运行

  •  4
  • DilbertDave  · 技术社区  · 16 年前

    我配置和测试ccnet有一段时间了,现在使用虚拟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:51478[百事网络服务:调试]认证领域: https://ash-dev-005.[路径 到存储库]Subversion存储库

    超时后,我可以关闭控制台,正常运行(如我),运行正常。我尝试以“CruiseControl”用户的身份登录到服务器,并尝试运行控制台,但结果相同。

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

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

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

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

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

    感谢您的建议/见解。

    4 回复  |  直到 16 年前
        1
  •  2
  •   DilbertDave    16 年前

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

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

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

    我现在要配置ccservice,希望它能像控制台应用程序现在那样工作。

    如果你有类似的经历,请告诉我。在此期间,我可以提出这个问题与思考工作。

        2
  •  1
  •   Frederik Gheysels    16 年前

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

        3
  •  1
  •   Pedro    16 年前

    与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>
    
        4
  •  0
  •   Alex    16 年前

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