【发布时间】:2010-12-08 05:34:24
【问题描述】:
几个月来,我们一直在用户帐户下的 Windows XP“服务器”上运行 Hudson。这意味着有人手动登录并通过 .bat 文件启动 Hudson(设置一些环境变量,然后运行 java -jar hudson.war)
但是,最近几次断电导致要求 Hudson 在服务器启动时自动启动。因此,我转向查看作为 Windows 服务运行的 Hudson。这将允许 Hudson 自动启动 Windows,并且不需要特定的用户帐户。
我已经设法将它作为服务安装,并且我已经更改了 hudson.xml 以便运行批处理文件而不是直接运行 java。我这样做是因为我们在 Cygwin 上使用 git 构建,并且 SHELLOPTS=igncr 必须在 bash 启动 java/Hudson 之前设置。
服务似乎可以正常启动,并且 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”的完全权限,但这也没有解决问题。
我在这里缺少什么?有没有办法让作为服务运行的进程不受限制地访问本地磁盘上的子目录?
【问题讨论】:
-
检查你的服务的工作目录是什么。 AFAIR,默认情况下是 Windows\System32。如果是这样,请明确为 git 提供目标目录。
-
“目标目录”是什么意思 - 您是指 git.exe 可执行文件的显式绝对路径吗?我认为 Hudson 正在寻找 git,因为我在配置中指定了完整路径。我认为问题更多在于运行该服务的用户不可写 c:\hudson 。我试过以本地用户身份运行它,但没有效果。
-
我做了更多的挖掘工作 - 结果发现权限问题仅存在于现有作业(在 Hudson 作为服务运行之前创建)。在 Hudson-as-a-Service 中创建的全新工作似乎运行正常。我查看了新作业目录和现有作业目录的高级安全设置/权限,它们看起来相同,只是现有作业的所有者是我(因为 Hudson 在我的帐户下运行),但所有者新工作是“系统”。似乎没有办法将旧工作的所有权分配给 SYSTEM。
-
所以现在我的问题确实是这个 - 我如何迁移现有的作业,当 Hudson 不 作为服务运行时创建 - 到 Hudson 运行的新情况服务,作为用户“本地系统”?我认为它与“CREATOR_OWNER”(拥有完全控制权)有关,但不同之处在于 SYSTEM 不“拥有”现有的作业目录,我不知道如何分配它。
-
天哪,真是一团糟。我试图用旧的非服务 Hudson 构建“新”工作之一,最终将 SYSTEM 锁定在文件之外,使它们无法删除。我必须检查每个单独的文件并将“完全控制”恢复到 SYSTEM。叹。也许其他响应者是对的 - 只运行任务计划程序可能更容易。
标签: windows permissions service hudson