Jenkinsを1.516から1.526にアップデートし、プラグインもアップデートし
たらRuby関連のジョブが消えました。。
小一時間悩んで管理画面からシステムログを見たら、
Failed Loading plugin ruby-runtime
とのエラーメッセージ。このプラグインをインストールしたら直りました。
なぜ急に必要になった?と思い、/var/log/jenkins/jenkins.logを見たら、
rbenvとrvmプラグインが要求していました。
2013/08/10 11:11:01 jenkins.InitReactorRunner$1 onTaskFailed
致命的: Failed Loading plugin rbenv
java.io.IOException: Dependency ruby-runtime (0.10) doesn't exist
2013/08/10 11:11:01 jenkins.InitReactorRunner$1 onTaskFailed
致命的: Failed Loading plugin rvm
java.io.IOException: Dependency ruby-runtime (0.7) doesn't exist
プラグインのページを見ると、確かにそう書いてあります。
https://wiki.jenkins-ci.org/display/JENKINS/Rbenv+Plugin
https://wiki.jenkins-ci.org/display/JENKINS/RVM+Plugin
最初のプラグインアップデートで、rbenvもrvmもアップデートされなかっ
たようなので(※)、Jenkinsがエラーを正しく処理してジョブが消えたのか
もしれません。
※ どのプラグインをアップデートしたかはログに書かれないようなので、
確定ではないですが。
しかし、依存関係が出来たのに、なぜruby-runtimeがインストールされな
かったのだろう。。
結論: ログ大事
git push したら、すぐにテストを実行して欲しいだけなんです。
もう、ポーリング [2011-12-30-5] で新しい commit があるかチェック
するのは嫌なんです。
いや〜、Jenkins-CLI でやろうとしてかなりハマりました。
loading...
loading...
loading...
初心に返ってJenkins実践入門読みましたが、Git には特に触れられておらず...。
どうせこれも Jenkins-CLI のススメだろうと WEB+DB PRESS Vol.67 の
17 ページ目のコラムの URL を読んでみた。
「あれ? Git プラグインだけでできるの?」
試しに git push の後に Web ブラウザで
http://example.com:8080/git/notifyCommit?url=/home/foo/hoge.git
にアクセスしたら、ビルドが始まったじゃありませんか!
あとは /home/foo/hoge.git/hooks/post-receive に以下を追加して終了。
curl 'http://example.com:8080/git/notifyCommit?url=/home/foo/hoge.git'
なんか矛盾しますが、「SCMをポーリング」にはチェックを入れる必要があ
ります。スケジュールは空っぽで OK です。
あと、今回のもうひとつの素晴らしい点は、認証が必要なシステムでも使
えることにあります。
長年のつっかえがやっと取れました!
Jenkins さん、dis ってすみませんでした。
※ 詳細情報は「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 とかが概チケットへのリンクになります。
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 とかは使わないので、気楽と
言えば気楽。
そして、ここまでは簡単。