Jenkins és a PHP
Ebben az írásomban egy olyan környezet telepítésén fogok lépésről lépésre végigmenni, amelynek a végén lesz egy CI (Continuous Integration) szerverünk (Jenkins), és az itt felvett projektet egy Git repositoryból fogja automatikusan letölteni, majd pedig a projekten a következő taskokat fogja végrehajtani:
- Ellenőrzi, hogy minden PHP állomány szintaktikailag helyes-e.
- phploc - statisztikát kapunk a projekt méretéről és felépítéséről
- pdepend - szoftver metrikák használata
- phpmd - potenciális hibák keresése a forráskódban
- phpcs - checkstyle, avagy kódolási konvenciók ellenőrzése
- phpcpd - copy/paste detektálás
- phpdox - HTML alapú API generálás
- phpunit - unit tesztek futtatása
- phpcb - HTML alapú kód böngésző generálás
A telepítést Debian OS-en mutatom be, és Sebastian Bergmann hasonló tartalmú írását vettem alapul. A parancsokat root felhasználóként futtattam.
PEAR csomagok
Az előbb felsorolt eszközök többnyire PEAR csomagban is elérhetők. Telepítsük fel a PEAR-t (és két szükséges PHP extensiont), ha még nincs fent a gépen:
apt-get install php-pear php5-xsl php5-xdebug
Ezután frissítsük a PEAR-t, és telepítsük fel a szükséges csomagokat:
pear update-channels
pear upgrade-all
pear config-set auto_discover 1
pear install pear.phpqatools.org/phpqatools
pear install channel://pear.netpirates.net/phpDox-0.4.0
Ant
Maga a build folyamat ant segítségével történik, a konfigurációs fájlban vannak definiálva a lefuttatandó feladatok (targetek). Telepítsük fel az ant-ot:
apt-get install ant
Jenkins
A Jenkins-hez szükségünk lesz az Oracle JRE-re, ennek a telepítését nem mutatom be, elég különböző az egyes rendszereken. A Jenkins viszont szerencsére elérhető repository-ból, a telepítés ezen fázisa teljesen megegyezik az itt leírtakkal: http://pkg.jenkins-ci.org/debian/
Ha sikerült feltelepíteni, akkor hátra van még a konfiguráció. A rendszerünkben létrejött egy jenkins nevű felhasználó, így az ő nevében állítsuk be a következő dolgokat, nehogy jogosultsági hibába fussunk:
cd /var/lib/jenkins/jobs
sudo -u jenkins git clone git://github.com/sebastianbergmann/php-jenkins-template.git php-template
sudo -u jenkins git config --global user.name "jenkins"
sudo -u jenkins git config --global user.email "jenkins@localhost"
Ezután indítsuk újra a Jenkinst (a telepítést követően el is indult):
/etc/init.d/jenkins restart
Ha sikerrel jártunk, akkor a http://host:8080 URL-en be kell jönnie a felületnek.
A CI szerverünknek még szüksége van egy SSH kulcsra, hogy a Git repositoryhoz csatlakozni tudjon. Ehhez generáljunk neki egy kulcsot. Itt problémába ütköztem, mivel passphrase-t megadva a Jenkins nem boldogul a kapcsolódással. Ezt úgy oldottam meg, hogy passphrase nélküli kulcsot generáltam (akinek van jobb ötlete, ossza meg velem).
Ahhoz, hogy a Jenkins automatikusan megbízzon a host-ban (ahol yes-t kell begépelni első alkalommal, amikor manuálisan csatlakozunk a szerverhez), hozzuk létre a következő fájlt:
/var/lib/jenkins/.ssh/config
És másoljuk bele a következőket:
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
Ezzel a szerver konfigurációval végeztünk. Vegyük elő a projektünket.
Projekt felkészítése a build-hez
A projekt gyökerében hozzuk létre az ant, a phpunit, valamint a phpdox konfigurációs XML fájlokat. Ezekre példát itt találtok: https://github.com/szjani/equlib. Ezek többnyire megfelelnek bármely projekt esetén, nyilvánvalóan a könyvtárak (lib, tests, stb.) elérési útvonalát módosítsuk a fájlokban, amennyiben szükséges.
A phpmd, valamint a phpcs konfigurációs állományok a build könyvtárban találhatók, ezekről az eszközök honlapján olvashattok többet.
Buildelés
Navigáljunk a projekt gyökerébe, és adjunk ki az ant parancsot. A projekt méretétől függ, mennyi ideig tart a folyamat, ha minden sikeres volt, akkor egy BUILD SUCCESSFUL feliratot kell látnunk. Ebben az esetben töltsük fel a változtatásokat a Git repositorynkba.
Jenkins pluginok
Ahhoz, hogy a Jenkins végrehajtsa és szép formában megjelenítse a build során készült kimutatásokat és eredményeket, fel kell telepítenünk a következő pluginokat:
- Checkstyle
- Clover PHP
- DRY
- HTML Publisher
- Plot
- PMD
- Violations
- xUnit
- Git
Én a telepítéshez a felületet használtam, amit a “Jenkins Kezelése”, “Kiegészítők Kezelése” útvonalon értem el.
Jenkins felület
- Kattintsunk az “Új Job” linkre (ez eltérhet, függ a lokalizációtól)
- Írjuk be a projekt nevet
- Válasszuk ki az utolsó lehetőséget és írjuk be a mezőbe a php-template szöveget
- OK
- Kapcsoljuk ki a “Disable Build” mellől a checkboxot
- A “Publish HTML reports”-nál az API sorban írjuk át az index.html-t index.xhtml-re
- Adjuk meg a Git repo elérési útvonalát
- Mentsük el a “Save” gombbal a konfigurációt
A projekt oldalán az “Építés Most” linkre kattintva tudjuk megkezdeni a buildet.
Ha sikertelen a build, akkor először nézzük meg a felületen a logot, ahol a parancssori kimenetet láthatjuk. Ha valahol mélyebben van a probléma, akkor nézzünk rá a /var/log/jenkins/jenkins.log
fájlra is.