Archív

Archív pro ‘continuous integration’ Kategorie

PhpHudson

29.04.2009 View Comments

Vyvořil jsem pro mě užitečnou třídu v php pro práci s Hudsonem, která má zatím implementovány základní věci z remote api, kterým Hudson disponuje. Knihovna používá Curl a pracuje s Hudsonem přes REST.

Používám tuto knihovnu např. pro migraci všech jobů z jednoho hudsona na druhý.

Lehce můžeme totiž stáhnout všechny konfigurační soubory do jednoho adresáře.

getAllConfigs("/tmp/hudson/");

Potom můžeme projít adresář a založit jednotlivé joby.

createJob(basename(str_replace("-config.xml","",$file)), file_get_contents($dir.$file));
    }
    closedir($handle);
}

Pokud by chtěl někdo třídu používat, pracujte prosím se zdrojovým kódem:

svn checkout http://php4hudson.googlecode.com/svn/trunk/ php4hudson-read-only
Categories: continuous integration, php Tags:

Hudson a PHP

26.02.2009 View Comments

Hudson, extensible continuous integration engine

Hudson je obdoba CruiseControl a Xinc, ale oproti těm má jednu zásadní výhodu a to, že jeho vývoj jede poměrně slušným tempem a programátoři v Javě co znám ho používají. Pokud jsme chtěli mít jeden server, kde běží integrace pro Javu a PHP je podle mě v této době nejlepší sáhnout právě po Hudson.

Instalace

01_dashboard-hudson_1235663237019

Build

  • pro build jsem použil Phing, ale stejně můžete použít Ant
<?xml version="1.0" encoding="UTF-8"?>
<project name="start_page" basedir="." default="main">
<!-- $Id: build.xml 102 2009-02-26 14:39:10Z abtris $ -->
<property name="tmp" value="/tmp" />
<property name="wsname" value="source" />
<property name="package"  value="${phing.project.name}" override="true" />
<property name="builddir" value="${tmp}/build/${phing.project.name}" override="true" />
<property name="srcdir"   value="./src/" override="true" />

<!-- Main Target -->
<target name="main" description="main target">

<!-- Create dirs -->
<mkdir dir="${builddir}/reports"/>
<mkdir dir="${builddir}/reports/coverage"/>

<!-- PHP API Documentation -->
<phpdoc title="API Documentation"
destdir="${builddir}/apidocs"
sourcecode="yes"
defaultpackagename="StartPage"
output="HTML:Smarty:PHP">
<fileset dir=".">
<include name="*/*.php" />
</fileset>
</phpdoc>

<!-- PHP CodeSniffer -->
<exec command="phpcs --standard=ZEND --report=checkstyle ${ws}/${wsname}/src/ > ${builddir}/reports/checkstyle.xml" escape="false" />

<!-- PHPUnit -->
<exec command="phpunit --log-xml ${builddir}/reports/phpunit.xml --log-pmd ${builddir}/reports/phpunit.pmd.xml --coverage-clover ${builddir}/reports/coverage/clover.xml --coverage-html ${builddir}/reports/coverage/ tests/AllTests.php"/>

</target>
</project>

Příklad konfigurace

Project name
StartPage
Source Code Management
Subversion

  • Repository URL: https://localhost/svn/start_page/trunk
  • Local module directory (optional): source
  • Use update: true
Build
Execute shell

  • phing -f $WORKSPACE/source/build.xml -Dws=$WORKSPACE -Dtmp=$WORKSPACE
Post-build action
Publish Javadoc
  • Javadoc directory = build/start_page/apidocs/
  • Retain javadoc for each successful build = false
Publish JUnit test result report
Test report XMLs = build/start_page/reports/phpunit.xml
Publish Checkstyle analysis results
Checkstyle results = build/start_page/reports/checkstyle.xml
Publish PMD analysis results
PMD results = build/start_page/reports/phpunit.pmd.xml
Publish Clover Coverage Report
Clover report directory = build/start_page/reports/coverage/

Screenshots

V galerii jsou obrázky z Hudsona, nepřidal jsem obrázky, které vedou na dokumentaci v html formátu na code coverage report v html. Jsou tam jen výstupy, které zobrazuje Hudson nebo pluginy.

Závěr

Moje řešení není dokonalé, ale funkční a doufám, že to pomůže rozmnožit Hudson i mojo Java komunitu. Pokud Hudson pro PHP někdo použív budu rád, když se podělíte o zkušenosti v komentářích.

Categories: continuous integration Tags:

phpUnderControl vs Xinc

04.11.2008 View Comments

Nedávno jsem se snažil trochu vylepšit vývoj o některé aspekty, které mají spíše formálnější charakter. Celý vývojový proces jsem načrtl na následujícím obrázku.

Development Vývojář PHP má výhodu libovolného IDE (preferuji Eclipse PDT). Pro zdrojové kódy používám jako SCM Subversion. Nedávno jsem přidal pre-commit hook skript na kontrolu syntaxe. Používám ho hlavně pro kontrolu projektů v Zend Frameworku. PHP_CodeSniffer podporuje Checkstyle tak není problém výstup zaintegrovat i do jiných programů. Jako post-commit skript používám generován XML logů, které používá stránka s náhledy na projekty na kterých pracuji.

Protože jsem si oblíbil Phing pro automatizaci tvroby buildu hledal jsem něco co by to celé zastřešilo. Řešení je Continuous integration a pro php jsou použitelné jen dva projekty a to phpUnderControl a Xinc. Oba umí stejné nebo podobné věci a přece jenom se trochu liší jak vznikli a jak se provozují.

Jako první jsem zkoušel phpUnderControl. Ten je založený jako plugin do Cruisecontrolu, který je napsaný v Jave a běží jako vlastní webový server, který používá Ant a může volat víceméně přes něj cokoliv si zamanete. V phpUnderControl je integrována podpora pro PHPUnit (Code Coverage, Project Mess Detection and Software Metrics), PHPDocumentor a PHP_CodeSniffer. Pro zobrazení dat je připravena sada XSL stylesheetů pro Cruisecontrol, tak jsou vidět pěkné grafy.

Jedinou nevýhodu vidím v tom, že je to odělený systém běžící na Javě, ale to může být pro někoho klidně i výhoda.

Další CI server jsem vyzkoušel Xinc, ten má výhodu, že je napsaný v PHP a stačí mu Apache a skript který slouží jako CRON pro buildy. Místo Antu je použitý Phing a má ještě navíc podporu pro XDebug, který také umí Code Coverage Analysis a Profiling.

Xinc má vzhled založený na knihovně eZ Components, používá Base a Graph. Chybí mi v defaultních templates lepší podpora pro zobrazování výsledků z PHPDocumentor, PHP_CodeSniffer jak to má udělené phpUnderControl. Jak je vidět např. v demu, tak pokud se podívate na jednotlivý projekt je to jen log a odkazy, není to příliš elegantní a nejsou to jednotlivé html stránky na které lze odkazovat. Vývoj ale intenzivně pokračuje a uvidíme jakých vylepšení se dočkáme ve verzi 2.1. Výhody Xincu také vidím ve psaní pluginů přímo v php.

Zajímalo by mě jak to funguje jinde a případně, které řešení používate a proč.

Categories: continuous integration, php Tags:

Switch to our mobile site