2009-10-20 2 views
1

В течение нескольких месяцев мы запускали 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», чтобы это исправить. Увы, это не так. Я также попробовал полные разрешения для пользователя «Все», но это также не решило проблему.

Что мне здесь не хватает? Есть ли способ разрешить процессу, выполняющемуся как неограниченный доступ службы к поддиректории на локальном диске?

+0

Проверьте, что такое рабочий каталог вашего сервиса. AFAIR, это Windows \ System32 по умолчанию. Если это так, явным образом предоставил директорию назначения для git. –

+0

Что вы подразумеваете под «destination dir» - вы имеете в виду явный абсолютный путь для исполняемого файла git.exe? Я думаю, что Хадсон находит git, потому что у меня есть полный путь, указанный в конфиге. Я думаю, проблема в том, что c: \ hudson недоступен для записи пользователем, с которым работает служба. Я попытался запустить его как локального пользователя, но это не повлияло. – meowsqueak

+0

Я немного поработал - выясняется, что проблема разрешений * только * с существующими заданиями (которые были созданы до того, как Хадсон работал как служба). Совершенно новые рабочие места, созданные в рамках Hudson-as-a-Service, работают правильно. Я рассмотрел параметры/разрешения расширенной безопасности как для нового каталога Job, так и для существующего, и они кажутся идентичными, за исключением того, что владельцем существующего задания был я (поскольку Хадсон работал под моей учетной записью), но Владелец новой работы - «СИСТЕМА». Кажется, что нет способа назначить право собственности на SYSTEM для старой работы. – meowsqueak

ответ

4

Как насчет того, чтобы вы меняли пользователя на работу службы. Поэтому создайте новую «техническую» учетную запись пользователя, пароль которой никто не знает (кроме конверта в вашем сейфе) и сделать этого пользователя владельцем всех ваших папок заданий hudson. Это также имеет то преимущество, что вы можете получать разрешения от hudson. Таким образом, работа Хадсона не может действовать как администратор на вашем компьютере Windows.

Преимущество службы по сравнению с запланированным заданием состоит в том, что он перезапускается при сбое.

0

Вместо того чтобы запускать его как услугу, возможно, вы должны использовать планировщик заданий, чтобы установить процесс для запуска при входе в систему, а затем введите учетную запись пользователя автоматически. Это, вероятно, будет гораздо меньше хлопот, чем разрешение на работу с услугами, особенно если вам нужно общаться с другими машинами.

+0

Это звучит как разумная идея - я рассмотрю ее. Проблема заключается в том, что наша корпоративная ИТ-политика не разрешает учетные записи «утилиты», и это был бы храбрый человек, который позволил бы использовать их личную учетную запись для этой цели. Я ненавижу ИТ-политику. Я думаю, что идея службы будет работать, если бы я мог сделать c: \ Hudson доступным для записи службой. – meowsqueak

+0

Хорошо, я попробовал это. Кажется, что это хорошо работает, за исключением одной проблемы: если я вхожу в систему с той же учетной записью, которую использует планировщик для запуска Hudson, а затем выходим из системы, он, похоже, также убивает запланированную задачу. Это довольно неудачно, поскольку мне приходится иногда входить в систему. Кажется, если я вхожу в систему хотя бы один раз, то я вернулся туда, где начал, потому что с этого момента я должен вручную запустить Hudson. Я полагаю, что это все равно будет работать в случае отключения питания и перезагрузки. – meowsqueak

+0

Я бы посоветовал поговорить с кем-то, кто фактически администрирует ИТ-политику, они были бы безумны, чтобы не уступать преимуществам безопасности работы службы в отдельной учетной записи. Кроме того, учетная запись не обязательно должна быть общесистемной, то локальная учетная запись будет выполнять эту работу. –

Смежные вопросы