継続的インテグレーションツール「Jenkins」を導入する

08.02


Jenkins

JenkinsとはJavaで書かれたオープンソース継続的インテグレーション(Continuous Integration、以下、CI)ツールで、前は「Hudson」という名前でした。

CIとは単体のモジュールをテストや品質チェックすることはもちろん、関連するモジュール全体も含めての統合テストや品質チェックを頻繁に実施することで、問題を早期に発見しようという試みです。

複数のエンジニアでチームを組んで開発する場合、AさんとBさんがぞれぞれ担当のモジュールを開発していて、BさんのモジュールはAさんの作ったモジュールを利用していて、各々の単体テストまでは確認するのですが、Aさんが自分のモジュールまでは確認するけれども、Bさんが作っているモジュールについてはAさんは確認しません。

CIは結合テストまで含めて頻繁に行うことで、このような問題の早期発見に役立ちます。

何十人・何百人ものエンジニアが日々開発・リリースを行うような環境では、このような問題発見の遅れはリリースに致命的な影響を与えることになります。
問題の発見は早ければ早いほど良く、後々の手戻りを削減することが可能です。

 JenkinsはJava・PHP・Perl・javascriptなど様々な開発言語のプロジェクトに対応できます。

それでは、Jenkinsのインストールについて説明していきす。

 

僕は「さくらVPS」にテスト環境を構築しているので、以下のページを参考にインストールをおこないました。

さくらVPS(CentOS6.3)へJenkinsをインストールして認証つけてURLを変更する。
http://blog.livedoor.jp/tattyamm/archives/4147336.html

 

  1. Jenkinsのレポジトリを登録してyumでインストールする
    # 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
    # yum install jenkins

    ※JenkinsはJDK1.6以上が必要なのでインストールされていなければ
    Oracleからダウンロードしておく。

  2. iptablesで該当ポートを開ける
    # iptables -I RH-Firewall-1-INPUT 10 -p tcp --dport 8080 -j ACCEPT
    # iptables -L --line-number
    # /sbin/service iptables save
  3. Jenkinsにアクセスしてみる
    http://サーバーアドレス:8080/
    iptablesでの設定が正しければ、Jenkinsの管理画面が表示される。

    Jenkins管理画面トップ

  4. 80番ポート経由でアクセスさせるための設定をWebサーバーにおこなう。
    ※以下はnginxでのリバースプロキシの方法です。

    8080番ポートが使えない環境の場合に、80番ポートでアクセスできるように「/etc/nginx/conf.d/virtual.conf」にプロキシの設定をおこないます。
    設定は下記のような感じで nginx.conf に proxy_pass を設定するだけです。
    server {
        listen 80;
        server_name jenkins.example.com
        location / {
            proxy_pass http://localhost:8080;
    
        }
    }

    設定後、nginxを再起動してブラウザで 「http://jenkins.example.com/」で表示されれば完了。

  5. システムの設定
    JDKのパスを設定する。
    適当な名前をつけ、JAVA_HOMEのバスを入力する。
    E-mail通知
    SMTPサーバーのアドレスを入力。

    システムの設定

  6. グローバルセキュリティの設定
    アクセス出来るようにはなりましたが、、現状では誰でもjenkinsの設定を変更できてしまうため、ユーザ別に権限の設定設定をおこないます。
    まずトップページから、jenkinsの管理→システムの設定→アクセス制御 まで遷移します。
    1. アクセス制御
      利用できるユーザーを「Jenkinsのユーザーデータベース」に登録されているユーザーで、「行列による権限設定(プロジェクト単位)」に変更する。

      「行列による権限設定(プロジェクト単位)」に変更する
    2. CSRF対策
      「CSRF対策」のチェックボックスを有効にする。

  7. プラグインの追加
    1. Gitクライアント のプラグインを追加
      「Git Client Plugin」「Git Parameter Plugin」
    2. Perlクライアント の「Perl Plugin」
      TAP プラグインを追加
      「TAP Plugin」
  8. CPANから「Test::Harness」「TAP::Harness」「Test::More」をインストール
    # perl -MCPAN -e shell
    cpan[1]> install Test::Harness
    cpan[2]> install TAP::Harne
    cpan[3]> install Test::More
  9. Jenkinsのプロジェクトに必要なプラグインなどのセットアップ
    GitHubの以下のアドレスにて、CPANのプラグインやテンプレートを自動インストールするスクリプトをダウンロードする。
    https://github.com/dann/perl-jenkins-template

    解凍後に以下のシェルを起動する
    # ./setup_jenkins_modules.sh
    # ./setup_jenkins_job_template.sh
  10. Jenkinsのプロジェクトの設定で「ビルド」の「シェルの実行」にテストのコマンドを追記する。
    # prove -lv --harness TAP::Harness::JUnit -l t > test_results.xml
  11. GitからSSH経由でソースを取得するために、Jenkins実行サーバのJenkins実行ユーザにSSHの設定をする必要があります。
    ※Jenkinsユーザーのデフォルトshellが「/bin/false」になっているため、有効にする。
    # sudo vi /etc/passwd
    
    jenkins:x:497:498:Jenkins Continuous Build server:/var/lib/jenkins:/bin/false
    ↓
    jenkins:x:497:498:Jenkins Continuous Build server:/var/lib/jenkins:/bin/bash
  12. Jenkins実行サーバにてJenkinsユーザになり、SSHキーを生成する。
    ssh-keygen -t rsa -C "jenkins@localhost"
  13. 公開鍵ファイルをサーバーにアップロードできるようなら、アップロードして、次のようなコマンドを実行するのが簡単かもしれません。
    # cat id_git.pub >> /home/git/.ssh/authorized_keys
  14. gitosis-adminにJenkinsサーバーの公開鍵とユーザー情報を追加。
    Jenkinsがpushすることはないので読み取り専用権限とする。
    そこでreadonlyグループを作成し、clone, pullができるGitレポジトリの名前を登録します。
    # git clone gitosis@localhost:gitosis-admin.git

    上記でJenkinsからgitのリポジトリをチェックアウトできるようになります。

  15. 再度ダッシュボードに戻り、”新規ジョブ作成”をクリックします。新規ジョブ作成
  16. ジョブ名を入力し”フリースタイル・プロジェクトのビルド”を選択。 “OK”をクリック。「フリースタイル・プロジェクトのビルド」を選択
  17. “Git”にチェックを入れ “Repositories”の”Repository URL”に 「ssh://~」からのリポジトリのアドレスを入力します。
    Gitのリポジトリの設定
    さらに、”ビルド・トリガ”セクションの “SCMをポーリング”にチェックを入れ”保存”をクリックします。

    ビルド・トリガの設定
  18. Perl(TAP::Harness)からの戻り値をJenkinsで取得するために、
    Jenkinsに登録したジョブの「ビルド」≫「シェルの実行」に以下のようなコードを入れておきます。
    #!/bin/bash
    HOME=${WORKSPACE}
    /usr/local/bin/prove \
    -I${HOME}/lib \
    --formatter=TAP::Formatter::JUnit -l ${HOME}/t > test_results.xml


    書きだされたXMLファイルはJUnit形式のXMLです。
    ジョブの「ビルド」≫「ビルド後の処理」の「JUnitテスト結果の集計」に
    ファイルへのパスを入れておきます。(ワークスペースからの相対パスです。)

    JUnitテスト結果の集計

    テスト結果もグラフで見られます。
    テスト結果のグラフ

導入にあたり、技術評論社の「WEB+DB PRESS plus」シリーズの本がJenkinsを初めて導入する場合になかなかわかりやすく役に立ちました。

最近のトピックス

ページ上部へ戻る