Se ha denunciado esta presentación.
Se está descargando tu SlideShare. ×
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio

Eche un vistazo a continuación

1 de 41 Anuncio

Más Contenido Relacionado

Similares a Ci (20)

Anuncio

Ci

  1. 1. Continuous integration Mikor, miért, hogyan Nagy Norbert
  2. 2. Nagy Norbert Technical Team Lead @ Inviqa Twitter: @nagno123 Email: norbert.nagy@inviqa.com Projectek, 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ó ez nekünk • Milyen fontosabb elemei vannak • Hogyan kell felépíteni egy CI környezetet Jenkins segítségével • Minőségbiztosítási eszközök PHP-ben
  4. 4. Continuous Integration Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Martin Fowler
  5. 5. Követelmenyek a CI elkezdéséhez • A fejlesztői csapat minden tagja rendszeresen frissí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 a build folyamatot, a teszteket és jelentést tesz a művelet eredményéről
  6. 6. Optimális architektúra Fejlesztői gép Előzetes tesztek a fejlesztő gépén Staging 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át magunk is fordíthatjuk • Szükséges extra: JRE 
  9. 9. Verziókezelő rendszerek • Git • Mercurial • SVN • CVS
  10. 10. PHPUnit és egyéb QA eszkö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 csomag segí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 a csapat 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.php FILE: /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 spaces but found 1 51 | ERROR | Missing function doc comment 88 | ERROR | Line not indented correctly; expected 9 spaces but found 6 ------------------------------------------------------------
  14. 14. phpcpd • Detektálja a másolt kódot • A kód duplikáció helyett refaktorálás javasolt, mert megsérti a SOLID-ot (Single responsibility) $ phpcpd /usr/local/src/phpunit/PHPUnit phpcpd 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-164 0.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ód egy minőségi mutatójának felel meg • Mindig objektiv • Segít olyan részeket azonosítani a kó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/PHPUnit phploc 1.7.0 by Sebastian Bergmann. Directories: 16 Files: 117 Lines of Code (LOC): 27640 Cyclomatic Complexity / Lines of Code: 0.12 Comment Lines of Code (CLOC): 13771 Non-Comment Lines of Code (NCLOC): 13869 Namespaces: 0 Interfaces: 6 Traits: 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ált parméterek, változók, függvények • Fiatal project, jelenleg még csak kb. 30 szabályt ellenőriz
  18. 18. Tesztelés előnyei • Minél hamarabb megtalálunk egy hibát, annál egyszerű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 a tová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 hiba eseté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 Teszt készítése/módos ítása Nem Sikeresen lefutnak a tesztek? Igen Sikeresen lefut? Nem Optimalizálás Nem Kód Sikeresen Igen ké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ása Letölthető: wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war Futtatható: 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át projectü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.xm l) • A CI-t vezérli (build.xml) • Konfigurációs paraméterek beállítása, hogy a folyamat a megfelelő paraméterekkel fusson le a megfelelő fájlokon
  27. 27. build.xml • “target” szekciók szabályozzák, hogy milyen feladatok 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 existing job” 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 a projecthez tartozó verziókezelő rendszer paramétereit • Git esetén meg kell adni a repository URL-t és a 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ó ez nekünk • Milyen fontosabb elemei vannak • Hogyan kell felépíteni egy CI környezetet Jenkins segítségével • Minőségbiztosítási eszközök PHP-ben • Alternatív lehetőségek az egyes komponensekre
  38. 38. https://www.slideshare.net/nagno https://github.com/nagno/ci
  39. 39. Köszönöm a figyelmet!

×