NEWS ABOUT Solution WORKS TEAM BLOG お問い合わせ JP EN

JenkinsでPHPプログラムをデバッグしてみよう!!




Jenkins
JenkinsPHP
JenkinsPHP

PHPJenkins使



OS:Centos6
PHP5.3
ZendFramework
JenkinsURLhttp://jenkins.example.com:8080
URLJenkins

1


Phing
    phpcs,phpmd,phpcpd,phpDocumentor,phpunit
Mercurial
    
    MercurialMercurial使
    Jenkinsgit, subversion
phpcs
    
phpmd
    PHP
    
phpcpd
    
PHPDocumentor
    PHPDocumentorHTML
phpunit
    PHP
xdebug
    PHP
Jenkins
    Jenkins

2


jenkins.example.com
(root)
Phing
    
# yum install gcc ImageMagick ImageMagick-devel php-devel -y
# vi /etc/php.d/imagick.ini

/etc/php.d/imagick.ini
extension=imagick.so

 pearphing
# pear channel-discover pear.phing.info
# pear channel-discover pear.pdepend.org
# pear channel-discover pear.phpmd.org
# pear channel-discover pear.phpunit.de
# pear channel-discover pear.phpdoc.org
# pear channel-discover pear.symfony.com
# pear channel-discover pear.netpirates.net
# pear install -a --force phing/phing

Mercurial
    yum 
# yum install mercurial

phpcs
    Phing
phpmd
    Phing
phpcpd
    Phing
PHPDocumentor
    Phing
phpunit
    Phing
xdebug
    PHPxdebug
    Phing
    
# cd /etc/php.d
# vi xdebug.ini

/etc/php.d/xdebug.ini
zend_extension=/usr/lib64/php/modules/xdebug.so

Jenkins
    yum 
# cd /etc/yum.repos.d/
# wget http://pkg.jenkins-ci.org/redhat/jenkins.repo
# rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
# yum install -y jenkins
# yum install -y java-1.6.0-openjdk

jenkins8080iptables8080

http://jenkins.example.com:8080
Jenkins
 
URLJenkins



ZendFramework
    http://framework.zend.com/ 1.12.6
Linux
     /var/www/htmlhoge
# cd /var/www/html
# tar xvfz ZendFramework-1.12.6-minimal.tar.gz
# mv ZendFramework-1.12.6-minimal hoge


    ZendFrameworkzf.sh
# cd /var/www/html
# ./hoge/bin/zf.sh create project ./hoge

composer
    composer
      PHPUnit使
# cd /var/www/html/hoge
# curl -sS https://getcomposer.org/installer | php
# php composer.phar install

phpunittestsbootstrap.php
    tests/bootstrap.php 2
<?php
require_once '../vendor/autoload.php';

phpunit
    phpunit
    tests/application/controllers/IndexContorollerTest.php 
<?php
class IndexControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
{
    public function setUp()
    {
        $this->bootstrap = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini');
        parent::setUp();
    }
    public function testHoge()
    {
        $stack = array();
        $this->assertEquals(0, count($stack));
    }
}

phing
    /var/www/html/hoge/buid.xml 
    phpcs, phpmd, phpcpd, phpdocumentor, phpunit
