【问题标题】:Hudson as service on Windows - file system permissionsHudson 作为 Windows 上的服务 - 文件系统权限
【发布时间】: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


【解决方案1】:

也许您应该使用任务计划程序将进程设置为在登录时运行,而不是将其作为服务运行,然后让用户帐户自动登录。这可能比处理服务权限要少得多,尤其是在您必须与其他机器通信时。

【讨论】:

  • 这听起来是一个合理的想法 - 我会调查一下。问题在于我们的公司 IT 政策不允许使用“公用事业”帐户,如果有人愿意将他们的个人帐户用于此目的,那将是一个勇敢的人。我讨厌 IT 政治。如果我能以某种方式使 c:\Hudson 可被服务写入,我认为服务的想法会奏效。
  • 好的,我试过了。它似乎运行良好,除了有一个问题 - 如果我使用调度程序用于运行 Hudson 的同一帐户登录,然后注销,它似乎也终止了计划任务。这是相当不幸的,因为我确实需要偶尔登录。似乎如果我至少登录一次,那么我就会回到我开始的地方,因为从那时起我必须手动运行 Hudson。我想它在断电和重启的情况下仍然可以工作。
  • 我建议与实际管理 IT 策略的人交谈,如果他们不承认在专用帐户中运行服务的安全优势,他们会很生气。此外,该帐户不必是公司范围的,本地计算机帐户也可以完成这项工作。
【解决方案2】:

您如何更改运行服务的用户。因此,创建一个新的“技术”用户帐户,其密码没人知道(除了您保险箱中的一个信封),并使该用户成为您所有 hudson 工作文件夹的所有者。这还有一个好处是您可以从 hudson 那里获得权限。这样一来,Hudson 工作就不能在您的 Windows 机器上充当管理员。

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

【讨论】:

    猜你喜欢
    • 2011-06-01
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 2015-12-23
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多