2011-12 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
※ 詳細情報は「Jenkinsの管理」>「プラグインの管理」から辿れる、各プ
ラグインのリンク先を参照して下さい。
これはインストールした方がよいでしょう。そしてテストを失敗させましょうw
各プロジェクトの設定で ON/OFF できます。
設定すると、指定した channel に Jenkins さんが常駐します。ビルド結
果を IRC で通知してくれるだけでなく、IRC から Jenkins を実行できた
りもします。
私の設定は以下のとおり。
Hostname | chat.freenode.net |
Port | 6667 |
Channels Name | #example |
Nickname | jenkinsbot |
Command prefix | jenkinsbot: |
(高度な設定)Use /notice command | チェックを入れる |
プロジェクトのトップページに Redmine のリンクが現れます。
コミットメッセージの refs #100 とかが概チケットへのリンクになります。
「リモートからビルド (例: スクリプトから)」がうまくいかないので、
とりあえず「SCMをポーリング」にしました。
10 分おきにポーリングです。
*/10 * * * *
Jenkins は良くできたツールなんだけど、微妙に設定が効かないことがあ
るよなあ。単にまだ自分に馴染んでいないだけなのか。
CakePHP2 から、奨励単体テストツールが SimpleTest から PHPUnit になっ
たのは周知のとおり。http://example.com/cakephp/test.php などから単
体テストができるようになり、カバレッジ率も測定できる環境が整ったら、
Jenkins でも実行したいところ。
まずはコマンドラインからテストを実行できることを確認する。
% cd app
% mkdir -p results
% ../lib/Cake/Console/cake testsuite --log-junit results/phpunit.xml --coverage-clover results/coverage.xml app AllTests
上の例では、Controller や Model を含めた全てのテストケースを実行す
る app/Test/Case/AllTestsTest.php を実行している。
このとき
PHP Fatal error: Class 'DOMDocument' not found in /usr/share/pear/PHPUnit/Util/Log/JUnit.php on line 135
なんていうエラーが起きたら、configure で –with-dom を有効にした
PHP がインストールされていない。remi リポジトリからインストールする
と良い(詳細は割愛)。
% sudo yum --enablerepo=remi,epel,rpmforge,rpmforge-extras,rpmforge-testing install php-xml
ここまで出来たらあとは簡単。Jenkins に設定するだけ。
トップの「Jenkinsの管理」>「プラグインの管理」から、
results/coverage.xml を解析するためのプラグイン、Clover PHP Plugin
をインストールする。
続けて、プロジェクトに前述のコマンドを設定する。
1. プロジェクト(例:hoge)のトップページから「設定」をクリック。
2. 「ビルド」>「ビルド手順の追加」>「シェルの実行」をクリック。
以下を設定する。
cd ${WORKSPACE}/app
mkdir -p results
../lib/Cake/Console/cake testsuite --log-junit results/phpunit.xml --coverage-clover results/coverage.xml app AllTests
3. 「ビルド後の処理」>「Clover PHP カバレッジレポートを集計」をクリック。
「Clover XMLパス」に app/results/coverage.xml を指定する。
4. 同様に「JUnitテスト結果の集計」をクリック。
「テスト結果XML」に app/results/phpunit.xml を指定する。
あとはビルドするだけ。エラーが発生してしまったら「コンソール出力」
を見ると、原因が大体分かります。
参考 URL:
Fatal error: Class ‘DOMDocument’ not foundと出たら: PHPの種 ブログ
手っ取り早く使ってみたかったので、最初に Jenkins からコーディング規
約チェック出来るようにしてみた。単体テストだと、最初にテストコード
を書かなくちゃいけないからね。
インストールすると、phpcs コマンドを使えるようになる。
pear コマンドでインストール出来るが、
% sudo pear install PHP_CodeSniffer
エラーが発生してインストールできなかったので、
downloading PHP_CodeSniffer-1.3.2.tgz ...
Starting to download PHP_CodeSniffer-1.3.2.tgz (328,845 bytes)
......................done: 328,845 bytes
PHP Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 23378 bytes) in /usr/share/pear/PEAR.php on line 252
PHP Stack trace:
PHP 1. {main}() /usr/share/pear/pearcmd.php:0
PHP 2. PEAR_Command_Common->run() /usr/share/pear/pearcmd.php:305
PHP 3. PEAR_Command_Install->doInstall() /usr/share/pear/PEAR/Command/Common.php:271
PHP 4. PEAR_Installer->install() /usr/share/pear/PEAR/Command/Install.php:708
PHP 5. PEAR_Installer->_installFile2() /usr/share/pear/PEAR/Installer.php:1406
PHP 6. PEAR->isError() /usr/share/pear/PEAR/Installer.php:600
PHP 7. is_a() /usr/share/pear/PEAR.php:252
/etc/php.ini をこのように修正した。
memory_limit = 16M
↓
memory_limit = 32M
※ 以降のどこの操作かは忘れましたが、同じ現象が発生したため、私の環
境では最終的に 256M に落ち着きました。
PHP_CodeSniffer をインストールできた。
% phpcs --version
PHP_CodeSniffer version 1.3.2 (stable) by Squiz Pty Ltd. (http://www.squiz.net)
% phpcs -i
The installed coding standards are MySource, PEAR, PHPCS, Squiz and Zend
CakePHP 用の規約は同封されていないので、別途インストールした。
% cd ~/tmp
% git clone git://github.com/jrbasso/CodeSniffer_CakePHP.git
% cd /usr/lib/php/pear/PHP/CodeSniffer/Standards
% sudo cp -r ~masutaka/tmp/CodeSniffer_CakePHP CakePHP
無事追加された。
% phpcs -i
The installed coding standards are CakePHP, MySource, PEAR, PHPCS, Squiz and Zend
app/controllers 以下とかでチェックできるようになった。
% phpcs --report=summary --report-checkstyle=phpcs.xml --standard=CakePHP --extensions=php .
1. トップの「Jenkinsの管理」>「プラグインの管理」をクリックする。
2. 「利用可能」タブをクリックし、Git Plugin と Checkstyle Plugin を
選択し、インストールする。
1. トップから「新規ジョブ作成」をクリックする。
2. 「ジョブ名(要はプロジェクト名)」に適当な名前(例:hoge)を指定する。
/var/lib/jenkins/workspace 以下に同じ名前のディレクトリが作られるの
で英語名が良い。
3. 「フリースタイル・プロジェクトのビルド」を選択し、OK をクリック。
4. 「ソースコード管理システム」の Git を選択。Repository URL を指定
する(例:/home/foo/hoge.git)。
1. そのまま同じ設定画面の「ビルド」>「ビルド手順の追加」>「シェルの
実行」をクリック。Controller と Model 以下の .php ファイルを対象と
したい場合は、以下を設定する。
cd ${WORKSPACE}/app
mkdir -p results
find Controller Model -type f -name "*.php" ! -name AppController.php -print0 | \
xargs -0 phpcs --report=summary --report-checkstyle=results/phpcs.xml --standard=CakePHP --extensions=php || id
※ 1つでもエラーがあるとビルド失敗だと判断されてしまうので、この例
では最後に id コマンドを実行して、常にビルドが成功するようにしている。
2. 「ビルド後の処理」>「CheckStyle警告の集計」をクリック。「集計す
るファイル」に app/results/phpcs.xml を指定する。
あとはビルドを実行するだけ。警告出まくりだけど、Jenkins から
CakePHP コーディング規約をチェック出来た。
参考 URL:
CakePHPのコーディング規約違反をPHP_CodeSnifferでチェックする #CakephpAdvent2011 : candycane development blog
ログインしないとアクセス出来ないようにする。
管理者が手動でアカウントを作成すると、ユーザーがサインアップできる。
第3者は勝手にサインアップできない。
「Jenkinsの管理」>「システムの設定」>「セキュリティを有効化」にチェック
「アクセス制御」>「ユーザー情報」>「Jenkinsのユーザーデータベース」にチェック
「ユーザーにサインアップを許可」のチェックを外す。
「アクセス制御」>「権限管理」>「行列による権限設定」にチェック。
「追加するユーザー/グループ」から masutaka を追加。全アクセス権を付与。
トップに戻り masutaka のサインアップをすると、ログイン出来るようになる。
CakePHP-2.0.4 で継続的インテグレーション(CI)ができる環境を構築する
ため、Jenkins をインストールすることにした。
ネット上を探し回ったんだけど、まだ Jenkins x CakePHP2 の情報はまと
まってないみたい。毎度のことながら途中何度も何度もハマり、設定して
はアンインストールし、設定してはアンインストールしを 7〜8 回はやっ
たと思う。同じように困っている人と、将来の自分のために構築メモを残
すことにする。全 6 回。
Jenkins のバージョンは 1.445、CentOS のバージョンは 5.6。
Jenkins をインストール&起動した。Jenkins 用のリポジトリを yum の
リポジトリリストに追加して、yum install するだけ。
% sudo yum install java-1.6.0-openjdk
% sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
% sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
% sudo yum install jenkins
% sudo /sbin/service jenkins start
http://example.com:8080 にアクセスできるようになった。設定ファイル
や workspace は /var/lib/jenkins に、ログは /var/log/jenkins に作ら
れる。
設定やビルド結果は xml で保存され、MySQL とかは使わないので、気楽と
言えば気楽。
そして、ここまでは簡単。
2011-12 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31