Дженкинс по Windows и графическим интерфейсам без RDC

У нас есть конфигурация master-slave для Jenkins. Наш проект .NET создан подчиненным экземпляром Jenkins, работающим в Windows.

Существует множество тестов GUI, однако они работают только при открытии сеанса удаленного рабочего стола (RDC).

При попытке запуска тестов без RDC Jenkins не показывает каких-либо успехов в тестировании. Затем, однако, я подключаюсь к рабочему столу и вижу главное окно запуска приложения, однако среда тестирования пользовательского интерфейса (белый) не может выполнять никаких действий.

Подчиненный Jenkins запускается через Java Web Start.

Я читал несколько веб-сайтов, которые, к сожалению, не могут запускать тесты GUI без сеанса RDC.

Я просто хочу подтвердить, что это правда и интересно, есть ли способ обхода.

Ответ 1

Ваши подчиненные машины должны находиться на рабочем столе, прежде чем тест сможет работать должным образом. У нас была та же проблема.

Решение состояло в том, чтобы запустить тестовую машину и автозапуск на рабочий стол. Чтобы гарантировать, что тест будет ТОЛЬКО запускаться после того, как рабочий стол был доступен, мы добавили запланированную задачу, настроенную на запуск при входе пользователя в систему, который запустит подчиненный Jenkins через Java Web Start. Таким образом, Дженкинс только увидит раба, как только рабочий стол будет запущен. После этого все работало нормально.

Ответ 2

Есть еще один способ сделать это без автоматического входа в систему (работает для меня на нескольких машинах).

1. Перейдите в раздел Управление компьютером → Услуги и приложения → Сервисы → Jenkins Slave → Свойства
2. На вкладке Вход в систему выберите Локальная системная учетная запись и установите флажок Разрешить службы для взаимодействия с рабочим столом
3. Закройте эти окна, нажав ОК и перезапустите службу Служебная программа Jenkins.
4. Перейдите в каталог, где находится тестовое приложение, и выберите Свойства в исполняемом файле приложения.
5. На вкладке Безопасность нажмите Изменить....
6. В новом окне нажмите Добавить..
7. В новом окне нажмите Местоположение... и выберите Локальный компьютер (самый верхний список в списке), нажмите ОК
8. Поместите LOCAL SERVICE в белую область окна и нажмите Проверить имена, нажмите ОК
9. Разрешите Полный контроль для этого пользователя, нажмите ОК, закройте все окна

Это должно быть все. Дайте мне знать, если это сработает для вас.

Ответ 3

У меня есть кластер Jenkins, который запускает различные виды графического интерфейса, win32, swing, selenium. Они проводят тысячи тестов без присмотра 24x7. Вот мое решение:

  • Как сохранить тестирование графического интерфейса в реальном времени - RDC не работает, приложения GUI будут работать только тогда, когда активна сессия RDC. Я пробовал разные способы, так что не утруждайте себя попыткой снова. Ваш тест будет разорван после того, как окно RDC будет сведено к минимуму или отключено. До сих пор решение заключается в установке VNC-сервера (я использую UltraVNC) в качестве сервиса и убедитесь, что он запущен во время входа в систему. Также убедитесь, что вы не подключаетесь к тестовой машине с RDC, поскольку RDC нарушит сеанс VNC. Если возможно, подключите его и к клиенту VNC. Но это зависит от вас. Что я делаю, когда мне нужно отлаживать что-то на машине, я RDC к нему и перезагружать его, чтобы убедиться, что установлены # 2 и #.

  • Автозапуск - есть инструмент autologon.exe в SysInternalsSuite, запустите его на своем подчиненном устройстве

  • Авторизованное подчинение - вам нужен плагин Swarm - https://wiki.jenkins-ci.org/display/JENKINS/Swarm+Plugin. Напишите простую партию и поместите ярлыки в свою папку автозагрузки. Каждый раз, когда вы запускаете автозапуск, он автоматически регистрируется как подчиненный.

Я фактически совмещаю # 2 и # 3 как простой командный файл:

autologon.exe <user> <domain> <password>
REM Here to make sure the logonCount is properly generated
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 0xFFFF /f

start /min java -jar I:\CDC\jenkins\swarm-client-1.9-jar-with-dependencies.jar -executors 1 -fsroot c:\Jenkins -labels "Prod Win7 %ComputerName%" -master <Jenkins URL> -name farm-%ComputerName% -username <username> -password <password>

Ответ 4

Как уже было сказано в других ответах, нужна конфигурация, в которой машина Windows автоматически регистрируется для реального пользователя, см. другие ответы для деталей. Однако этого было недостаточно для меня, мне нужно было настроить сервер UltraVNC в качестве службы для решения проблем.

На сайте упоминается, что логин через RDP является проблемой для этого трюка, т.е. подключается к VNC или перезагружается после доступа RDP.