Ci
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Ci

on

  • 582 views

 

Statistics

Views

Total Views
582
Views on SlideShare
582
Embed Views
0

Actions

Likes
1
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Ci Presentation Transcript

  • 1. Continuous integration Mikor, miért, hogyan Nagy Norbert
  • 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. 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. 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. 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. 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. Automatizált build folyamat• Bármely interakció nélkül• Ant• Phing• Capistrano
  • 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. Verziókezelő rendszerek• Git• Mercurial• SVN• CVS
  • 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. Telepített QA eszközök• PHPUnit• PHP_CodeSniffer• phpcpd• PHP_Depend• phpmd• phploc• PHP_CodeBrowser• phpDocumentor 2
  • 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. 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. 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. 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. 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. 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. 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. Tesztek• Unit (PHPUnit, phpspec)• Integráció (PHPUnit, phpspec)• User Acceptance (phpspec, Behat, Selenium)• Terhelés (Gatling, New Relic, XHProf)
  • 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. 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. 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. 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. 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. 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. 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. build.xml• “target” szekciók szabályozzák, hogy milyenfeladatok hajthatóak végre• “Clean” target• “Prepare” target• Párhuzamos végrehajtás
  • 28. Új project készítése• New job menüpont
  • 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. Új project készítése• “Disable build” checkbox-ból kivesszük a pipát
  • 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. Ú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. Eredmények
  • 34. Eredmények
  • 35. Eredmények
  • 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. 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. https://www.slideshare.net/nagno https://github.com/nagno/ci
  • 39. Köszönöm a figyelmet!