Continuous integration      Mikor, miért, hogyan         Nagy Norbert
Nagy NorbertTechnical Team Lead @ InviqaTwitter: @nagno123Email: norbert.nagy@inviqa.comProjectek, amelyeken dolgoztam az ...
Az előadáson szó lesz:• Mi is az a continuous integration és miért jó eznekünk• Milyen fontosabb elemei vannak• Hogyan kel...
Continuous IntegrationContinuous Integration is a software developmentpractice where members of a team integrate theirwork...
Követelmenyek a CIelkezdéséhez• A fejlesztői csapat minden tagja rendszeresenfrissíti a közös kódbázist friss verzióval• A...
Optimális architektúraFejlesztői gép    Előzetes tesztek a fejlesztő gépénStaging szerver   CI, belső tesztelő itt tesztel...
Automatizált build folyamat• Bármely interakció nélkül• Ant• Phing• Capistrano
Ant telepítése• apt-get vagy yum segítségével• Az adott rendszernek megfelelő bináris telepítőfájlok is letölthetőek az an...
Verziókezelő rendszerek• Git• Mercurial• SVN• CVS
PHPUnit és egyéb QAeszközök telepítése• sudo pear config-set auto_discover 1• sudo pear channel-discover pear.phpunit.de• ...
Telepített QA eszközök• PHPUnit• PHP_CodeSniffer• phpcpd• PHP_Depend• phpmd• phploc• PHP_CodeBrowser• phpDocumentor 2
Coding standard• Különböző coding standardok léteznek.      PEAR      PEAR2      PHP Standards Working Group      PSR-0, P...
PHP_CodeSniffer• PHP, Javascript, CSS fájlok• A kódolási standardtól való eltéréseket detektálja és jelzi$ phpcs /path/to/...
phpcpd• Detektálja a másolt kódot• A kód duplikáció helyett refaktorálás javasolt, mert megsértia SOLID-ot (Single respons...
PHP_Depend• A statikus kódanalízis egyik fontos eszköze• Különböző szoftvermetrikák tesztelése• Mindegyik szoftvermetrika ...
phploc• Statikus kód analízis eszköze• Forráskód struktúrájának felmérésére szolgál$ phploc /usr/local/src/phpunit/PHPUnit...
PHPMD – PHP Mess Detector• Statikus kódanalízis eszköz• Lehetséges hibák• Nem optimális kód• Túlkomplikált kifejezések• Ne...
Tesztelés előnyei• Minél hamarabb megtalálunk egy hibát, annálegyszerűbben és hamarabb kijavítható• A kód egyes részei elk...
Tesztek• Unit (PHPUnit, phpspec)• Integráció (PHPUnit, phpspec)• User Acceptance (phpspec, Behat, Selenium)• Terhelés (Gat...
Unit test• TDD• Nem a 100%-os lefedettség a cél!• Nem használhat külső eszközt(adatbázis, fájl, WS), csak ezek Mock változ...
TDD folyamata                    Igen      Tesztkészítése/módos      ítása                   Nem     Sikeresen            ...
Dokumentáció készítése• Egy jól megírt kód önmagát dokumentálja• PHPDocumentor 2• PHPDox/**  * Returns with the label of t...
Jenkins telepítése és futtatásaLetölthető:wget http://mirrors.jenkins-ci.org/war/latest/jenkins.warFuttatható:java -jar je...
Telepítendő pluginek:• Github• Checkstyle (PHP_CodeSniffer)• Clover PHP(PHPUnit code coverage XML)• HTML publisher (Code c...
Template for Jenkins Jobs for     PHP Projects• Minta project, hogy egyszerűbben létre tudjunk hozni a sajátprojectünket a...
Project specifikus XML fájlok• Az egyes eszközöket vezérli(phpcs.xml, phpdoc.xml, phpmd.xml, phpunit.xml)• A CI-t vezérli ...
build.xml• “target” szekciók szabályozzák, hogy milyenfeladatok hajthatóak végre• “Clean” target• “Prepare” target• Párhuz...
Új project készítése• New job menüpont
Új project készítése• Megadjuk a project nevét a“Job name” menüpontnál”• Kiválasztjuk a “Copy existingjob” opciónál a “php...
Új project készítése• “Disable build” checkbox-ból kivesszük a pipát
Új project készítése• Source code management résznél beállítjuk aprojecthez tartozó verziókezelő rendszerparamétereit• Git...
Új project készítése• Ha rendszeresen szeretnénk futtatni(ajánlott), “Build triggers” szekció beállítása• Rákattintunk a s...
Eredmények
Eredmények
Eredmények
További hasznos témák• Sonar• Continuous delivery• További kiegészítő pluginek Jenkinshez• PHP Project Wizard    pear conf...
Az előadáson szó volt:• Mi is az a continuous integration és miért jó eznekünk• Milyen fontosabb elemei vannak• Hogyan kel...
https://www.slideshare.net/nagno  https://github.com/nagno/ci
Köszönöm a figyelmet!
Ci
Ci
Upcoming SlideShare
Loading in …5
×

Ci

498 views
444 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
498
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Ci

  1. 1. Continuous integration Mikor, miért, hogyan Nagy Norbert
  2. 2. Nagy NorbertTechnical Team Lead @ InviqaTwitter: @nagno123Email: norbert.nagy@inviqa.comProjectek, amelyeken dolgoztam az Inviqa-nál:• Warner Music Europe• http://dreams.co.uk• http://smythson.com• http://kookai.fr• Ideal Shopping
  3. 3. Az előadáson szó lesz:• Mi is az a continuous integration és miért jó eznekünk• Milyen fontosabb elemei vannak• Hogyan kell felépíteni egy CI környezetetJenkins segítségével• Minőségbiztosítási eszközök PHP-ben
  4. 4. Continuous IntegrationContinuous Integration is a software developmentpractice where members of a team integrate theirwork frequently, usually each person integrates atleast daily - leading to multiple integrations per day.Each integration is verified by an automated build(including test) to detect integration errors asquickly as possible. Martin Fowler
  5. 5. Követelmenyek a CIelkezdéséhez• A fejlesztői csapat minden tagja rendszeresenfrissíti a közös kódbázist friss verzióval• Automatizált build folyamat• Verziókezelő rendszer• Minőségbizosítási eszközök• Program, amely automatikusan lefuttatja abuild folyamatot, a teszteket és jelentést tesz aművelet eredményéről
  6. 6. Optimális architektúraFejlesztői gép Előzetes tesztek a fejlesztő gépénStaging szerver CI, belső tesztelő itt tesztel UAT szerver Kliens itt tesztel és hagyja jóvá Production Ide már csak tesztelt és jóváhagyott kód kerül szerver
  7. 7. Automatizált build folyamat• Bármely interakció nélkül• Ant• Phing• Capistrano
  8. 8. Ant telepítése• apt-get vagy yum segítségével• Az adott rendszernek megfelelő bináris telepítőfájlok is letölthetőek az ant honlapjáról• Az ant forráskódjának letöltése után akár sajátmagunk is fordíthatjuk• Szükséges extra: JRE 
  9. 9. Verziókezelő rendszerek• Git• Mercurial• SVN• CVS
  10. 10. PHPUnit és egyéb QAeszközök telepítése• sudo pear config-set auto_discover 1• sudo pear channel-discover pear.phpunit.de• sudo pear install –alldeps phpunit/phpunit• sudo pear install pear.phpqatools.org/phpqatools• sudo pear channel-discover pear.phpdoc.org• sudo pear install phpdoc/phpDocumentor-alpha• Lehetőség van composer vagy phar csomagsegítségével történő telepítésre is
  11. 11. Telepített QA eszközök• PHPUnit• PHP_CodeSniffer• phpcpd• PHP_Depend• phpmd• phploc• PHP_CodeBrowser• phpDocumentor 2
  12. 12. Coding standard• Különböző coding standardok léteznek. PEAR PEAR2 PHP Standards Working Group PSR-0, PSR-1, PSR-2 Zend Framework Egyéni• Könnyebben átlátható kódot eredményez acsapat minden tagjának
  13. 13. PHP_CodeSniffer• PHP, Javascript, CSS fájlok• A kódolási standardtól való eltéréseket detektálja és jelzi$ phpcs /path/to/code/myfile.phpFILE: /path/to/code/myfile.php------------------------------------------------------------FOUND 5 ERROR(S) AFFECTING 2 LINE(S)------------------------------------------------------------ 2 | ERROR | Missing file doc comment 20 | ERROR | PHP keywords must be lowercase; expected"false" but found "FALSE" 47 | ERROR | Line not indented correctly; expected 4 spacesbut found 1 51 | ERROR | Missing function doc comment 88 | ERROR | Line not indented correctly; expected 9 spacesbut found 6------------------------------------------------------------
  14. 14. phpcpd• Detektálja a másolt kódot• A kód duplikáció helyett refaktorálás javasolt, mert megsértia SOLID-ot (Single responsibility)$ phpcpd /usr/local/src/phpunit/PHPUnitphpcpd 1.4.0 by Sebastian Bergmann.Found 1 exact clones with 53 duplicated lines in 5 files: -/usr/local/src/phpunit/PHPUnit/Framework/Constraint/Or.php:136-157/usr/local/src/phpunit/PHPUnit/Framework/Constraint/And.php:143-1640.19% duplicated lines out of 27640 total lines of code.Time: 0 seconds, Memory: 18.25Mb
  15. 15. PHP_Depend• A statikus kódanalízis egyik fontos eszköze• Különböző szoftvermetrikák tesztelése• Mindegyik szoftvermetrika az adott forráskódegy minőségi mutatójának felel meg• Mindig objektiv• Segít olyan részeket azonosítani akódban, amelyet érdemes manuálisan is átnézni• Csak lehetséges problémákat jelez, ezért nemérdemes vakon követni
  16. 16. phploc• Statikus kód analízis eszköze• Forráskód struktúrájának felmérésére szolgál$ phploc /usr/local/src/phpunit/PHPUnitphploc 1.7.0 by Sebastian Bergmann.Directories: 16Files: 117Lines of Code (LOC): 27640 Cyclomatic Complexity / Lines of Code: 0.12Comment Lines of Code (CLOC): 13771Non-Comment Lines of Code (NCLOC): 13869Namespaces: 0Interfaces: 6Traits: 0…
  17. 17. PHPMD – PHP Mess Detector• Statikus kódanalízis eszköz• Lehetséges hibák• Nem optimális kód• Túlkomplikált kifejezések• Nem használtparméterek, változók, függvények• Fiatal project, jelenleg még csak kb. 30szabályt ellenőriz
  18. 18. Tesztelés előnyei• Minél hamarabb megtalálunk egy hibát, annálegyszerűbben és hamarabb kijavítható• A kód egyes részei elkülönítve is tesztelhetőek• Módosítás, frissítés esetén bizonyosság atovábbi müködésről• Csak megfelelően megírt kódra lehet jóteszteket készíteni• Könnyebb módosítást végezni, hiszen hibaesetén a teszt jelezni fog• Egyfajta fejlesztői dokumentációt képez
  19. 19. Tesztek• Unit (PHPUnit, phpspec)• Integráció (PHPUnit, phpspec)• User Acceptance (phpspec, Behat, Selenium)• Terhelés (Gatling, New Relic, XHProf)
  20. 20. Unit test• TDD• Nem a 100%-os lefedettség a cél!• Nem használhat külső eszközt(adatbázis, fájl, WS), csak ezek Mock változatát• A tesztek legyenek függetlenek egymástól
  21. 21. TDD folyamata Igen Tesztkészítése/módos ítása Nem Sikeresen lefutnak a tesztek? Igen Sikeresen lefut? Nem Optimalizálás Nem Kód Sikeresen Igenkészítése/módos lefutnak a ítása tesztek?
  22. 22. Dokumentáció készítése• Egy jól megírt kód önmagát dokumentálja• PHPDocumentor 2• PHPDox/** * Returns with the label of the attribute value. * * @param mixed $sourceClass * @param string $value Value to look-up * @return string */public function getAttributeValueAsText($sourceClass, $value){ ...}
  23. 23. Jenkins telepítése és futtatásaLetölthető:wget http://mirrors.jenkins-ci.org/war/latest/jenkins.warFuttatható:java -jar jenkins.war &Felülete elérhető:http://domain:8080
  24. 24. Telepítendő pluginek:• Github• Checkstyle (PHP_CodeSniffer)• Clover PHP(PHPUnit code coverage XML)• HTML publisher (Code coverage HTML)• DRY (phpcpd)• Jdepend (PHP_Depend)• Plot (phploc)• PMD (PHPMD)• Violations (logfileok feldolgozása)• xUnit (PHPUnit kimenet feldolgozására)• Green Balls• Jenkins Continuous Integration game
  25. 25. Template for Jenkins Jobs for PHP Projects• Minta project, hogy egyszerűbben létre tudjunk hozni a sajátprojectünket a Jenkinsben• A korábban említett Jenkins plugin-ek szükségesek hozzá• A korábban említett QA eszközök szükségesek hozzá$ cd $JENKINS_HOME/jobs$ mkdir php-template$ cd php-template$ wget https://raw.github.com/sebastianbergmann/php-jenkins-template/master/config.xml$ cd ..$ chown -R jenkins:jenkins php-template/$ java -jar jenkins-cli.jar -s http://localhost:8080 reload-configuration
  26. 26. Project specifikus XML fájlok• Az egyes eszközöket vezérli(phpcs.xml, phpdoc.xml, phpmd.xml, phpunit.xml)• A CI-t vezérli (build.xml)• Konfigurációs paraméterek beállítása, hogy afolyamat a megfelelő paraméterekkel fusson lea megfelelő fájlokon
  27. 27. build.xml• “target” szekciók szabályozzák, hogy milyenfeladatok hajthatóak végre• “Clean” target• “Prepare” target• Párhuzamos végrehajtás
  28. 28. Új project készítése• New job menüpont
  29. 29. Új project készítése• Megadjuk a project nevét a“Job name” menüpontnál”• Kiválasztjuk a “Copy existingjob” opciónál a “php-template”opciót• Rákattintunk az OK gombra
  30. 30. Új project készítése• “Disable build” checkbox-ból kivesszük a pipát
  31. 31. Új project készítése• Source code management résznél beállítjuk aprojecthez tartozó verziókezelő rendszerparamétereit• Git esetén meg kell adni a repository URL-t ésa branch-et, amelyen a CI-t szeretnénk futtatni
  32. 32. Új project készítése• Ha rendszeresen szeretnénk futtatni(ajánlott), “Build triggers” szekció beállítása• Rákattintunk a save gombra
  33. 33. Eredmények
  34. 34. Eredmények
  35. 35. Eredmények
  36. 36. További hasznos témák• Sonar• Continuous delivery• További kiegészítő pluginek Jenkinshez• PHP Project Wizard pear config-set auto_discover 1 pear install pear.phpunit.de/ppw
  37. 37. Az előadáson szó volt:• Mi is az a continuous integration és miért jó eznekünk• Milyen fontosabb elemei vannak• Hogyan kell felépíteni egy CI környezetetJenkins segítségével• Minőségbiztosítási eszközök PHP-ben• Alternatív lehetőségek az egyeskomponensekre
  38. 38. https://www.slideshare.net/nagno https://github.com/nagno/ci
  39. 39. Köszönöm a figyelmet!

×