開発者ブログ
Pitalium(hifiveリグレッションテストライブラリ) 開発者向け情報 » CIサーバ(Jenkins)でPitaliumをテストする

CIサーバ(Jenkins)でPitaliumをテストする

Last modified by msakai on 2017/11/22, 10:48

Pitalium本体のテストをJenkins 2(Pipeline)から実行する環境の構築手順を記載します。

はじめに

構築手順は大きく次のような流れになります。

  1. Jenkinsサーバの構築
  2. Hub・NodeサーバでJenkinsと連携するための設定
  3. SonarQubeサーバの構築(optional)
  4. テスト対象アプリケーションの配置
  5. Jenkinsジョブの設定
  6. 動作確認

目次

前提条件

構築先環境には、以下のソフトウェアがインストールされている前提とします。

  • Java 1.7以上
  • .NET Framework 4.0

Jenkinsサーバの構築

Antのインストール

  1. http://ant.apache.org/bindownload.cgi からAntをダウンロードする。
  2. 解凍して任意のパスに配置する。(ここではC:\Work\Ant\apache-ant-1.9.6 となるように解凍)

Gitのインストール

  1. https://git-scm.com/downloads からGitのインストーラをダウンロードする。
  2. インストーラに従ってインストールする。
       途中の選択肢は次のように選択する。その他はデフォルトでよい。
     ・「Adjusting your PATH environment」では、2番目の「Use Git from the Windows Command Prompt」を選択
     ・「Configuring the line ending conversions」では、1番目の「Checkout Windows-style, commit Unix-style line endings」を選択
     ・「Configuring the terminal emulator to use with GIt Bash」では、1番目の「Use MinTTY」を選択
  3. (optional) Gitのプロキシ設定をする。
       git config --global http.proxy proxy.example.com:8080

Tomcatのインストール

  1. http://tomcat.apache.org/ からTomcat8.0をダウンロードする。
  2. 解凍して任意のパスに配置する。(ここではC:\Work\Tomcat\apache-tomcat-8.0.32 となるように解凍)
  3. 環境変数JAVA_HOMEを設定する。(例:C:\Program Files\Java\jdk1.7.0_80)
  4. 必要に応じてファイアウォールでポート8080の通信を許可するように設定する。
  5. C:\Work\Tomcat\apache-tomcat-8.0.*\startup.batを起動する。
  6. ブラウザで http://localhost:8080/ にアクセスし、Tomcatのページが表示されることを確認する。
  7. 別端末からも http://ホスト名:8080/ にアクセスし、Tomcatのページが表示されることを確認しておく。

Jenkinsのインストール

  1. https://jenkins-ci.org/ からjenkins.war をダウンロードする。
  2. Tomcatを一度停止し、WARファイルをTomcatのwebappフォルダにコピーする。
  3. Tomcatを起動する。
  4. ブラウザで http://localhost:8080/jenkins/ にアクセスし、ガイダンスに従って初期セットアップを完了する。
    • 手順の途中で、推奨されるプラグインをインストールしておく。

Jenkinsプラグインのインストール

  1. Jenkinsにアクセスし、Jenkinsの管理 > プラグインの管理 > 高度な設定 を開く。
  2. 以下のプラグインをインストールする。
    • Copy Artifact Plugin
    • Checkstyle Plugin
    • Findbugs Plugin
    • Cobertura Plugin
    • SonarQube Plugin
    • Configuration Slicing Plugin

Jenkinsの環境設定

  1. Jenkinsにアクセスし、Jenkinsの管理 > システムの設定 を開く。
  2. 「JDK」を設定する。
    1. 「JDK追加」をクリックする。
    2. 「自動インストール」のチェックを外し、任意の名前とインストール済JDKのパスを入力する。
  3. 同様に「Git installations」、「Ant」も設定する。
  4. 「SonarQube Runner」の設定をする。(SonarQubeを構築する場合)
    1. 「SonarQube Runner追加」をクリックする。
    2. 「自動インストール」のチェックを外し、名前とSonar-scannerフォルダへのパスを入力する。
  5. 「SonarQube」の設定をする。(SonarQubeを構築する場合)
    1. 「Add SonarQube」をクリックする。
    2. 名前とURLを入力する。
  6. 最後に最下部の「保存」ボタンをクリックする。

