English Japanese
English Japanese

継続的インテグレーション

目次:

1. はじめに
2. CIのインストール
3. プロジェクトの作成
4. プロジェクトの統合
5. 自動化の設計
6. 自動化の統合
7. 高度なヒント
8. まとめ

1. はじめに

このドキュメントでは、アプリケーションをビルドしてT-Plan Robot Enterpriseの自動テストを実行するContinuous Integrationジョブの設定方法について説明します。このガイドではJenkinsをツールとして使用します。Hudsonとの統合については扱いませんが、手順は非常に似ています。

2. CIのインストール

以下からJenkinsをダウンロードします:

http://jenkins-ci.org

ネイティブリリースを使うのが最も簡単な方法です。このガイドでは、Windows 8.1システムにJenkins 1.563のネイティブWindowsリリースをインストールします。

ネイティブインストーラーは、JenkinsをWindowsサービスとして起動するように設定します。これは、Local DesktopやiOS Mirror接続に依存するRobotとの統合には適していません。サービスにはローカルUIアプリケーションを起動するための十分な権限がないためです。今回のサンプル統合では、Jenkinsサービスを無効にする必要があります:

  1. Servicesを開きます:

    • Windows 8: スタート画面で"view local services"と入力します

    • Windows 7以前: コントロールパネルを開き、Servicesを検索して、"Administrative Tools"グループから"View local services"を開きます

  2. Jenkinsサービスをダブルクリックして停止し、 Start Typeを"Disabled"に設定します


ヒント: サービスとして実行されているJenkinsをT-Plan Robotと統合する方法の詳細については、高度なヒントの章を参照してください。


Jenkinsを手動で起動するには、コマンドプロンプトを開き、Jenkinsのインストールディレクトリ(通常はC:\Program Files\JenkinsまたはC:\Program Files (x86)\Jenkins)に移動して、以下を実行します:

jre\bin\java -jar jenkins.war

Jenkinsのウェブインターフェースを開くには、http://localhost:8080/をウェブブラウザで開きます。

jenkins_home.jpg

3. プロジェクトの作成

このガイドでは、NetBeansで開発されたシンプルなJavaアプリケーションを使用します。これは、Closeボタンを備えたシンプルなメッセージウィンドウを表示します。このアプリケーションはJava製であるため、MS Windows、Mac OS X、Linux、Unix、Solaris OSなど、Javaをサポートする任意のプラットフォームで問題なく動作します。


jenkins_test_app.png


この例ではNetBeansをインストールしている必要はありません。まだインストールしていない場合は、AntとJava Development Kit (JDK)のみをインストールしてください。これらはサンプルJavaプロジェクトのコンパイルとビルドに必要です。

