JenkinsをCentOSにインストールしたときのメモ
Githubで公開しているプロジェクトのCIにはTravisが使えて便利なのですが、 仕事で開発しているWebアプリとかは公開するわけには行かなかったりするので、Travisは使えません。
そんなわけで、仕事でもCIの環境が欲しくなったので、今更ながらjenkinsをインストールしてみましたので、メモを残しておきます。
目的
環境
ローカルのVirtualBox上に構成したCentOS6。
Jenkinsのインストール
Javaが必要なので先にyumとかで入れておきます
$ yum install java-1.7.0-openjdk
http://pkg.jenkins-ci.org/redhat/
にredhat,centos用のRPMがあるのでそれをダウンロードしてインストールします。
$ rpm -ivh jenkins-1.540-1.1.noarch.rpm
実際はchefのレシピを用意してインストールしているので以下のようなrecipeを書いて実行しています。
jenkins/attributes/default.rb
default['jenkins']['rpm'] = "jenkins-1.540-1.1.noarch.rpm"
default['jenkins']['rpm_url'] = "http://pkg.jenkins-ci.org/redhat/jenkins-1.540-1.1.noarch.rpm"
jenkins/recipes/default.rb
remote_file '/tmp/' + node['jenkins']['rpm'] do
source node['jenkins']['rpm_url']
owner "root"
group "root"
mode "0755"
not_if "test -e " + '/tmp/' + node['jenkins']['rpm']
end
package "jenkins" do
action :install
source '/tmp/' + node['jenkins']['rpm']
provider Chef::Provider::Package::Rpm
not_if "rpm -q jenkins"
end
service "jenkins" do
action [:enable, :start]
end
インストールすると
/usr/lib/jenkins/jenkins.war
にjenkins本体のwarが
/var/lib/jenkins/
にデータディレクトリが作成されます。
WebUIにアクセス
仮想サーバの8080ポートにブラウザでアクセスするとjenkinsの画面が表示されます。
設定
ローカル環境なので、セキュリティとか気にしない。というわけで特に環境設定なし。デフォルトのまま。
ジョブ
ジョブはjenkinsに実行させたい処理を定義します。今回はリポジトリからPHPアプリのソースをとってきて、PHPUnitでテストを実行させたいと思います。まず、
- 左メニューの[新規ジョブ作成]→[ジョブ名]に適当な名前をつけて[フリースタイル・プロジェクトのビルド]を選択して[OK]。
その後、最低限の設定だけします。
[ソースコード管理]は使っているVCSを選択します。お仕事ではsvnを使っているので[Subversion]。[リポジトリURL]を入力します。
[ビルド・トリガ]は[SCMをポーリング]を選択。スケジュールには1分ごとにチェックさせたいので以下のようにしました。
*/1 * * * *
[ビルド]の箇所では[ビルド手順の追加]→[シェルの実行]を選んで、svnからソースを落としてきたあとに行う実際のタスクを書きます。私の場合は以下のようになりました。
/usr/local/bin/composer install --no-interaction php vendor/bin/phpunit -c phpunit-ci.xml.dist
なんでかJenkinsからの実行だと/usr/local/bin/
にパスが通っていないので、グローバルインストールしてあるcomposerをフルパスで実行してます。
composer installのあとにphpunitを実行していますが、jenkins用のテストの設定(カバレッジをとるなど、後述します)を使いたいので-c
オプションで専用のphpunitの設定ファイルを指定しています。
これで[保存]をクリックして完了。トップに戻って、時計アイコンをクリックして、試しに実行してみます。
カバレッジ
テストがうまくできたら、カバレッジもとりたくなりました。PHPでカバレッジをとるには、Clover PHP pluginを使います。 左メニューの[Jenkinsの管理]→[プラグインの管理]から
- Jenkins Clover PHP plugin
をインストール。Jenkinsを再起動。
ジョブの設定画面に行くと[ビルド後の処理の追加]に[Clover PHP カバレッジレポートを集計]という項目が増えているので、これをクリックして処理を追加します。
- Clover XMLパス:
reports/coverage/coverage.xml
- Clover HTMLレポート ディレクトリ:
reports/coverage
のように設定します。その後phpunit実行時に指定する設定ファイルphpunit-ci.xml.dist
に、以下のようなカバレッジを出力する設定を追加します。
<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true" berbose="true" bootstrap="test/bootstrap.php">
...いろいろ設定
<logging>
<log type="coverage-clover" target="reports/coverage/coverage.xml"/>
<log type="coverage-html" target="reports/coverage" charset="UTF-8" yui="true" highlight="true" lowUpperBound="35" highLowerBound="70"/>
</logging>
</phpunit>
以上でOK。テストとともにカバレッジを出力してくれるようになります。
終わりに
というわけで開発作業中、ローカルPCに開発環境用とCI用の2つのVMを常時起動させて作業するようになりました。 なんでもできることはローカルで、というのが最近の作業スタイルになっています。 基本一人で作業している身なので、サーバが外にある必要がないんですよね、あんまし。
あと、Jenkinsのジョブの設定とかもWebからやらないでchefでやりたいのですが、このへんは今後調べようかと思っています。