web-dev-qa-db-ja.com

リモートデスクトップ接続なしでjenkins windowsスレーブでGUIテストを実行する方法は?

ウィンドウ7にjenkinsエージェントをセットアップし、Linuxにjenkinsサーバーをセットアップしています。 WindowsエージェントでGUIテストを実行しています。リモートデスクトップ接続が接続されている場合は正常に動作しますが、そうでない場合は失敗します。このリンクを見つけました Windows上のJenkinsとRDCなしのGUIテスト

しかし、そこに提供される解決策はかなりあいまいです。唯一の解決策は、Jenkinsサーバーでリモートデスクトップ接続を常に開いておくことです。しかし、そうするためのそのようなオプションを見つけることができません。誰もこの問題を解決する方法を明確に教えてもらえますか?

とても有難い!

30
Kelvin

テストを適切に実行するには、スレーブマシンがデスクトップにある必要があります。同じ問題がありました。

解決策は、テストマシンを起動し、デスクトップに自動ログオンすることでした。デスクトップが使用可能になった後にのみテストが開始されるように、ユーザーログイン時に実行するように設定されたスケジュールタスクを追加し、Java Web Startを介してJenkinsスレーブを起動します。ジェンキンスは、デスクトップが実行されて初めてスレーブを見るようになりました。

これは、あなたがリンクした質問に対する勝利の答えであり、何をすべきかについて非常に明確です。セットアップ全体がJenkinsの外部にあります。 Jason Swagerは、ユーザーがWindowsデスクトップマシンにログインし、ユーザーセッションでJenkinsスレーブを開始する方法を自動化する方法について説明しました。

そして今、ステップバイステップ:

1. GUIが利用可能であることを確認してください

解決策は、テストマシンを起動し、デスクトップに自動ログオンすることでした

Windowsの起動時に特定のユーザーに自動的にログインするように、標準のWindowsデスクトップを構成します。このように、誰もデスクトップに物理的にログインする必要はありません。 ( Windows 7で自動ログオンをオンにする方法 を参照)

2. Jenkinsスレーブを起動します

このユーザー設定内でJenkinsスレーブを起動する必要があります。そうしないと、JenkinsスレーブはWindows UIコンポーネントにアクセスできません(つまり、デスクトップと対話できません)。

デスクトップが使用可能になった後にのみテストが開始されるように、ユーザーログイン時に実行するように設定されたスケジュールタスクを追加し、Java Web Start。

したがって、- スケジュールされたタスクを作成 し、 Java Web Start を使用してJenkinsクライアントを開始するように設定する必要があります。

3.使用する

そうすれば、ジェンキンスはデスクトップが実行された後にのみスレーブを見ることになります。その後、すべて正常に機能しました。

スレーブがオンラインのとき、スレーブを使用してUIテストを実行できます。

24
Peter Schuetze

これを解決するには、ここで説明するようにWindows自動ログオンを設定します: https://serverfault.com/questions/269832/windows-server-2008-automatic-user-logon-on-power-on/606130# 6061

次に、Jenkinsスレーブのスタートアップバッチを作成し(Jenkinsディレクトリに配置します)、デスクトップでコンソールを起動し、GUIジョブを実行できるようにします。

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

(slave.jarはhttp:// {Your Jenkins Server}:8080/jnlpJars/slave.jarからダウンロードできます)

EDIT:黒いスクリーンショットを取得している場合(Seleniumを使用する場合例)、通常のXボタンでRDPセッションを閉じる代わりに、リモートデスクトップを切断するバッチファイルを作成します。

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

次のことは私のためにトリックをしました:

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>

Jenkinsを搭載した仮想mstscセッション(Jenkins-to-Win)で指定された幅と高さで実際のmstscセッション(Win-to-Win)を作成します。

3
dred17

上記のソリューションは少しやり過ぎだと思われるので、このアプローチを使用しました。

  1. Jenkinsサービスを無効にする
  2. Java -jar C:\Program Files (x86)\Jenkins\jenkins.warを使用してコマンドラインからJenkinsを起動します

何らかの理由で、この方法で起動するときはすべてのプラグインとすべてをインストールする必要があったため、バックアップを作成することをお勧めします。そのためのプラグインがあります。がんばろう。 :)

0
Daniel

ここで提供されているソリューションを試しましたが、何もうまくいきませんでした。最後に、回避策を思いつきました。

別のVM(VM2)でVMへのRDP接続を開きました。VM2内で最初の接続を開いたままにして、切断しました。

それは機能しましたが、2つの仮想マシンが使用可能であることを意味します。

それでもRDPを使用する必要がありますが、私の場合、同じVMでRDPのloopbackを使用できます。

手順:

  1. VMで、2つの異なるアカウントを作成し、両方のアカウントにJenkinsスレーブを作成します。

これで、1つのVMに2つのアカウント用の2つの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)に接続します。たとえば、Start/b "" "C:\ RDP\rdp.exe"/v:127.0.0.2/ domain:\/u:admin/p:xxxx/fullscreen/w:1920/h:1200

127.0.0.2は非常に重要であり、RDPのループバック接続です

上記のコマンドを「OpenRDP_ToVMXXX」などの名前でJenkinsジョブに入力すると、GUIが有効になっているスレーブ1で任意のテストを実行できます。

0
August