Дженкинс - удаленный доступ запрещен

Я использую подключаемый модуль ArtifactDeployer для развертывания артефактов заданий сборки в удаленном месте (общий ресурс Windows SMB). Однако Дженкинсу так и не удается добиться успеха. Выбрасывание ошибок типа:

[ArtifactDeployer] - Запуск развертывания из пост-действия ... [ArtifactDeployer] - [ОШИБКА] - Не удалось развернуть. Не удается создать каталог ... Этап сборки [ArtifactDeployer] - развертывание артефактов из рабочей области в удаленных каталогах. Результат сборки изменен на FAILURE.

Локальное развертывание работает нормально.

Операционная система машины Jenkins - это 32-разрядная версия Windows 7. Профессор Дженкинс работает как служба с использованием локальной системной учетной записи.

Я попытался использовать другую учетную запись, свою учетную запись пользователя, но служба не запустилась (ошибка Windows 1069: служба не запускалась из-за ошибки входа в систему). Учетная запись сетевой службы была запущена, но после того, как Jenkins выдает ошибки, он не может получить доступ к платформе .NET.

При попытке вручную выполнить удаленную копию все работает нормально. Я могу создавать каталоги и писать в них. Конечно, на той же машине.

Я пробовал две разные удаленные ссылки в Jenkins: 1) \\ targetdirectory 2) I: \ - путем сопоставления буквы диска с удаленным каталогом в Windows Безуспешно ...

Есть какие-нибудь советы или предложения? Спасибо!

Обновление 15/02/2012: по-прежнему нет решения или обходного пути для этой проблемы. Это не только плагин, я также столкнулся с этой проблемой, используя «Выполнить пакетную команду Windows». Я нашел отчет об ошибке, которым хочу поделиться.

Решение

Я нашел решение. Вы должны предоставить разрешение на доступ компьютеру в домене, а не пользователю этого компьютера. Если оглянуться назад, это кажется очень логичным.

Второе решение - запустить службу с использованием учетной записи пользователя домена. Выше я допустил ошибку, используя локального пользователя .\user вместо DOMAIN\user.


person Nick V    schedule 21.12.2011    source источник
comment
Есть какие-нибудь мысли о том, нет ли у вас контроллера домена?   -  person Mark Ribau    schedule 02.11.2012


Ответы (2)


Если у вас нет домена, следующее наверняка сработает. Это должно работать, даже если у вас есть домен.

Справочная информация:
Вам необходимо, чтобы подключенный диск был сопоставлен с той же учетной записью, которую использует служба, И был доступен в нужное время. Обычно подключенные диски отображаются только для вошедшего в систему пользователя в то время, когда он входит в систему. Контексты пользователя службы не получают «вход в систему» ​​сами по себе - например, если я назначаю диск как MyUser, а служба запускается как MyUser, диск не будет доступен, пока я не войду в систему, введя свой пароль. Однако мы можем использовать сценарий для сопоставления диска при запуске (вместо входа в систему) для определенного пользователя. Jenkins обычно работает как локальная системная учетная запись, поэтому, если вы не хотите ее менять, вам нужно запустить приведенный ниже скрипт от имени пользователя SYSTEM. Вместо этого вы можете создать конкретного пользователя, от имени которого будет запускаться Jenkins, если вы не хотите предоставлять этот подключенный диск всем службам / процессам, которые работают как SYSTEM, и запускать как службу, так и сценарий ниже от имени этого пользователя (это < em> наверное безопаснее).

Шаги решения:
В ArtifactDeployer вы хотите выполнить развертывание на подключенном сетевом диске. В моем случае это S :.

Специальной настройки разрешений для удаленного общего ресурса нет. (В моем случае это общий ресурс Windows Server 2008 с именем пользователя и паролем, который используется для сопоставления диска.)

Напишите пакетный файл MapDrives.bat в месте, к которому ваш выбранный пользователь (по умолчанию: SYSTEM) имеет доступ, со следующим содержимым:

net use S: "\\server_name\share_name" /persistent:yes password_here /USER:username_here

Обратите внимание, что я сопоставляю S: в этой строке.

С помощью планировщика заданий создайте задачу, которая запускается от имени того же пользователя, что и служба (по умолчанию: SYSTEM), запускает At Startup и в качестве действия запускает пакетный файл MapDrives.bat.

Перезагрузитесь, и все должно работать!


Цитаты:
После изучения многих страниц и множества тестов, в конечном итоге здесь были найдены лучшие предложения, которые привели меня к вышеуказанному решению.
https://stackoverflow.com/a/4763324/150794

person Mark Ribau    schedule 03.11.2012

Убедитесь, что ваша «локальная системная учетная запись» имеет права доступа к удаленному каталогу (включая права записи). Тогда используйте обозначение

\\targetdirectory

Сопоставление букв дисков с удаленными каталогами применяется только к учетной записи пользователя, с которой вы в настоящее время работаете. Сопоставление букв диска будет недоступно для других учетных записей.

person Frank Kusters    schedule 05.01.2012
comment
Для этого лучше задать отдельный вопрос на superuser.com. (И разместите ссылку на вопрос здесь.) - person Frank Kusters; 02.11.2012