JenkinsでPHPUnitを動かすまでなかなか手こずったのでメモ
JenkinsからGitHub上のプロジェクトを取得しPHPUnitを実行します。
環境
- VirtualBox 4.3.20
- Vagrant 1.7.2
- CentOS 7
- PHPUnit 4.6
- Jenkins 1.614
- GitHub
VagrantにJenkinsをセットアップ
バージョンは変えましたがこちらの記事を元に環境設定します。
vagrant up時にエラーが発生した場合はこちらを参考
CentOS7ではiptablesがfirewalldに変わっているので以下のコマンドでポートを解放します。
firewall-cmd --add-port=8080/tcp --zone=public --permanent
Jenkins に plugin 追加
- Git Plugin
- Phing Plugin
Jenkins に必要な設定を追加
Git
今回はjenkinsからGithubへアクセスできるように直接jenkinsサーバへ設定を追加します。
cd /var/lib/jenkins
sudo mkdir .ssh
sudo vi .ssh/id_rsa
# Github への秘密鍵を追加
# 権限変更
sudo chown -R jenkins:jenkins .ssh/
sudo chmod 400 .ssh/id_rsa
# アクセス確認
sudo -u jenkins ssh -T git@github.com
Hi taisa007! You've successfully
PHP
-
PHP 5.6 インストール
- こちら を参考 ※ CentoS7用
-
composer
- su -
- curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin
-
phpunit
- こちら を参考
- 今回は 4.6 を利用するので、url を https://phar.phpunit.de/phpunit-4.6.6.phar に変更
-
phing
- こちらを参考
Jenkins へジョブを追加
参考ですが以下のように設定しました。
build.xml
<?xml version='1.0' encoding='UTF-8'?>
<project>
<actions/>
<description></description>
<keepDependencies>false</keepDependencies>
<properties/>
<scm class="hudson.plugins.git.GitSCM" plugin="git@2.3.5">
<configVersion>2</configVersion>
<userRemoteConfigs>
<hudson.plugins.git.UserRemoteConfig>
<url>git@github.com:taisa007/phpunit.git</url>
</hudson.plugins.git.UserRemoteConfig>
</userRemoteConfigs>
<branches>
<hudson.plugins.git.BranchSpec>
<name>*/master</name>
</hudson.plugins.git.BranchSpec>
</branches>
<doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations>
<submoduleCfg class="list"/>
<extensions/>
</scm>
<canRoam>true</canRoam>
<disabled>false</disabled>
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<triggers>
<hudson.triggers.SCMTrigger>
<spec>00 * * * *</spec>
<ignorePostCommitHooks>false</ignorePostCommitHooks>
</hudson.triggers.SCMTrigger>
</triggers>
<concurrentBuild>false</concurrentBuild>
<builders>
<hudson.plugins.phing.PhingBuilder plugin="phing@0.13.3">
<targets>test</targets>
<useModuleRoot>true</useModuleRoot>
</hudson.plugins.phing.PhingBuilder>
</builders>
<publishers/>
<buildWrappers/>
</project>
Phing コマンドを実行してみる
jenkins 上で実行されるのは、以下のコマンドを実行しているのとほぼ同じなので、上手くいかない場合は一度 jenkins サーバ上で直接 phing コマンドを実行してみましょう。
cd /var/lib/jenkins/jobs/phpunit/workspace/
phing
Buildfile: /var/lib/jenkins/jobs/phpunit/workspace/build.xml
Demo > test:
[phpunit] Total tests run: 1, Failures: 0, Errors: 0, Incomplete: 0, Skipped: 0, Time elapsed: 0.00897 s
BUILD FINISHED
Total time: 0.1503 seconds
テストが実行され成功しました。
また、build.xml は、こちらを元に設定を一部変更して利用しています。
とりあえずテスト結果を集計して表示する
Phing の設定を report に変更し、ビルド後の処理の追加で、JUnitテスト結果の集計から設定を追加すると、ビルド結果を画面で確認することができます。
<?xml version='1.0' encoding='UTF-8'?>
<project>
<actions/>
<description></description>
<keepDependencies>false</keepDependencies>
<properties/>
<scm class="hudson.plugins.git.GitSCM" plugin="git@2.3.5">
<configVersion>2</configVersion>
<userRemoteConfigs>
<hudson.plugins.git.UserRemoteConfig>
<url>git@github.com:taisa007/phpunit.git</url>
</hudson.plugins.git.UserRemoteConfig>
</userRemoteConfigs>
<branches>
<hudson.plugins.git.BranchSpec>
<name>*/master</name>
</hudson.plugins.git.BranchSpec>
</branches>
<doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations>
<submoduleCfg class="list"/>
<extensions/>
</scm>
<canRoam>true</canRoam>
<disabled>false</disabled>
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<triggers>
<hudson.triggers.SCMTrigger>
<spec>00 * * * *</spec>
<ignorePostCommitHooks>false</ignorePostCommitHooks>
</hudson.triggers.SCMTrigger>
</triggers>
<concurrentBuild>false</concurrentBuild>
<builders>
<hudson.plugins.phing.PhingBuilder plugin="phing@0.13.3">
<targets>report</targets>
<useModuleRoot>true</useModuleRoot>
</hudson.plugins.phing.PhingBuilder>
</builders>
<publishers>
<hudson.tasks.junit.JUnitResultArchiver plugin="junit@1.2-beta-4">
<testResults>reports/*.xml</testResults>
<keepLongStdio>false</keepLongStdio>
<testDataPublishers/>
<healthScaleFactor>1.0</healthScaleFactor>
</hudson.tasks.junit.JUnitResultArchiver>
</publishers>
<buildWrappers/>
</project>