インストール方法1: Jenkinsのツールを使用する

  1. Jenkins home (http://localhost:8080/)で"Manage Jenkins"をクリックします

  2. Configureをクリックします

  3. "Add JDK"および"Add Ant"ボタンを使用して、JDKとAntをインストール/設定します

インストール方法2: 手動でのインストールと設定

  1. JDKをダウンロードしてインストールします: http://www.oracle.com/technetwork/java/javase/downloads/index.html

  2. http://ant.apache.orgからAntのバイナリ配布物(ZIP)をダウンロードし、ローカルハードドライブ(例: "C:\Program Files\Ant")に解凍します

  3. "C:\Program Files\Ant\bin"フォルダをシステムパスに追加し、JAVA_HOME変数を設定します:

    • Windows 8: スタート画面に移動し、"system"と入力します

    • Windows 7以前: コントロールパネルを開き、Systemを選択します

    • Advanced System Settings -> Environment Variablesを選択し、System variablesテーブルからPath変数をダブルクリックして、変数の値にセミコロン;とパスを追加します:

<previous_path>;C:\Program Files\Ant\apache-ant-1.9.4\bin

    • 新しいSystem variableを追加します。名前はJAVA_HOME、値はJDKのインストールパス(例: C:\Program Files\Java\jdk1.7.0_51)です

jenkins_env_setting.png
    • システムの変更を反映させるためにJenkinsを再起動します。コマンドプロンプトからJenkinsを起動していた場合は、それを閉じて新しく起動し直してください。

    • 結果を確認するには、コマンドプロンプトを開き(Windows+R、"cmd")、"ant.bat"を実行します。システムがこのコマンドを認識する必要があります。"tools.jar not found"のようなメッセージが表示される場合は、JAVA_HOME変数が正しく設定されていません。


ヒント: NetBeansをインストールしている場合、その中に再利用できるAntのインスタンスが含まれています。一部のNetBeansリリースにはJDKも含まれています。あとはJenkinsのConfigureページから変数を設定するか、場所を追加するだけです。


4. プロジェクトの統合

次のステップは、アプリケーションのプロジェクトをCI(Jenkins)と統合することです。簡単にするため、アプリケーションはバージョン管理下にない(CVS、SVNなど)ものと仮定します。

  1. Jenkins home (http://localhost:8080/)で"New Item"をクリックします

  2. アイテムに"DemoApp"のような名前を付け、"Build a free-style software project"を選択してOKをクリックします。

    jenkins_new_project1.jpg



  3. Source Code Managementオプションは"None"のままにしておきます。必要に応じてCVS、SVN、その他対応システムに変更できます。

  4. "Add build step"をクリックします。NetBeansはAntを使用するため、"Invoke Ant"オプションを選択します。スペースで区切って2つのターゲットを追加します:

    • clean jar

  5. Saveをクリックします

jenkins_new_project2.jpg

これでプロジェクトの設定が完了しました。ローカルのプロジェクトワークスペースを初期化するには、ビルドを実行する必要があります:

  1. Jenkins home (http://localhost:8080/)に移動し、DemoAppをクリックして、左メニューから"Build Now"を選択します。

  2. "Build History"で、ビルドログへのリンクを選択します。

  3. 左メニューから"Console Output"を選択します。

    • プロジェクトがバージョン管理下にある場合は、Jenkinsがサーバーからプロジェクトを取得するため、成功と表示されるはずです。

    • 今回の例ではバージョン管理を使用していないため、ビルドはAntがbuild.xmlファイルを見つけられないというメッセージで失敗します。サンプルプロジェクトをダウンロードし、ログに記載されている場所(通常は<user_home>\.jenkins\jobs\DemoApp\workspace)に解凍してください。その後、プロジェクトページに戻り、もう一度"Build Now"をクリックします。今度は成功するはずです。

おめでとうございます、デモのJavaプロジェクトがJenkinsと統合されました!以降の設定は、あなたのニーズに応じて自由に行ってください。定期的なスケジュールでプロジェクトをビルドするようJenkinsを設定することもできます。プロジェクトがバージョン管理下にある場合は、ソースコードの変更のたびにビルドをトリガーすることもできます。

次のステップでは、シンプルなT-Plan Robotの自動テストを設計し、ビルドプロセスに統合します。

5. 自動化の設計

自動テストを設計する前に、テスト環境の構成を選択する必要があります。T-Plan Robotは、1台以上のマシンやモバイルデバイスを含むさまざまなアーキテクチャをサポートしています。概要についてはSupported Configurationsのチュートリアルトピックを参照してください。

このガイドでは、最もシンプルな単一マシンのシナリオを選択します。Local Desktop接続を使用して、Jenkinsマシン上でアプリケーションをテストします。

jenkins_test_project.png


このテストプロジェクトはクロスプラットフォームで、Javaをサポートする任意のプラットフォーム(MS Windows、Mac OS X、Unix、Linux、Solaris OS)で動作します。プロジェクトアーカイブを解凍し、T-Plan Robot GUIのFile->Open Projectを使って、含まれているフォルダを開きます。このプロジェクトには、1つのテストスクリプト(tpr/Jenkins.tpr)と、テストアプリケーションのCloseボタンで使用されるアイコンのテンプレート画像が1つ含まれています。

Jenkins.tpr:

JavaScript
// 以下の変数に、ダウンロードしたデモを解凍した場所を設定します 
// Javaアプリケーション。これにより、このテストスクリプトをJenkinsの外でも実行できるようになります。 
Var APP_HOME= "C:\demoapp" 

// これにより、以下の場合はアプリケーションパスがJenkinsのものに設定されるようになります: 
// スクリプトがそこから呼び出された場合。WORKSPACEシステム変数はJenkinsによって設定されます。 
if (exists _ENV_WORKSPACE) { 
 // 代わりにJenkinsのワークスペースを使用します 
 Var APP_HOME= "{_ENV_WORKSPACE}" 
} 
 
// レポートとテンプレートのディレクトリをプロジェクトのものに設定します 
Var _REPORT_DIR= "{_PROJECT_REPORT_UNIQUE_DIR}" 
Var _TEMPLATE_DIR= "{_PROJECT_TEMPLATE_DIR}" 
 
// XMLレポートを作成します 
Report "results.xml" desc="Testing of the Jenkins demo application, build {_ENV_BUILD_TAG} ({_ENV_BUILD_ID}) located at {_ENV_WORKSPACE}" 
 
// ローカルデスクトップに接続します 
Connect java://localhost 
 
// スクリプトの番号と名前を宣言します 
Script "1" name="Continuous Integration demo" 
 
// アプリケーションの起動コマンド 
Var CMD= "java -jar {APP_HOME}{_FS}dist{_FS}demoapp.jar" 
 
// アプリケーションを起動します。Windowsの「ファイル名を指定して実行」ボックスを開き、コマンドを入力します 
Exec "{CMD}" nowait = true 
 
// アプリケーションが起動するまで最大20秒待機します 
// 確認は"Close"アイコンを探すことで行います。 
Waitfor match template="close.png" method="search2" passrate=100% timeout=20s 
if ({_EXIT_CODE} > 0) { 
 Exec kill =1 
 Exit "1" desc="Failed to start the demo application (command={CMD})!" 
} 
 
// アプリケーションの起動成功を記録し、スクリーンショットを撮影します 
Step "Started the demo application" actual="OK" 
Screenshot "demoapp.png" 
 
// ボタンをクリックします 
Mouse "click" to="x:{_COMPARETO_CLICK_X},y:{_COMPARETO_CLICK_Y}" 
 
// "Close"アイコンが消えるまで最大5秒待機します。 
// これにより、ボタンがウィンドウを正しく閉じることを確認します。 
Waitfor mismatch template="close.png" method="search2" passrate=100% timeout=5s 
if ({_EXIT_CODE} > 0) { 
 // アプリケーションを手動で終了し、スクリプトを終了させます 
 Exec kill =1 
 Exit "2" desc="Failed to close the demo app through the Close button!" 
} 
Step "Closed the demo application through the Close button." actual="OK"


このスクリプトは非常にシンプルなシナリオをテストします:

  1. デモアプリケーションを起動します。

  2. アプリケーションが正常に起動したことを確認します。これは、Closeボタンのアイコンを画面上で検索することで実現します。

  3. Closeボタンをクリックします。

  4. アプリケーションが正常に終了したことを確認します。スクリプトは、Closeボタンが表示されなくなったことを確認します。

APP_HOME変数(3行目)を、デモアプリケーションを解凍した場所に設定すれば、すぐにスクリプトを実行できます。必要要件:

  • Javaがインストールされ、システムパスに追加されていること(3. プロジェクトの作成で既に対応済みと仮定します)

  • "Exec kill"コマンドのサポートが導入されたT-Plan Robot 3.5.2以降(少なくとも2014年5月19日付の3.5.2Beta以降)。このスクリプトは古いリリースでも実行できますが、何らかの理由でアプリケーションが終了に失敗した場合、強制終了しません。その場合、Jenkinsのビルドはすべてのプロセスの完了を待つため、ハングします。

適切なテストレポートを作成するため、このスクリプトはいくつかの結果オブジェクトを作成します。17行目でXMLレポートを作成します。スクリプトに名前と番号を付け(23行目)、2つのステップ結果(40行目と54行目)とスクリーンショット(41行目)を作成します。作成されたレポートを確認するには、RobotプロジェクトのTest Resultsツリーノードを参照するか、オンライン版のコピーをこちらから開いてください。

次のステップでは、このテストスクリプトをContinuous Integrationに統合します。

6. 自動化の統合

CIとの統合は、T-Plan Robotのコマンドラインインターフェース(CLI)によって実現されます。主なオプション:

CLIオプション

説明

-r/--run <path>

<path>で指定されたテストスクリプト(*.tpr、.javaまたはworkitem)(.xml)を実行します。

-c/--connect
-p/--password

テスト環境に接続します。パスワードは任意で、VNC Server接続など必要な場合にのみ使用してください。接続は、Connectコマンド(TPRスクリプト)やconnect()メソッド呼び出し(Javaスクリプト)を通じて、スクリプトから直接確立することもできます。

-n/--nodisplay

GUIを表示せずにCLIモードで実行します。このモードはシステムリソース(CPU、RAM)の消費が少ないため、本番環境に推奨されます。このオプションは、リモートから開始される実行(telnet、rsh/ssh)には必須です。

-v/--variable <name=value>

変数の値を上書きします。このオプションは複数回指定することで、複数の変数を上書きできます。通常、スクリプト実行のパラメータ化や、標準(定義済み)変数の設定による動作の変更に使用されます。例えば、スクリプトにレポートをC:\reportsに保存させるには、以下のように指定します:
-v "_REPORT_DIR=C:\reports"

CI統合に適した起動コマンドを作成するには、CLI Wizardツールを使用します。起動するには、RobotでTools->CLI Wizardを選択します:

  • "Test script" -> デモプロジェクトからJenkins.tprを選択します

  • "File paths" -> absolute

  • 任意: "Connect to"を"java://localhost"に設定します。私たちのスクリプトはConnectコマンドを呼び出して自ら接続を開始するため、これは実際には不要です。

  • 任意: "Execute the script in the CLI mode"をオンにします

  • 任意: さらに、レポート(テスト結果)をJenkinsワークスペース内の一意のディレクトリに保存するようRobotに指示します。そのために、Robotの標準変数_REPORT_DIRを以下のような値に設定します:

%WORKSPACE%\reports\%BUILD_NUMBER%

WORKSPACEシステム変数は、Jenkinsによってアプリケーションのワークスペースパスに設定されます。BUILD_NUMBERには一意のビルド番号が格納されます。例えば、ワークスペースがC:\Users\JohnDoe\.jenkins\jobs\DemoApp\workspaceで、ビルド番号が3の場合、レポートは以下に保存されます:

C:\Users\JohnDoe\.jenkins\jobs\DemoApp\workspace\reports\3

これにより、レポートは以下のURLで利用できるようになります。また、プロジェクト(ジョブ)のメニューにあるWorkspaceリンクから、Jenkins経由でレポートに移動することもできます。

http://localhost:8080/job/DemoApp/ws/reports/3/results.xml

これにより、ビルドのたびにテスト結果のURLをメールで送信できます。これはEmail-ext (Email Extension)Jenkinsプラグインで実現できます。有効なURLを使用できるようにするには、Manage Jenkins -> Configureに移動し、Jenkins Locationに有効なホスト名を設定する必要もあります。その他のレポートオプションについては高度なヒントの章を参照してください。

  • CLI Wizardでの作業が完了したら、Copy To Clipboardボタンをクリックします。

    jenkins_cli_wizard.jpg

自動化をビルドプロセスに統合するには、新しいビルドステップを追加するだけです:

  1. Jenkins home (http://localhost:8080/)に移動し、DemoAppをクリックして、左メニューから"Configure"を選択します。

  2. "Add Build Step"をBuildセクションでクリックし、"Execute Windows batch command"を選択します

  3. CommandフィールドにCLIコマンドを貼り付けます。

    jenkins_auto_step.jpg
  1. 変更を保存し、Build Nowを選択します。これで、Jenkinsはアプリケーションのビルドと自動化の実行の両方を行います。

  2. Jenkinsのビルドは、ビルドと自動化の両方が正常に完了した場合にのみ成功します。ビルドまたは自動化のいずれかが失敗した場合は失敗します。テスト結果は、Jenkinsワークスペース内のビルド固有の一意のフォルダに保存され、ウェブブラウザで確認できます。


ヒント: Jenkins上でテストスクリプトをデバッグするには、コマンドから一時的に-rと-nオプションを削除します。これにより、Jenkinsは自動化を開始せずにRobot GUIを起動するようになります。その後、Robotでスクリプトを手動で実行してデバッグできます。Robotを閉じるまで、Jenkinsのビルドは完了しません。


7. 高度なヒント

サービスとして実行されているJenkinsでの自動化

サービスとして実行されるJenkinsは、通常2つの領域で制限を受けます:

  1. プロセスにGUIアプリケーションを起動する権限がありません。これにより、Local DesktopおよびiOS Mirror接続に基づくRobot自動化との統合ができません。VNC Server(VNC経由のLocal Desktopを除く)やAndroid Over ADBなどの他の"リモート"接続は、-n/--nodisplay CLIオプションを指定してRobotを起動する限り、サービスモードのJenkinsと統合できます。

  2. このプロセスは、通常ファイルシステム権限が制限されたユーザーアカウントで実行されます。Robotへの影響:

    • 有効なユーザーホームフォルダが存在しない場合、Robotのプロセスはユーザー設定ファイルへの変更の保存に失敗します。ログにいくつかの例外が表示されますが、プログラムはデフォルトの工場出荷時設定を使用して動作を続けます。Robotはライセンスキーの場所を設定ファイルに保存するため、ライセンスが見つからないというエラーでプロセスが失敗することがあります。これを回避するには、キーファイルをRobotのインストールディレクトリに保存してください。そこから自動的に読み込まれます。あるいは、以下のようなCLIオプションを追加します:
      -o "config.licenseKeys=<license_key_path>"
      -o/--optionオプションは繰り返し指定することで、設定ファイルの環境設定をカスタマイズできます。Robotバージョン4.0では、新しい--cfgおよび--licensekeyオプションでこれらの制限に対応する予定です。

    • プロセスにデフォルトのシステム一時保存場所にフォルダを作成する権限がない場合、アプリケーションログサービス(RobotのGUIのHelp->Log Viewer)が無効になります。すべてのログはターミナル(コマンドプロンプト)にのみ出力されます。

    • プロセスにシステムの一時保存場所にファイルを作成する権限がない場合、Robotのプロセスはクラッシュするか、正しく動作しません。少なくともこれらの権限をプロセスに付与する必要があります。


レポートをJenkins UIにリンクする

最新のRobotレポートは、任意でプロジェクトのメニューやヘッダーページにリンクできます:

jenkins_html_reporter.jpg

手順:

  1. HTML Publisher Pluginをインストールします

  2. 残念ながら、このプラグインは%BUILD_NUMBER%のようなJenkinsビルド変数を含むレポートパスを扱えません。プロジェクトワークスペース内の静的な場所にしかリンクできません。これを回避するには、Robotスクリプトに、レポートのHTMLコピーを固定のディレクトリに作成させる必要があります。そのためには、以下のコマンドをJenkins.tprスクリプトに追加します:

    • Report "..\latest\results.html" desc="Testing of the Jenkins demo application, build {_ENV_BUILD_TAG} ({_ENV_BUILD_ID}) located at {_ENV_WORKSPACE}"

  3. DemoAppメニューでConfigureを選択します。"Add post-build action"を選択し、"Publish HTML reports"を選びます。パラメータを以下のように設定します:

HTML directory to archive:

reports\latest

Index page[s]:

results.html

Report title:

Latest T-Plan Robot Report


変更を保存し、ビルドを実行するとメニューにリンクが表示されます。

8. まとめ

以上の手順により、お好みのContinuous IntegrationツールとT-Plan Robotの自動テストを統合できるようになります。CLI統合の原則は、事実上どのフレームワークとの統合にも応用できます。

このドキュメントでは、複数のテストマシンを含む他のテスト環境構成については扱っていません。これらについては後日改めて説明します。

ご質問がございましたら、T-Plan Supportチームまでご連絡ください。