jenkins導入

jenkins導入

本資料の目的

  • 新規にプロジェクトに自動ビルド・デプロイ環境を構築する際、jenkinsを導入するための基礎知識を提供する。

jenkinsとは

  • Javaで書かれたオープンソース継続的インテグレーション(CI)ツール。
  • CIについてはこちらを参照。

jenkinsとは

  • 何ができるか
    • 継続的なソフトウェアプロジェクトのビルドとテスト
      • 指定した時間に定期的なビルドとテストの実行。また、設定次第ではSVNやGITにコミットしたタイミングでも可能。
      • 細かなタイミングでビルドとテストを繰り返すことによって、バグを早期に発見できる。
    • スクリプトの定期実行
    • 設定がWebのUI上で完結できる
      • もうXML地獄に苦しめられることはない
    • プラグイン
      • 様々なプラグインが存在し、Seleniumの連携なども行える
    • その他特徴は公式を参照:https://wiki.jenkins-ci.org/display/JA/Meet+Jenkins

インストール

  • ※J2SE 1.5以降が必要
  • Linuxの場合
    •  # javaがなければインストール
       $ yum install java-1.6.0-openjdk
    •  # jenkinsのインストール
       # リポジトリの追加
       $ wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
       # 公開鍵のインポート
       $ rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
       # Jenkinsのインストール
       $ yum install jenkins
    •  # 起動
       $ /sbin/service jenkins start
       ※FWの8080ポートが開いてなければ開けておく
  • windowsの場合
    • http://mirrors.jenkins-ci.org/war/latest/ からjenkins.warをダウンロード。
    • →保存先と同階層がワークディレクトリになるので、空ディレクトリに保存したほうがよい。
    • ダウンロードしたディレクトリを環境変数「JENKINS_HOME」として登録しておく。
    • コマンドプロンプトを開き、
      • $ java -jar %JENKINS_HOME%\jenkins.war
    • で起動。エラーが出る場合はポートの利用状態など確認する。
    • 起動後はブラウザから http://localhost:8080 にアクセスして、左上にJenkinsおじさんが表示されればOK。
    • windowsでは「Jenkinsの管理」→「Windowsのサービスとしてインストール」を行うと、サービスとしてjenkinsが起動できる。

セキュリティ設定

  • 公開サーバーだと誰でも操作できてしまうので、セキュリティを設定する。
  • 「Jenkinsの管理」→「システムの設定」→「セキュリティを有効化」をチェック。
  • 「アクセス制御」→「ユーザー情報」→「Jenkinsのユーザーデータベース」をチェック。
  • 後はヘルプを読みつつ、運用に適した権限設定を行う。
  • ※最初にユーザーを作っておかないと、設定によっては何もできない状態になってしまうので注意。

新規ジョブ

  • ジョブ:jenkinsが実行するビルドのこと。
  • 「新規ジョブの作成」から新しいジョブを作成できる。
  • Mavenで管理しているプロジェクトであれば「Mavenプロジェクトのビルド」、その他であれば「フリースタイル・プロジェクトのビルド」でジョブを作成する。

デプロイについて

  • jenkinsがやってくれるのは自ワークスペースへのビルドまでなので、ワークスペースからデプロイするためのスクリプト(Capistranoのコマンドやrsyncなど)は自前で用意する。
  • Linux+PHPでデプロイするならCapistrano(カピストラーノ、自動デプロイツール)かrsyncコマンドを利用するとよい。Capistranoのインストールなどについては下記リンク参照
  • Capistrano(カピストラーノ)でPHPプロジェクトをデプロイ
  • CakePHP2.3 Jenkins + Capistrano で自動デプロイする方法
  • rsyncの例
    • rsync -vr --delete --exclude ".git/" /var/lib/jenkins/jobs/ジョブ名/workspace/ 公開しているディレクトリへの絶対パス

SeleniumIDEとの連携

事前準備

  • Selenium serverをSelenium公式からダウンロード
  • jenkins上で、プラグイン「Hudson Seleniumhq plugin」をインストール
  • IDEで作成したテストケースをどこかに保存しておく

設定

  • [jenkins設定]
    • 「jenkinsの管理」→「システムの管理」
    • でSelenium Remote Controlにselenium serverのパスを指定する。
  • [実行設定]
    • 対象プロジェクトの設定から「ビルド手順の追加」で「SeleniumHQ htmlSuite Run」を追加。設定は下記。
    • ブラウザ: 利用したいブラウザ。ヘルプ参照。とりあえず動かすには*firefoxとかにしておくとよい。
    • startURL: テストを開始するURL。
    • suiteFile: IDEで生成したテストケース。拡張子も中身もHTMLであること。
    • resultFile: 結果ファイル。プロジェクトディレクトリがベースディレクトリとなる。拡張子は.htmlにしておく。
    • 適用後にビルドを実行すると、指定したブラウザが立ち上がってSeleniumを実行してくれる。
    • 自動実行時に既にselenium serverなどのポートが被るものが起動していると動いてくれないので注意。

