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

<p>у меня есть агент jenkins, настроенный на windows 7, и сервер jenkins на linux. я запускаю тестирование gui на агенте windows. он работает нормально, если у меня есть подключение к удаленному рабочему столу, но не работает в противном случае. я нашел эту ссылку, <a href="https://stackoverflow.com/questions/10177708/jenkins-on-windows-and-gui-tests-without-rdc">дженкинс на windows и gui тесты без rdc</a> </p><p>но решение, представленное там, довольно расплывчато. кажется, что единственное решение состоит в том, чтобы каким-то образом заставить сервер jenkins постоянно подключаться к удаленному рабочему столу. но я не могу найти такой вариант для этого. может ли кто-нибудь, пожалуйста, четко научить меня, как решить эту проблему? </p><p>очень признателен!</p>

<blockquote> <p>ваши ведомые машины должны быть на рабочем столе, прежде чем можно будет запустить тест должным образом. у нас была такая же проблема.</p> <p>решением было запустить тестовую машину и выполнить автоматический вход в систему рабочий стол. чтобы тест запускался только после рабочего стола был доступен, мы добавили запланированное задание, настроенное для запуска при входе пользователя в систему, это запустит подчиненное устройство jenkins через java web start. сюда, дженкинс увидит раба только после запуска рабочего стола. после что все работало нормально.</p> </blockquote><p>это победный ответ на вопрос, с которым вы связаны, и очень ясно, что делать. вся установка за пределами дженкинс. джейсон свагер рассказал о том, как он автоматизировал вход пользователя в систему на компьютере с windows, а затем запустил подчиненное устройство jenkins в сеансе пользователя.</p><h2>а теперь пошагово:</h2><h3>1. убедитесь, что у вас есть графический интерфейс</h3><blockquote> <p>решение состояло в том, чтобы запустить тестовую машину и выполнить автоматический вход на рабочий стол</p> </blockquote><p>настройте стандартный рабочий стол windows для автоматического входа определенного пользователя при запуске windows. таким образом, никому не нужно физически заходить на рабочий стол. (см. <a href="http://answers.microsoft.com/en-us/windows/forum/windows\_7-security/how-to-turn-on-automatic-logon-in-windows-7/99d4fe75-3f22-499b-85fc-c7a2c4f728af">как включить автоматический вход в windows 7</a> )</p><h3>2. начать дженкинс раб</h3><p>вам нужно запустить подчиненное устройство jenkins в рамках этой настройки пользователя. в противном случае подчиненный jenkins не будет иметь доступа к компонентам пользовательского интерфейса windows (или, другими словами, не сможет взаимодействовать с рабочим столом).</p><blockquote> <p>чтобы тест запускался только после рабочего стола был доступен, мы добавили запланированное задание, настроенное для запуска при входе пользователя в систему, это запустит подчиненное устройство jenkins через java web start.</p> </blockquote><p>поэтому вам нужно <a href="http://windows.microsoft.com/en-us/windows7/schedule-a-task">создать запланированное задание</a> и настроить его для запуска вашего <a href="http://java.com/en/download/faq/java\_webstart.xml">клиента jenkins с помощью java web start</a> .</p><h3>3. использовать его</h3><blockquote> <p>таким образом, дженкинс будет видеть раба только после запуска рабочего стола. после что все работало нормально.</p> </blockquote><p>когда ведомое устройство подключено к сети, вы можете использовать его для запуска тестов пользовательского интерфейса.</p>

<p>чтобы решить эту проблему, установите автоматический вход windows, как я объясняю здесь: <a href="https://serverfault.com/questions/269832/windows-server-2008-automatic-user-logon-on-power-on/606130#606130">https://serverfault.com/questions/269832/windows-server-2008-automatic-user-logon-on-power-on/606130 # 606130</a> </p><p>затем создайте пакет запуска для подчиненного jenkins (поместите его в каталог jenkins), который запустит консоль на рабочем столе и позволит запускать задания графического интерфейса:</p><pre><code>java -jar slave.jar -jnlpurl http://{your jenkins server}:8080/computer/{your jenkins node}/slave-agent.jnlp </code></pre><p>(slave.jar можно загрузить с http: // {ваш сервер jenkins}: 8080/jnlpjars/slave.jar)</p><p><strong>edit:</strong> если вы получаете <strong>черные снимки экрана</strong> (например, при использовании selenium), создайте пакетный файл, который отключает удаленный рабочий стол, вместо закрытия сеанса rdp с помощью обычной кнопки x:</p><pre><code>%windir%\system32\tscon.exe %sessionname% /dest:console </code></pre>

<p>следующая вещь сделала свое дело для меня:</p><p>в jenkins выполните команду windows shell:</p><ul> <li><code>cmdkey /generic:termsrv/<servername> /user:<username> /pass:<password></code></li> <li><code>mstsc /v:<servername> /w:<width> /h:<height></code></li> <li><code>cd <path to your pom.xml></code></li> <li><code><maven command></code> (например, <code>mvn test -dfiles\_to\_run=grouplaunch.xml</code></li> <li><code>cmdkey /delete:termsrv/<servername></code></li> </ul><p>он создает реальный сеанс mstsc (win-to-win) с указанной шириной и высотой в вашем виртуальном сеансе mstsc (jenkins-to-win) на основе jenkins.</p>

<p>поскольку приведенные выше решения казались немного излишними, поэтому я использовал этот подход:</p><ol> <li>отключить службу <code>jenkins</code></li> <li>запустите jenkins из командной строки, используя <code>java -jar c:\program files (x86)\jenkins\jenkins.war</code></li> </ol><p>по какой-то причине мне пришлось установить все плагины и все такое при запуске, поэтому я рекомендую создать резервную копию, для этого есть плагин. удачи. :)</p>

<p>я попробовал решения, представленные здесь, но у меня ничего не получалось. в конце концов, я нашел обходной путь. </p><p>я открыл rdp-соединение с vm в другом vm (vm2). я оставил первое соединение открытым внутри vm2 и отключился от него. </p><p>это сработало, но это предполагает наличие двух виртуальных машин.</p>

<p>вам все еще нужно использовать rdp, но в моем случае мы можем использовать <strong>loopback</strong> rdp в той же виртуальной машине.</p><p>процедура:</p><ol> <li>в виртуальной машине создайте две разные учетные записи и создайте подчиненное устройство jenkins для обеих учетных записей.</li> </ol><p>теперь у вас будет два подчиненных jenkins для двух учетных записей в одной виртуальной машине.</p><p>раб 1 - аккаунт 1</p><p>раб 2 - счет 2</p><ol start="2"> <li><p>включить несколько rdp следуйте руководству <a href="https://www.serverwatch.com/server-tutorials/how-to-enable-concurrent-remote-desktop-sessions-in-windows.html">https://www.serverwatch.com/server-tutorials/how-to-enable-concurrent-remote-desktop-sessions-in-windows.html</a> </p></li> <li><p>в подчиненном устройстве 2 (с учетной записью 2) выполните команду rdp для подключения к подчиненному устройству 1 (с учетной записью 1), как показано ниже start/b "" "c:\rdp\rdp.exe"/v: <strong>127.0. 0,2</strong>/домен: \/u: admin/p: xxxx/полноэкранный режим/ш: 1920/ч: 1200 </p></li> </ol><p><strong>127.0.0.2 очень важно, это петлевое соединение для rdp</strong></p><p>поместите указанную выше команду в задание jenkins с именем, например «openrdp\_tovmxxx», и тогда вы сможете запустить любой тест на ведомом устройстве 1 с включенным графическим интерфейсом, наслаждайтесь.</p>