Hudson作为Windows上的服务 - 文件系统权限

时间:2009-10-20 05:03:01

标签: windows permissions service hudson

几个月来,我们在用户帐户下的Windows XP“服务器”上运行Hudson。这意味着有人手动登录并通过.bat文件启动Hudson(设置一些环境变量,然后运行java -jar hudson.war)

然而,最近几次停电导致需要在服务器启动时自动启动Hudson。所以我转向看Hudson作为Windows服务运行。这将允许Hudson自动启动Windows,并且不需要特定的用户帐户。

我已经设法将其安装为服务,并且我已经更改了hudson.xml,以便直接运行批处理文件而不是java。我这样做是因为我们在Cygwin上使用git构建,并且在bash启动java / Hudson之前必须设置SHELLOPTS = igncr。

该服务似乎正常启动,并且Web界面存在且功能正常。但是,Hudson现在运行的用户似乎无法在C:\ hudson中编写/修改现有作业:

FATAL: Could not checkout 4a121704f178123c36f6ab4e861b3c771953b187
hudson.plugins.git.GitException: Could not checkout 4a121704f178123c36f6ab4e861b3c771953b187
    at hudson.plugins.git.GitAPI.checkout(GitAPI.java:382)
    at hudson.plugins.git.GitSCM$4.invoke(GitSCM.java:529)
    at hudson.plugins.git.GitSCM$4.invoke(GitSCM.java:521)
    at hudson.FilePath.act(FilePath.java:676)
    at hudson.FilePath.act(FilePath.java:660)
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:521)
    at hudson.model.AbstractProject.checkout(AbstractProject.java:833)
    at hudson.model.AbstractBuild$AbstractRunner.checkout(AbstractBuild.java:314)
    at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:266)
    at hudson.model.Run.run(Run.java:948)
    at hudson.model.Build.run(Build.java:112)
    at hudson.model.ResourceController.execute(ResourceController.java:93)
    at hudson.model.Executor.run(Executor.java:118)
Caused by: hudson.plugins.git.GitException: Error performing c:\cygwin\bin\git.exe checkout -f 4a121704f178123c36f6ab4e861b3c771953b187
    at hudson.plugins.git.GitAPI.launchCommandIn(GitAPI.java:302)
    at hudson.plugins.git.GitAPI.launchCommand(GitAPI.java:276)
    at hudson.plugins.git.GitAPI.checkout(GitAPI.java:380)
    ... 12 more
Caused by: hudson.plugins.git.GitException: Command returned status code 1: error: git checkout-index: unable to create file .gitignore (Permission denied)
error: git checkout-index: unable to create file .gitmodules (Permission denied)
error: git checkout-index: unable to create file Makefile (Permission denied)

我不是一个真正的Windows类型的人,但我想也许如果我为用户“LOCAL_SERVICE”向C:\ hudson添加了“完全访问”安全权限,那么可能会修复它。唉,事实并非如此。我还尝试了用户“Everyone”的完全权限,但这也没有解决问题。

我在这里缺少什么?有没有办法允许进程作为服务运行自由访问本地磁盘上的子目录?

2 个答案:

答案 0 :(得分:4)

如何更改运行该服务的用户。因此,创建一个新的“技术”用户帐户,其密码无人知晓(保险箱中的信封除外),并使该用户成为所有hudson作业文件夹的所有者。这也有一个优点,你可以从哈德森获取权限。这样,Hudson作业就无法在您的Windows机器上充当管理员。

与预定作业相比,服务的优势在于它在崩溃时重新启动。

答案 1 :(得分:0)

您可以使用任务计划程序将进程设置为在登录时运行,然后让用户帐户自动登录,而不是将其作为服务运行。这可能比处理服务权限要麻烦得多,特别是如果你必须与其他机器通信。