ローカルHub・Nodeの起動

単体テストの実行に、Jenkinsサーバのローカルで起動しているSelenium Grid Hubが別途必要です。
Jenkinsサーバ上でHubを起動し、firefoxが動作するNode(ローカルでもリモートでもよい)を登録しておきます。

リモートデスクトップの設定

IEノードでテストをする場合、事前にリモートデスクトップ接続しておかないとスクリーンショットが真っ黒になってしまいます。
そのため、ジョブからバッチ経由でリモートデスクトップが起動するよう予め設定しておきます。

  1. Jenkinsサーバマシンで「リモートデスクトップ接続」を開く。
  2. 接続先のコンピューター名(IPアドレス)を入力し、「オプション」を開く。
  3. ログオンに使用するユーザー名を入力し、「資格情報を保存する」にチェックを入れる。
  4. 接続ボタンを押して接続する。このとき確認ダイアログが出る場合は、「次から確認しない」にチェックを入れておく。
  5. ログオンパスワードを入力し、接続できたことを確認して切断する。
  6. 再びリモートデスクトップ接続を開き、先程接続したコンピューター名を入力する。(接続直後であればはじめから入力されている)
  7. 「オプション」を開き、接続設定の「名前を付けて保存」ボタンを押して設定をファイルとして保存する。
       ここではDefault_IE9.rdp のような名前を付け、C:\Work\Jenkins\pitalium_ci_files\RDP に保存する。
  8. パスワードが毎回聞かれないようポリシーを設定する。
    1. グループポリシーエディタ(gpedit.msc)を開く。
    2. コンピューターの構成 > 管理用テンプレート > システム > 資格情報の委任 を開く。
    3. 「NTLMのみのサーバー認証で保存された資格情報の委任を許可する」を開く。
    4. ラジオボタンを「有効」にし、「サーバーを一覧に追加:」の横の「表示」ボタンをクリックする。
    5. 表示されたテキストボックスに、TERMSRV/接続ホストのIP(例:「TERMSRV/111.222.333.444」)と入力する。接続先のノードが複数ある場合は同様に全てのホストを入力する。
    6. OKボタンをクリックして閉じる。
    7. コマンドプロンプトで次のコマンドを実行する。
            gpupdate
  9. Jenkinsから起動するためのバッチファイルを作成する。
     以下の内容で作成し、C:\Work\Jenkins\pitalium_ci_files\RDP\startRDP_IE11.bat のような名前で保存する。(ファイル名はIEのバージョンに合わせる)
pushd C:\Work\Jenkins\pitalium_ci_files\RDP
start mstsc Default_IE11.rdp
ping localhost -n 11 > nil
exit /b 0

Hub・Nodeサーバの設定

CIジョブの実行時のみHub・Nodeの動作ログをファイルに書き出すようにするため、ジョブの冒頭と最後でHub・Nodeサーバの再起動をします。
そのためのバッチファイルを、各Hub・Nodeマシン上に作成しておきます。

  1. 通常起動(コンソールにログを直接表示)用のバッチファイルを次の内容で作成し、C:\Work\Selenium\launchHub_day.bat および launchNode_day の名前で保存する。
    • HubとNode両方が載っているマシンの場合は両方、Nodeのみの場合はNodeの起動のみを記述する。
    • -Dwebdriver のパラメータは、起動するブラウザに必要なもののみ記載する。
    • selenium-serverのjarのバージョンや、nodeConfig.json のパスは自身の環境に合わせる。
pushd C:\Work\Selenium

rem Hubの起動
start "" cmd /c "java -jar C:\Work\Selenium\jar\selenium-server-standalone-3.3.1.jar -role hub"

