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

Windows上的Hudson as服务-文件系统权限,windows,permissions,service,hudson,Windows,Permissions,Service,Hudson,几个月来,我们一直在Windows XP“服务器”上以用户帐户运行Hudson。这意味着有人手动登录并通过.bat文件启动Hudson(该文件设置了一些环境变量,然后运行java-jar Hudson.war) 然而,最近几次停电导致服务器启动时哈德逊必须自动启动。因此,我转而关注Hudson作为Windows服务运行的情况。这将允许Hudson使用Windows自动启动,并且不需要特定的用户帐户 我成功地将其作为服务安装,并且修改了hudson.xml,以便批处理文件可以直接运行,而不是直接运

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

然而,最近几次停电导致服务器启动时哈德逊必须自动启动。因此,我转而关注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”的完全权限,但这也没有解决问题


我错过了什么?是否有任何方法允许作为服务运行的进程不受限制地访问本地磁盘上的子目录?

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

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

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


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

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


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

检查服务的工作目录。AFAIR,默认为Windows\System32。如果是这样,请显式地为git提供一个目标目录。您所说的“目标目录”是什么意思?您是指git.exe可执行文件的显式绝对路径吗?我认为Hudson正在寻找git,因为我在配置中指定了完整的路径。我认为问题更多的是c:\hudson不能被服务运行的用户写入。我试着以本地用户的身份运行它,但没有效果。我做了更多的挖掘-结果表明权限问题只存在于现有作业(在Hudson作为服务运行之前创建的作业)。Hudson-as-a-Service内部创造的全新工作岗位似乎运作正常。我已经查看了新作业目录和现有作业目录的高级安全设置/权限,它们看起来完全相同,只是现有作业的所有者是我(正如Hudson在我的帐户下运行的那样),但新作业的所有者是“系统”。似乎没有办法将旧作业的所有权分配给系统。所以现在我的问题是,如何将Hudson未作为服务运行时创建的现有作业迁移到Hudson作为服务运行的新情况下,作为用户“本地系统”?我认为这与“创建者/所有者”(拥有完全控制权)有关,但区别在于系统不“拥有”现有的工作目录,我不知道如何分配。天哪,真是一团糟。我试着用旧的非服务型Hudson创建一个“新”作业,结果将系统锁定在文件之外,使它们无法移动。我必须检查每个单独的文件并恢复对系统的“完全控制”。唉。也许另一个响应程序是正确的-只运行任务调度程序可能更容易。检查您的服务的工作目录是什么。AFAIR,默认为Windows\System32。如果是这样,请显式地为git提供一个目标目录。您所说的“目标目录”是什么意思?您是指git.exe可执行文件的显式绝对路径吗?我认为Hudson正在寻找git,因为我在配置中指定了完整的路径。我认为问题更多的是c:\hudson不能被服务运行的用户写入。我试着以本地用户的身份运行它,但没有效果。我做了更多的挖掘-结果表明权限问题只存在于现有作业(在Hudson作为服务运行之前创建的作业)。Hudson-as-a-Service内部创造的全新工作岗位似乎运作正常。我已经查看了新作业目录和现有作业目录的高级安全设置/权限,它们看起来完全相同,只是现有作业的所有者是我(正如Hudson在我的帐户下运行的那样),但新作业的所有者是“系统”。似乎并没有办法将所有权分配给旧作业的系统。所以现在我的问题是——如何迁移HUD时创建的现有作业