Как запустить тестирование GUI на ведомом компьютере jenkins без подключения к удаленному рабочему столу?

У меня есть агент jenkins, настроенный на windows 7, и сервер jenkins на Linux. Я запускаю тестирование GUI на агенте Windows. Он работает нормально, если у меня есть подключение к удаленному рабочему столу, но не работает в противном случае. Я нашел эту ссылку, Jenkins на Windows и GUI Тесты без RDC

Но решение, представленное там, довольно расплывчато. Кажется, что единственное решение состоит в том, чтобы каким-то образом заставить сервер Jenkins постоянно открывать подключение к удаленному рабочему столу. Но я не могу найти такой вариант для этого. Может ли кто-нибудь, пожалуйста, четко научить меня, как решить эту проблему?

Очень признателен!

5 ответов

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

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

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

А теперь пошагово:

1. убедитесь, что у вас есть графический интерфейс

Решение состояло в том, чтобы запустить тестовую машину и выполнить автоматический вход на рабочий стол

Настройте стандартный рабочий стол Windows для автоматического входа определенного пользователя при запуске Windows. Таким образом, никому не нужно физически заходить на рабочий стол. (см. Как включить автоматический вход в Windows 7)

2. начать Дженкинс раб

Вам нужно запустить подчиненное устройство Jenkins в рамках этой настройки пользователя. В противном случае подчиненный Jenkins не будет иметь доступа к компонентам пользовательского интерфейса Windows (или, другими словами, не сможет взаимодействовать с рабочим столом).

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

Поэтому вам нужно создать запланированное задание и настроить его для запуска клиента Jenkins с помощью Java Web Start.

3. использовать его

Таким образом, Дженкинс будет видеть раба только после запуска рабочего стола. После этого все заработало нормально.

Когда ведомое устройство находится в сети, вы можете использовать его для запуска тестов пользовательского интерфейса.

Чтобы решить эту проблему, установите автоматический вход Windows, как я объясняю здесь: https://serverfault.com/questions/269832/windows-server-2008-automatic-user-logon-on-power-on/606130

Затем создайте пакет запуска для ведомого Jenkins (поместите его в каталог Jenkins), который запустит консоль на рабочем столе и позволит запускать задания графического интерфейса:

java -jar slave.jar -jnlpUrl http://{Your Jenkins Server}:8080/computer/{Your Jenkins Node}/slave-agent.jnlp

(slave.jar можно загрузить с http://{Ваш сервер Jenkins}:8080/jnlpJars/slave.jar)

РЕДАКТИРОВАТЬ: Если вы получаете черные снимки экрана (например, при использовании Selenium), создайте командный файл, который отключает удаленный рабочий стол, вместо закрытия сеанса RDP с помощью обычной кнопки X:

%windir%\system32\tscon.exe %SESSIONNAME% /dest:console

Следующая вещь сделала свое дело для меня:

В Jenkins выполните команду оболочки Windows:

  • cmdkey /generic:TERMSRV/<servername> /user:<username> /pass:<password>
  • mstsc /v:<servername> /w:<width> /h:<height>
  • cd <path to your pom.xml>
  • <maven command>(например mvn test -Dfiles_to_run=groupLaunch.xml
  • cmdkey /delete:TERMSRV/<servername>

Он создает реальный сеанс mstsc (Win-to-Win) с указанной шириной и высотой в вашем виртуальном сеансе mstsc (Jenkins-to-Win) с поддержкой Jenkins.

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

Я открыл RDP-соединение с виртуальной машиной в другой виртуальной машине (VM2). Я оставил первое соединение открытым внутри VM2 и отключился от него.

Это работало, но это подразумевало наличие двух виртуальных машин.

Поскольку приведенные выше решения казались немного излишними, поэтому я использовал этот подход:

  1. запрещать Jenkins оказание услуг
  2. Запустите Jenkins из командной строки, используя java -jar C:\Program Files (x86)\Jenkins\jenkins.war

По какой-то причине мне пришлось установить все плагины и все такое при запуске, поэтому я рекомендую создать резервную копию, для этого есть плагин. Удачи.:)

Вам все еще нужно использовать RDP, но в моем случае мы можем использовать обратную петлю RDP в той же виртуальной машине.

Процедура:

  1. В виртуальной машине создайте две разные учетные записи и создайте подчиненное устройство Jenkins для обеих учетных записей.

Теперь у вас будет два подчиненных Jenkins для двух учетных записей в одной виртуальной машине.

раб 1 - аккаунт 1

раб 2 - счет 2

  1. Включить несколько RDP следуйте инструкциям https://www.serverwatch.com/server-tutorials/how-to-enable-concurrent-remote-desktop-sessions-in-windows.html

  2. В подчиненном устройстве 2(с учетной записью 2) выполните команду rdp, чтобы подключиться к подчиненному устройству 1 (с учетной записью 1), как показано в разделе Пуск / b "" "C: \ RDP \ rdp.exe" / v:127.0.0.2 / domain: \ / u: admin / p: xxxx / полноэкранный режим / ш:1920 / ч: 1200

127.0.0.2 очень важно, это петлевое соединение для RDP

Поместите указанную выше команду в задание Jenkins с именем, например "OpenRDP_ToVMXXX", и тогда вы сможете запустить любой тест на ведомом устройстве 1 с включенным графическим интерфейсом, наслаждайтесь.

Другие вопросы по тегам