https://github.com/mp-php/fuel-myapp/blob/master/jenkins.md
--
2013/01/05 必要なJenkinsプラグインと必要なPHPモジュール等を追記しました。
2013/01/05 Phing用のテンプレート(コビー用)ジョブについて追記しました。
--
これまで、Jenkins + Phing + FuelPHP + αで、以下を確認しました。
JenkinsとPhingとPHPUnitでFuelPHPのHTMLカバレッジレポートを作成する
http://madroom-project.blogspot.jp/2013/01/jenkinsphingphpunitfuelphphtml.html
JenkinsとPhingとPHPUnitでFuelPHPのテスト統計を作成する
http://madroom-project.blogspot.jp/2013/01/jenkinsphingphpunitfuelphp.html
JenkinsとPhingとphpDocumentor 2でFuelPHPのPHPDocを作成する
http://madroom-project.blogspot.jp/2013/01/jenkinsphingphpdocumentor-2fuelphpphpdoc.html
JenkinsとPhingとPHPMDでFuelPHPのPMDレポートを作成する
http://madroom-project.blogspot.jp/2013/01/jenkinsphingphpmdfuelphppmd.html
JenkinsとPhingとPHPCPDでFuelPHPのCPDレポートを作成する
http://madroom-project.blogspot.jp/2013/01/jenkinsphingphpcpdfuelphpcpd.html
上記を、以下の方法で全自動化してみます。(とりあえず、DL直後のFuelPHPでやってみます。)とは言っても、各手順は上記の通りなので、この記事は、主に、後述するbuild.xmlに対する設定のメモになります。(build.xmlは、上記のURLの内容から修正されています。)
Gitoliteに触れずにGitLabのhookからJenkins側でビルドする
http://madroom-project.blogspot.jp/2013/01/gitolitegitlabhookjenkins.html
尚、以下のように、Jenkins側で権限設定を行なっていても特に問題有りませんでした。
Jenkinsの権限設定メモ
http://madroom-project.blogspot.jp/2013/01/jenkins_5.html
--
以下、手順等です。
JenkinsとGitLabは同一サーバ上で、以下のようにアクセスするイメージです。
* http://example.com/jenkins/
* http://example.com/gitlab/
必要なJenkinsプラグインは、以下になります。
* HTML Publisher plugin
PHPUnitのHTMLカバレッジレポートとPHPDoc用
* xUnit Plugin
PHPUnitのテスト統計用
* PMD Plugin
PHPMDのPMDレポート用
* DRY Plugin
PHPCPDのCPDレポート用
必要なPHPモジュール等は、以下になります。
* PHPUnit
http://madroom-project.blogspot.jp/2013/01/ubuntuphpunit.html
* Xdebug
http://madroom-project.blogspot.jp/2013/01/ubuntuxdebug.html
* Phing
http://madroom-project.blogspot.jp/2013/01/ubuntuphing.html
* phpDocumentor 2とGraphViz
http://madroom-project.blogspot.jp/2012/12/phpdocumentor-2macwin.html
* PHPMDとPHPCPD
PHPUnitとPhingを-a(--alldeps)オプション付きでインストールしたら入っていました。
* https://github.com/mp-php/fuel-myapp/blob/master/build.xml
* https://github.com/mp-php/fuel-myapp/blob/master/phpunit.xml
一応、2013/01/05現在の内容を貼っておきます。
-- build.xml --
<?xml version="1.0" encoding="utf-8"?> <project name="FuelPHP Project" basedir="." default="all"> <property name="phing_dir_name" value="phing" /> <property name="phpunit_dir_name" value="${phing_dir_name}/phpunit" /> <property name="phpdoc_dir_name" value="${phing_dir_name}/phpdoc" /> <property name="phpmd_dir_name" value="${phing_dir_name}/phpmd" /> <property name="phpcpd_dir_name" value="${phing_dir_name}/phpcpd" /> <target name="init"> <delete dir="${phing_dir_name}" includeemptydirs="true" /> <mkdir dir="${phing_dir_name}" /> </target> <target name="phpunit"> <mkdir dir="${phpunit_dir_name}" /> <exec dir="." command=" phpunit -c fuel/app/phpunit.xml --coverage-html ${phpunit_dir_name}/coverage/html --log-junit ${phpunit_dir_name}/junit.xml "/> </target> <target name="phpdoc"> <mkdir dir="${phpdoc_dir_name}" /> <exec dir="." command=" phpdoc -d fuel/app/ -t ${phpdoc_dir_name}/ "/> </target> <target name="phpmd"> <mkdir dir="${phpmd_dir_name}" /> <exec dir="." command=" phpmd fuel/app/ xml codesize,design,naming,unusedcode --reportfile ${phpmd_dir_name}/pmd.xml "/> </target> <target name="phpcpd"> <mkdir dir="${phpcpd_dir_name}" /> <exec dir="." command=" phpcpd --log-pmd ${phpcpd_dir_name}/cpd.xml fuel/app/ "/> </target> <target name="all" depends="init,phpunit,phpdoc,phpmd,phpcpd" /> </project>-- phpunit.xml --
<?xml version="1.0" encoding="UTF-8"?> <phpunit colors="true" stopOnFailure="false" bootstrap="../core/bootstrap_phpunit.php"> <php> <server name="doc_root" value="../../"/> <server name="app_path" value="fuel/app"/> <server name="core_path" value="fuel/core"/> <server name="package_path" value="fuel/packages"/> </php> <testsuites> <testsuite name="core"> <directory suffix=".php">../core/tests</directory> </testsuite> <testsuite name="packages"> <directory suffix=".php">../packages/*/tests</directory> </testsuite> <testsuite name="app"> <directory suffix=".php">../app/tests</directory> </testsuite> </testsuites> <filter> <blacklist> <directory suffix=".php">../core</directory> <directory suffix=".php">../packages</directory> <directory suffix=".php">../app/vendor</directory> </blacklist> </filter> </phpunit>
(1)
http://www.fuelphp.com/ からzipをDLします。
解凍したディレクトリ(以下、"ルート")のfuelディレクトリ、publicディレクトリ、oilファイルのみを残して、他を削除します。
ルートにbuild.xmlを配置します。
fuel/app/にphpunit.xmlを配置します。
(2)
GitLabの任意なグループ(仮に"xxx"とします。)にプロジェクト(仮に"FuelPHP"とします。)を作成して、(1)一式をpushします。
また、このプロジェクトには http://madroom-project.blogspot.jp/2013/01/gitolitegitlabhookjenkins.html のように、jenkins用ユーザをReporter以上で登録しておきます。
hookの設定も済ませておきます。以下を入力します。
http://example.com/jenkins/git/notifyCommit?url=git@example.com:xxx/fuelphp.git
(3)
Jenkinsのシステム設定で"Git plugin"の"Global Config user.name Value"と"Global Config user.email Value"を入力します。
Jenkinsで"Build a free-style software project"な新規Jobを作成します。
"Source Code Management"は"Git"を選びます。
レポジトリのURLは"git@example.com:xxx/fuelphp.git"になります。
"Repository browser"は"gitlab"を選択して、URLは"http://example.com/gitlab/xxx/fuelphp/"になります。
"Build Triggers"の"Poll SCM"にチェックを入れます。
"Build"に"Invoke Phing targets"を追加して、"Targets"を"all"とします。
Post-build Actionsに以下を追加します。
▼Publish PMD analysis results
"PMD results"は"phing/phpmd/pmd.xml"です。
▼Publish duplicate code analysis results
"Duplicate code results"は"phing/phpcpd/cpd.xml"です。
▼Publish HTML reports(PHPUnit用)
"HTML directory to archive"はphing/phpunit/coverage/html"です。
"Index page[s]"はindex.html"です。
"Report title"は"Coverage"です。(ここは何でも良いです。)
▼Publish HTML reports(PHPDoc用)
"HTML directory to archive"はphing/phpdoc"です。
"Index page[s]"はindex.html"です。
"Report title"は"PHPDoc"です。(ここは何でも良いです。)
▼Publish xUnit test result report - PHPUnit-3.x (default)
"Pattern"は"phing/phpunit/junit.xml"です。
"Save"して"Build Now"します。1度では右側にTrendが表示されないようなので、2度行います。
"Coverage"、"PHPDoc"、"PMD Trend"、"Duplicate Code Trend"、"Test Result Trend"が表示されたことを確認します。
(4)
適当に何らかの修正を行い、GitLabにPushして、ビルドが走る事を確認します。
P.S.
長かった。。。
--
上記の(3)を毎回行うのは面倒そうなので、コピー用のジョブを作りました。差分のみ記述します。
1. Project name: PhingTemplate
2. Disable Build: チェック
3. GitのRepository URL: 適当なURL
4. Repository browser: 適当なURL
その他の設定は、上記の(3)と同様です。
コピー後は、上記の2/3/4を修正するのみです。
最後に、タイトルには"FuelPHP"とありますが、FuelPHPに依存しているのはbuild.xml(と、build.xmlで指定しているphpunit.xml)のみで、他はPhing周りの話になります。なので、build.xmlを差し替えるだけで、他のPHPプロジェクトでも使えるかなと。
2013/01/06 続き書きました。
FuelPHPとGitLabとJenkinsで継続的インテグレーションする雛形を考えてみた 2
http://madroom-project.blogspot.jp/2013/01/fuelphpgitlabjenkins-2.html
No comments:
Post a Comment