rem Nodeの起動
start "" cmd /c "java -Dwebdriver.ie.driver=IEDriverServer.exeの絶対パス -Dwebdriver.chrome.driver=chromedriver.exeの絶対パス ^
 -Dwebdriver.gecho.driver=geckodriver.exeの絶対パス -Dwebdriver.ie.driver.loglevel=DEBUG -jar ^
 selenium-server-standalone-3.3.1.jar -role node -nodeConfig C:\Work\Selenium\browser_nodeconfig.json"

2. CIジョブ実行時(ログをファイルに書き出し)用のバッチファイルを次の内容で作成し、C:\Work\Selenium\launchHub.bat および launchNode の名前で保存する。

pushd C:\Work\Selenium

rem Hubの起動
start "" cmd /c "java -jar C:\Work\Selenium\jar\selenium-server-standalone-3.3.1.jar -role hub >C:\Work\Selenium\logs\hub.txt 2>&1"

rem Nodeの起動
start "" cmd /c "java -Dwebdriver.ie.driver=IEDriverServer.exeの絶対パス -Dwebdriver.chrome.driver=chromedriver.exeの絶対パス ^
 -Dwebdriver.gecho.driver=geckodriver.exeの絶対パス -Dwebdriver.ie.driver.loglevel=DEBUG -jar ^
 selenium-server-standalone-3.3.1.jar -role node -nodeConfig C:\Work\Selenium\browser_nodeconfig.json >C:\Work\Selenium\logs\node.txt 2>&1"

3. 起動中のHub/Nodeをkillするためのバッチファイルを次の内容で作成し、C:\Work\Selenium\kill-grid.bat の名前で保存する。

setlocal ENABLEDELAYEDEXPANSION

REM Javaプロセス一覧の表示
set CMD="jps -l"
set pId=
set pName=

REM selenium-server-standalone-**.jar のプロセスをkill
for /f "usebackq tokens=1,2" %%i in (`%CMD%`) do (
 set pId=%%i
 set pName=%%j

 echo "!pName!" | find "selenium-server-standalone" > nul
 if not !ERRORLEVEL! equ 1 (    
    taskkill /pid !pId! /F
 )
)

endlocal
exit /b 0

スレーブの登録

上記で作成したHub・Nodeマシン上のバッチファイルをJenkinsから起動するために、Hub・NodeマシンをJenkinsのスレーブとして登録する。

  1. スレーブとの接続で使用するポートを固定する。(optional。ファイアウォールでポートを指定して開ける必要がある場合はこの設定をする)
    1. Jenkinsの管理 > グローバルセキュリティの設定 を開く。
    2. 「セキュリティを有効化」にチェックを入れ、JNLPスレーブ用TCPポート番号を固定に設定し、任意のポートを入力する。
    3. Jenkinsマシン、スレーブマシン双方で上記ポートの通信が可能になるようファイアウォールの設定をする。
  2. 新規スレーブを作成する。
    1. スレーブとして登録したいHub・NodeマシンのブラウザからマスターのJenkinsにアクセスする。
    2. Jenkinsの管理 > ノードの管理 を開き、「新規ノード作成」をクリックする。
    3. ノード名を入力し、「ダムスレーブ」にチェックを入れてOKボタンを押す。
    4. 以下のように設定して保存する。
      • 「リモートFSルート」:スレーブマシン側で使う作業ディレクトリのフルパス。
        ex) C:\Jenkins\workspace
      • 「用途」:このマシーンを特定ジョブ専用にする
      • 「起動方法」:JNLP経由でスレーブを起動
  3. スレーブをマスターに接続する。
    1. 作成したスレーブ名をクリックする。
    2. 「slave.jar」のリンクをクリックしてダウンロードする。
    3. 「Run from agent command line:」に書かれているコマンドをコピーする。
      次のようなバッチファイルを作成し、任意の場所に保存する。
@echo off
start /b cmd /c [コピーしたコマンド]
exit

4. 作成したバッチファイルを実行し、マスターに接続できることを確認する。