seleniumhq用のビルド後の処理

  • Publish Selenium Report
    • ジョブのトップ画面に、直近のビルド成否状況の画像を表示。
    • Test report HTMLsに対象の結果HTMLファイルを指定。
  • Publish Selenium Html Report
    • 結果を保存したフォルダを指定すると、プロジェクトメニューにSelenium Reportリンクが出現する。
    • seleniumの結果HTMLが表示される。

SVNのコミットタイミングでjenkinsのビルドを起動する

  • ※2014/9現在、jenkinsはsubversionの1.7までしか対応していないため注意。1.8ではうまく動かない場合がある。
  • jenkinsの管理→システムの管理でsubversionのバージョンを指定する。
  • jenkins自体にSVNを監視する機能はないので、SVNのhookスクリプトを利用する。
  • 参考: http://www.asahi-net.or.jp/~iu9m-tcym/svndoc/svn_hook_script.html
  • 流れとしては以下のようになる。
    • コミット→hook起動→jenkinsのビルドURLを実行→jenkinsによるビルド+テスト
  • コミット直後にビルドしたい場合、post-commitを利用する。
  • リポジトリのhooksディレクトリ内にあるpost-commit.tpmlをOSに合わせてリネームする。
    • Linux → post-commit
    • Windows → post-commit.bat
  • スクリプトの中で以下のようにwgetすればビルドが実行される。
    • wget http://(Jenkins のホスト名):(ポート番号)/job/(ジョブ)/build?delay=0sec
  • URLはjenkinsの「ビルドの実行」のURLを指定するのが間違いがない。
  • Windowsはwgetに値するコマンドがないので、wgetがコマンドプロンプトで使えるようになるアプリをインストールする。
  • インストール後、環境変数にPATHを追加。
  • ※スクリプト中では環境変数が使えないので注意。

実施例(PHP・Linuxの場合)

導入前の検討事項

  • 人員規模とプロジェクトのテスト戦略を考慮して、以下のことを決める
  • jenkinsに任せるタスク、機能
    • ビルドのみ?デプロイまで?スクリプトの定期自動実行?
    • ビルド時にテスト実行を行う?
  • 対象環境
    • 開発環境のみ?本番環境まで?
  • ビルド頻度
    • テストが膨大、かつコミットが頻繁なプロジェクトであれば1日1回や2回でも
    • 人員規模が小さい、もしくは品質レベルを高めたいのならばSVNやGITにコミットしたタイミングでビルド&テスト
  • 連携するアプリケーション・ツール
    • SeleniumやSVN、GITなど
  • jenkinsの実施体制
    • 誰が実行・設定するのか
    • 管理者的な人員を設定するか
  • ビルドやデプロイが失敗したときのフロー
    • 失敗時にメールが飛ばせるが、誰が第一報を受けるのか、またそこからのソース修正の流れ

環境構築

  • 環境サーバーごとにjenkinsをインストール
  • jenkinsでPHPUnitの単体テストを実施する場合は、PHPUnitの実行環境と統計出力に必要なパッケージを取得
  • SeleniumやCapistranoを利用する場合は本体のインストールを行う

運用

  • 検証(開発)環境への定期ビルド・デプロイ
    • jenkinsのジョブ作成
      • 導入検討時に決めた頻度を設定
      • コミット毎にjenkinsを回すならSVNやGITのフックスクリプト設定を行う
      • ビルド後にPHPUnitでのテストを行うならphpunit.xmlを設定
        • Seleniumも似たように設定を行う
    • デプロイスクリプトの作成、設定
      • Capistranoやrsyncのスクリプトを設定
    • ビルドやテスト失敗時にメールを飛ばす設定を検討
      • 誰(もしくはどのML)に飛ばすか
  • 本番環境へのビルド・デプロイ
    • デプロイのスクリプトを作成、ジョブの設定
      • 環境によって異なる部分に注意
    • ビルド時のテストは実施したほうがよい(定数や各種接続先が本番環境用になっているかの確認など)


★クリック1つでブログランキングにご協力戴けます! m(_ _)m

トラックバック


この記事へのトラックバック一覧です: jenkins導入:

コメント

コメントを書く



(ウェブ上には掲載しません)