第4回は、自動化の代名詞にもなっているJenkinsがテーマです。JenkinsとDTシリーズ製品を組み合わせるとどんなことができて、どんなメリットがあるのか、この回から何回かに渡って、考察して行きたいと思います。最終的に、CI環境で動的テストを実施したときに、開発者が最大のメリットを享受するための近道を見つけ皆さんと共有できればなと思っております。

Jenkins上でDTシリーズ製品を使用するための前提条件

DTシリーズ製品は全てWindowsアプリになりますので、Windows版のJenkins上でDTシリーズ製品を動かす必要があります。本稿ではJenkinsやJavaのインストール方法には触れませんので、Jenkinsのインストールや初期設定方法につきましては、Jenkins関連サイトを参照ください。尚、本稿執筆時点で、Jenkins Ver2.89.4、Java 8(Update 161)での動作を確認しています。

Jenkins関連サイト

DTシリーズ製品を動かすためのJNLPスレーブ

Windows上のGUIアプリをJenkinsから動作させようとしたとき、よく躓くケースがあります。例えば、JenkinsからWindowsアプリにコマンドでGUI操作を指示してもWindowsアプリは反応してくれません。これは、JenkinsがWindowsのサービスとして動作していることから起因するのですが、動作権限の都合上WindowsサービスからはGUIアプリの操作ができないためです。そこで、動作させる主体をサービスではなくユーザにするためJNLPスレープを起動して、このJNLPスレーブに仕事をさせるようにします。

JNLPスレーブの新規作成

JNLPスレーブとは言っても、扱いはノードになりますので、スレーブとして動作するノードを作成することになります。「Jenkinsの管理」のメニューから「ノードの管理」を選択し、さらに「ノードの管理」のメニューから「ノードの新規作成」を選択すると次のようなノードの作成画面に切り替わります。

ノード名を入力しOKを押すと、次のような入力画面に切り替わります。

上図では次のように情報を入力しています。

  • ノード名 ⇒ slave (そのまま引き継がれる)
  • 説明 ⇒ (空欄)
  • 同時ビルド数 ⇒ 2 (同時に走るであろうビルド数を指定。GUIアプリを動かすので1でも問題ない)
  • リモートFSルート ⇒ C:\Jenkins (ノードが使うワークスペースのフォルダを指定)
  • ラベル ⇒ dt_slave (重要。マスターのノードが強制的に特定のノードに処理をさせるときに使用)
  • 用途 ⇒ このスレーブをできるだけ使用する (デフォルト設定)
  • 起動方法 ⇒ Launch agent via Java Web Start (デフォルト設定)
  • 可用性 ⇒ Keep this agent online as much as possible (デフォルト設定)

入力が完了したら設定を保存します。これでスレーブとして動作するノードのが作成が完了しました。
ノードの起動方法を「Launch agent via Java Web Start」としているため、作成したノードを起動するためには、別途キックする必要があります(後述)。逆に言えば、ユーザがノードをキックすることになるので、Jenkins上からGUIアプリの制御ができることになります。起動方法の中には、「WindowsサービスとしてこのWindowsスレーブを制御」を選択することで、Windowsサービスとして起動しさらに動作権限にユーザを指定することも可能ですが、設定が少々煩わしいので今回は「Launch agent via Java Web Start」を指定します。

JNLPスレーブの起動

スレーブのノードを作成しただけですと次のようにオフライン状態のアイコンとともにスレーブノードの状態が表示されます。

そこで、作成したスレーブのノードを起動してみます。「ビルドの実行状態」のビュー内のslaveの文字をクリックします。すると、次のような画面が表示されます。

「Connect agent to Jenkins one of these ways」と書かれているので、ユーザは次のいずれかの方法にて「Agent」すなわちスレーブを起動します。

Launch agent from browser

ブラウザ上からJava Web Startを実行してスレーブを起動する方法です。Java Web Startで実行するファイルは”Launch”アイコンをクリックすることでダウンロードされます。実際には、ダウンロードされたslave-agent.jnlpファイルをダブルクリックして起動することになります。

Run from agent command line:

コマンドプロンプト上で、次のコマンドを実行してスレーブを起動する方法です。

javaws http://localhost:8080/computer/slave/slave-agent.jnlp

ブラウザの制約からダウンロードしたslave-agent.jnlpファイルが実行できなかったときに、コマンドプロンプト上で直接ファイル指定してJava Web Startを実行する方法となります。

Or if the agent is headless:

次のコマンドを実行してJava Web Startを使用せずに直接jarファイルを指定して起動する方法となります。

java -jar agent.jar -jnlpUrl http://localhost:8080/computer/slave/slave-agent.jnlp -workDir “C:\Jenkins”

Windowsで使用するのであれば、よほどのことがない限りJava Web Startが実行できないということはないので、この方法を使用することはまずないと思われます。

今回は「Launch agent from browser」でスレーブを起動させます。ブラウザがChromeの場合、”Launch”アイコンをクリックするとファイルがダウンロードされブラウザ下部に表示されます。ダウンロードしたファイルをクリックすると、作成したスレーブのノードが起動しノードの状態が次のように変わります。

さらに、ブラウザ上で動いているJenkinsとは別に、スレーブが動いていることを示す次のような表示がされればスレーブの起動は成功となります。

最後に

いかがでしたでしょうか?
今回はJenkinsでスレーブノードを作るまでとなってしまいましたが、次回はJenkinsのJobを作りそのJobからDTシリーズ製品の制御を行う予定です。Jenkinsの操作に絡む内容が続きますので「動的テストの自動化を考える」シリーズのブログ更新頻度も上げて行きたいと思います。

CI環境における動的テストの適応

 - Jenkinsを使った動的テスト自動化の施策例 -