В течение нескольких месяцев мы запускали Hudson на «сервере» Windows XP под учетной записью пользователя. Это означает, что кто-то вручную регистрируется и запускает Hudson через .bat-файл (который устанавливает несколько переменных окружения, затем запускает java -jar hudson.war)Hudson as service на Windows - разрешения файловой системы
Однако несколько недавних отключений питания привели к тому, что требование было иметь Hudson запускается автоматически во время загрузки сервера. Поэтому я перешел к тому, что Хадсон работает как служба Windows. Это позволит Хадсону автоматически запускаться с Windows и не требует специальной учетной записи пользователя.
Мне удалось установить его как службу, и я изменил hudson.xml так, чтобы командный файл запускался, а не напрямую. Я делаю это, потому что мы строим с git на Cygwin и SHELLOPTS = igncr должен быть установлен до того, как bash запустит java/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, человек, но я думал, что, возможно, если Я добавил права доступа «Полный доступ» к C: \ hudson для пользователя «LOCAL_SERVICE», чтобы это исправить. Увы, это не так. Я также попробовал полные разрешения для пользователя «Все», но это также не решило проблему.
Что мне здесь не хватает? Есть ли способ разрешить процессу, выполняющемуся как неограниченный доступ службы к поддиректории на локальном диске?
Проверьте, что такое рабочий каталог вашего сервиса. AFAIR, это Windows \ System32 по умолчанию. Если это так, явным образом предоставил директорию назначения для git. –
Что вы подразумеваете под «destination dir» - вы имеете в виду явный абсолютный путь для исполняемого файла git.exe? Я думаю, что Хадсон находит git, потому что у меня есть полный путь, указанный в конфиге. Я думаю, проблема в том, что c: \ hudson недоступен для записи пользователем, с которым работает служба. Я попытался запустить его как локального пользователя, но это не повлияло. – meowsqueak
Я немного поработал - выясняется, что проблема разрешений * только * с существующими заданиями (которые были созданы до того, как Хадсон работал как служба). Совершенно новые рабочие места, созданные в рамках Hudson-as-a-Service, работают правильно. Я рассмотрел параметры/разрешения расширенной безопасности как для нового каталога Job, так и для существующего, и они кажутся идентичными, за исключением того, что владельцем существующего задания был я (поскольку Хадсон работал под моей учетной записью), но Владелец новой работы - «СИСТЕМА». Кажется, что нет способа назначить право собственности на SYSTEM для старой работы. – meowsqueak