SonarQubeの構築(optional)

Jenkinsジョブで解析したソースコードのメトリクスを、SonarQubeで可視化するための環境を構築します。
不要であればこの手順はスキップしてください。

MySQLのインストール

  1. http://dev.mysql.com/downloads/ からMySQL Community Server をmsi形式でダウンロードする。
  2. インストーラに従ってインストールする。
    • sonarユーザ(localhost・DB Admin・パスワード:sonar)を作成する。
  3. 環境変数PATHにMysql Serverのbinフォルダへのパスを追加する。
  4. sonar用のDBを作成し、sonarユーザに権限を与える。
     mysql -u root -p
     CREATE DATABASE sonar;
     GRANT all on sonar.* to 'sonar'@'localhost';

SonarQubeのインストール

  1. http://www.sonarqube.org/downloads/ からSonarQubeをダウンロードする。
  2. 解凍して任意のパスに配置する。(ここではC:\Work\SonarQube\sonarqube-5.3 となるように解凍)
  3. MySQLを使うための設定をする。
    sonarqube-5.3/conf/sonar.properties を開き、以下のように編集する。
    • sonar.jdbc.username を有効にし、ユーザ名(sonar)を設定する。
    • sonar.jdbc.password を有効にし、sonarユーザのパスワードを設定する。
    • MySQL用のsonar.jdbc.url を有効にする。
  4. サービスから起動できるように設定する。
       sonarqube-5.3/bin/windows-x86-64/InstallNTService.bat を管理者権限で実行する。
  5. サービスを起動する。
      # 起動に失敗する場合、サービスの起動ユーザをシステムアカウントではなくローカルのAdministratorに変更すると起動できる。
  6. ブラウザで http://localhost:9000/ にアクセスし、SonarQubeのページが表示されることを確認する。
  7. 別端末からも http://ホスト名:9000/ にアクセスし、SonarQubeのページが表示されることを確認しておく。

Sonar-scannerのインストール

  1. https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner からSonarQube Scannerをダウンロードする。
  2. 解凍して任意のパスに配置する。(ここではC:\Work\SonarQube\sonar-scanner-2.5 となるように解凍)

プラグインのインストール

  1. プラグインのjarファイルをダウンロードする。必要プラグインは以下。
    • checkstyle
    • cobertura
    • findbugs
  2. プラグインファイルをsonarqube-5.3\extensions\plugins 以下に全てコピーする。
  3. SonarQubeサービスを再起動する。

テスト対象アプリケーションの配置

  1. Jenkinsからアクセス可能なマシンに、ApacheなどのWebサーバをインストールする。
  2. Pitaliumのリポジトリをチェックアウトし、pitalium-test-site 以下のファイルをWebサーバ上に公開する。

Jenkinsジョブの設定

  1. Pitaliumのリポジトリをチェックアウトする。
     # 現在、pitalium-jenkins-jobsフォルダはdevブランチにあります。
  2. pitalium-jenkins-jobs内のPitaliumフォルダを、Jenkinsのホームディレクトリのjobsフォルダ以下にコピーする。
    デフォルトでは次のようなパスになる。
     C:\Users\Tomcat起動ユーザ\.jenkins\jobs\Pitalium
  3. Tomcatを起動(起動済であれば再起動)する。
  4. ジョブがインポートされ、一覧に表示されることを確認する。
  5. パラメータを環境に合わせて指定する。特に、次のパラメータの値は構築した環境に応じて変更する。
    • HUB_HOST
    • APP_HOST
    • SONAR_URL
    • パラメータのデフォルト値は、次の設定画面からまとめて変更できる。
        Jenkinsの管理 > Configuration Slicing > Parameters

動作確認

  1. IT_SET_EXPECTED_ALL ジョブを実行し、全ブラウザについて期待結果を取得する。
  2. pitalium-test-runnerジョブを実行する。

Copyright (C) 2012-2017 NS Solutions Corporation, All Rights Reserved.