<?xml version="1.0" encoding="utf-8"?>
<project name="phingtest" default="build">
  <property name="basedir" value="${phing.dir}" />
  <property name="appdir"  value="${basedir}/application" />
  <property name="datadir" value="${basedir}/data" />
  <property name="logdir"  value="${datadir}/build/logs" />
  <target name="build" depends="clean,prepare,phpcs,phpmd,phpcpd,phpdoc,phpunit">
  </target>
  <target name="clean" description="clean">
    <delete dir="${logdir}" />
    <delete dir="${datadir}/build/coverage" />
    <delete dir="${datadir}/build/phpdoc" />
  </target>
  <target name="prepare" description="prepare">
    <mkdir dir="${logdir}" />
    <mkdir dir="${datadir}/build/coverage" />
    <mkdir dir="${datadir}/build/phpdoc" />
  </target>
  <target name="phpcs" description="PHPCS">
    <phpcodesniffer standard="Zend" file="${appdir}/" allowedFileExtensions="php">
      <formatter type="checkstyle" outfile="${logdir}/phpcs.xml" />
    </phpcodesniffer>
  </target>
  <target name="phpmd" description="PHPMD">
    <exec dir="${basedir}" executable="phpmd" output="${logdir}/phpmd.log">
      <arg line="${appdir}" />
      <arg line="xml" />
      <arg line="${basedir}/phpmd-rule.xml" />
      <arg line="--reportfile ${logdir}/phpmd.xml" />
      <arg line="--suffixes php" />
    </exec>
  </target>
  <target name="phpcpd" description="PHPCPD">
    <exec dir="${basedir}" executable="phpcpd" output="${logdir}/phpcpd.log">
      <arg line="--log-pmd ${logdir}/phpcpd.xml" />
      <arg line="--names *.php,*.phtml" />
      <arg line="${appdir}" />
    </exec>
  </target>
  <target name="phpdoc" description="Generate Application Documentation using PHPDocumentor2">
    <exec dir="${basedir}" executable="phpdoc" output="${logdir}/phpdoc.log">
      <arg line="run" />
      <arg line="-t ${datadir}/build/phpdoc" />
      <arg line="-d ${appdir}" />
      <arg line="-p" />
    </exec>
  </target>
  <target name="phpunit" description="run phpunit">
    <exec dir="${basedir}/tests" executable="phpunit" output="${logdir}/phpunit.log">
      <arg line="--configuration=${basedir}/tests/phpunit.xml" />
      <arg line="--log-junit=${logdir}/phpunit.xml" />
      <arg line="--coverage-html=${datadir}/build/coverage/" />
      <arg line="--coverage-clover=${logdir}/coverage.xml" />
    </exec>
  </target>
</project>

phpmd-rule.xml
    /var/www/html/hoge/phpmd-rule.xml 
<?xml version="1.0" encoding="UTF-8"?>
<!--
    PHPMD rule set file.
    @link http://phpmd.org/
-->
<ruleset name="PHPMD rule set for CakePHP"
    xmlns="http://pmd.sf.net/ruleset/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0
    http://pmd.sf.net/ruleset_xml_schema.xsd"
    xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">

    <description>PHPMD rule set</description>

    <!-- Import rule set -->
    <rule ref="rulesets/codesize.xml" />
    <rule ref="rulesets/design.xml" />
    <rule ref="rulesets/naming.xml">
        <!-- Exclude the rule for variable like $id, that baked by CakePHP. -->
        <exclude name="ShortVariable" />
    </rule>
    <rule ref="rulesets/naming.xml/ShortVariable">
        <properties>
            <property name="minimum" description="Minimum length for a variable" value="2"/>
        </properties>
    </rule>
    <rule ref="rulesets/unusedcode.xml" />
</ruleset>

tests/phpunit.xml 
    /var/www/html/hoge/tests/phpunit.xml
     whitelist  applicationphp
<phpunit bootstrap="./bootstrap.php">
    <testsuite name="Application Test Suite">
        <directory>./application&lt;/directory>
    </testsuite>
    <testsuite name="Library Test Suite">
        <directory>./library&lt;/directory>
    </testsuite>

    <filter>
        <!-- If Zend Framework is inside your project's library, uncomment this filter -->
        <whitelist>
            <directory suffix=".php">../application&lt;/directory>
        </whitelist>
    </filter>
</phpunit>

 mercurial
    mercurial
     bitbucket.org 使
    bitbucket
    scott tiger 
    bitbuckethoge 
# cd /var/www/html/hoge
# hg init
# hg add
# hg commit -m '初期プログラムの追加' -u scott
        (-u のところには貴方の名前を入れてください、ここではhogeとしています)
# hg push https://scott:tiger@bitbucket.org/scott/hoge
        (ファイル数が多いので、多少時間がかかります)


Jenkins


Jenkins
    http://jenkins.example.com:8080/
URLJenkins

Jenkins



mercurial

php
PHP PluginPhing PluginClover PHP Plugin


   
 hoge 
    

mercurial
Mercurial
URLbitbucketURL
 scotttiger bitbucket


Phing


Checkstyle
   data/build/logs/phpcs.xml 

PMD
   data/build/logs/phpmd.xml 


   data/build/logs/phpcpd.xml 

Clover PHP 
  Clover XML data/build/logs/coverage.xml 

E-mailE-mail
  



Jenkins hoge 



TOP
 ()


JenkinsPHP


JenkinsURL
 

Works Works

今井 健一朗
ひとつ前の投稿 ひとつ前の投稿
ひとつ前の投稿 ひとつ前の投稿 試してわかった!ペアプログラミングの面白さ