SlideShare uma empresa Scribd logo
1 de 41
Continuous integration
      Mikor, miért, hogyan


         Nagy Norbert
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
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
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
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
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
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 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 
Verziókezelő rendszerek
• Git
• Mercurial
• SVN
• CVS
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
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, PSR-1, PSR-2
      Zend Framework
      Egyéni
• Könnyebben átlátható kódot eredményez a
csapat minden tagjának
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
------------------------------------------------------------
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
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
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
…
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
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
Tesztek
• Unit (PHPUnit, phpspec)
• Integráció (PHPUnit, phpspec)
• User Acceptance (phpspec, Behat, Selenium)
• Terhelés (Gatling, New Relic, XHProf)
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
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?
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)
{
    ...
}
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
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
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
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
build.xml
• “target” szekciók szabályozzák, hogy milyen
feladatok hajthatóak végre
• “Clean” target
• “Prepare” target
• Párhuzamos végrehajtás
Ú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 existing
job” opciónál a “php-template”
opciót
• Rákattintunk az OK gombra
Ú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 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
Ú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
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 config-set auto_discover 1
    pear install pear.phpunit.de/ppw
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
https://www.slideshare.net/nagno

  https://github.com/nagno/ci
Köszönöm a figyelmet!

Mais conteúdo relacionado

Destaque

2017 trends in web + email design
2017 trends in web + email design2017 trends in web + email design
2017 trends in web + email designVisible Logic, Inc.
 
JavaScript Presentation Frameworks and Libraries
JavaScript Presentation Frameworks and LibrariesJavaScript Presentation Frameworks and Libraries
JavaScript Presentation Frameworks and LibrariesOleksii Prohonnyi
 
Slack presentation
Slack presentationSlack presentation
Slack presentationblevz
 
17 digital trends for 2017 by @FrojdAgency
17 digital trends for 2017 by @FrojdAgency17 digital trends for 2017 by @FrojdAgency
17 digital trends for 2017 by @FrojdAgencyFröjd Interactive
 
Carat's 10 Trends for 2017
Carat's 10 Trends for 2017Carat's 10 Trends for 2017
Carat's 10 Trends for 2017dentsu
 
Java script.trend(spec)
Java script.trend(spec)Java script.trend(spec)
Java script.trend(spec)dynamis
 
Fjord Trends 2017
Fjord Trends 2017 Fjord Trends 2017
Fjord Trends 2017 Fjord
 

Destaque (11)

2017 trends in web + email design
2017 trends in web + email design2017 trends in web + email design
2017 trends in web + email design
 
JavaScript Presentation Frameworks and Libraries
JavaScript Presentation Frameworks and LibrariesJavaScript Presentation Frameworks and Libraries
JavaScript Presentation Frameworks and Libraries
 
Presentation On Slack
Presentation On SlackPresentation On Slack
Presentation On Slack
 
Javascript
JavascriptJavascript
Javascript
 
Slack presentation
Slack presentationSlack presentation
Slack presentation
 
reveal.js 3.0.0
reveal.js 3.0.0reveal.js 3.0.0
reveal.js 3.0.0
 
17 digital trends for 2017 by @FrojdAgency
17 digital trends for 2017 by @FrojdAgency17 digital trends for 2017 by @FrojdAgency
17 digital trends for 2017 by @FrojdAgency
 
Carat's 10 Trends for 2017
Carat's 10 Trends for 2017Carat's 10 Trends for 2017
Carat's 10 Trends for 2017
 
Java script.trend(spec)
Java script.trend(spec)Java script.trend(spec)
Java script.trend(spec)
 
Fjord Trends 2017
Fjord Trends 2017 Fjord Trends 2017
Fjord Trends 2017
 
Key Digital Trends for 2017
Key Digital Trends for 2017Key Digital Trends for 2017
Key Digital Trends for 2017
 

Semelhante a Ci

Continous Integration and Deployment
Continous Integration and DeploymentContinous Integration and Deployment
Continous Integration and DeploymentKároly Nagy
 
PHP alkalmazások minőségbiztosítása
PHP alkalmazások minőségbiztosításaPHP alkalmazások minőségbiztosítása
PHP alkalmazások minőségbiztosításaFerenc Kovács
 
Objektum-orinetált mérések a gyakorlatban
Objektum-orinetált mérések a gyakorlatbanObjektum-orinetált mérések a gyakorlatban
Objektum-orinetált mérések a gyakorlatbanAntal Orcsik
 
Szerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelvenSzerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelvenKrisztián Gyula Tóth
 
Budapest.rb 2011/01 - Rails Deployment
Budapest.rb 2011/01 - Rails DeploymentBudapest.rb 2011/01 - Rails Deployment
Budapest.rb 2011/01 - Rails DeploymentDigital Natives
 
Mi a baj a Drupaloddal
Mi a baj a DrupaloddalMi a baj a Drupaloddal
Mi a baj a Drupaloddalthesnufkin
 
Fejlesztési kihívások a pénzügyi szektorban
Fejlesztési kihívások a pénzügyi szektorbanFejlesztési kihívások a pénzügyi szektorban
Fejlesztési kihívások a pénzügyi szektorbanPal Vojacsek
 
Forráskódtárak gráfalapú statikus analízise
Forráskódtárak gráfalapú statikus analíziseForráskódtárak gráfalapú statikus analízise
Forráskódtárak gráfalapú statikus analíziseDániel Stein
 
SUSE Linux Enterprise 11 admin 2
SUSE Linux Enterprise 11 admin 2SUSE Linux Enterprise 11 admin 2
SUSE Linux Enterprise 11 admin 2Kálmán Kéménczy
 
Webalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálásaWebalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálásaFerenc Kovács
 
Hogyan optimalizáljunk C/C++ kódokat!
Hogyan optimalizáljunk C/C++ kódokat!Hogyan optimalizáljunk C/C++ kódokat!
Hogyan optimalizáljunk C/C++ kódokat!Open Academy
 
Deep reinforcement learning with DonkeyCar
Deep reinforcement learning with DonkeyCarDeep reinforcement learning with DonkeyCar
Deep reinforcement learning with DonkeyCarLeventeDmsa1
 
APACHE PHP MYSQL telepítése
APACHE PHP MYSQL telepítéseAPACHE PHP MYSQL telepítése
APACHE PHP MYSQL telepítésePasaréti Gimi
 
Dr. Ekler Péter: A mobilszoftver két értéke – legjobb gyakorlatok és újdonság...
Dr. Ekler Péter: A mobilszoftver két értéke – legjobb gyakorlatok és újdonság...Dr. Ekler Péter: A mobilszoftver két értéke – legjobb gyakorlatok és újdonság...
Dr. Ekler Péter: A mobilszoftver két értéke – legjobb gyakorlatok és újdonság...Mobil Weekend
 
Devops meetup - Automatizált tesztek
Devops meetup - Automatizált tesztekDevops meetup - Automatizált tesztek
Devops meetup - Automatizált tesztekZsolt Takács
 

Semelhante a Ci (20)

Webkonf 2013
Webkonf 2013Webkonf 2013
Webkonf 2013
 
Continous Integration and Deployment
Continous Integration and DeploymentContinous Integration and Deployment
Continous Integration and Deployment
 
PHP alkalmazások minőségbiztosítása
PHP alkalmazások minőségbiztosításaPHP alkalmazások minőségbiztosítása
PHP alkalmazások minőségbiztosítása
 
Objektum-orinetált mérések a gyakorlatban
Objektum-orinetált mérések a gyakorlatbanObjektum-orinetált mérések a gyakorlatban
Objektum-orinetált mérések a gyakorlatban
 
Alumni Release Process
Alumni Release ProcessAlumni Release Process
Alumni Release Process
 
Szerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelvenSzerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelven
 
Budapest.rb 2011/01 - Rails Deployment
Budapest.rb 2011/01 - Rails DeploymentBudapest.rb 2011/01 - Rails Deployment
Budapest.rb 2011/01 - Rails Deployment
 
Mi a baj a Drupaloddal
Mi a baj a DrupaloddalMi a baj a Drupaloddal
Mi a baj a Drupaloddal
 
Budapest.rb 201010
Budapest.rb 201010Budapest.rb 201010
Budapest.rb 201010
 
Fejlesztési kihívások a pénzügyi szektorban
Fejlesztési kihívások a pénzügyi szektorbanFejlesztési kihívások a pénzügyi szektorban
Fejlesztési kihívások a pénzügyi szektorban
 
Forráskódtárak gráfalapú statikus analízise
Forráskódtárak gráfalapú statikus analíziseForráskódtárak gráfalapú statikus analízise
Forráskódtárak gráfalapú statikus analízise
 
SUSE Linux Enterprise 11 admin 2
SUSE Linux Enterprise 11 admin 2SUSE Linux Enterprise 11 admin 2
SUSE Linux Enterprise 11 admin 2
 
Webalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálásaWebalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálása
 
Hogyan optimalizáljunk C/C++ kódokat!
Hogyan optimalizáljunk C/C++ kódokat!Hogyan optimalizáljunk C/C++ kódokat!
Hogyan optimalizáljunk C/C++ kódokat!
 
Deep reinforcement learning with DonkeyCar
Deep reinforcement learning with DonkeyCarDeep reinforcement learning with DonkeyCar
Deep reinforcement learning with DonkeyCar
 
Hello Laravel 5!
Hello Laravel 5!Hello Laravel 5!
Hello Laravel 5!
 
A Firefox-on túl is Mozilla
A Firefox-on túl is MozillaA Firefox-on túl is Mozilla
A Firefox-on túl is Mozilla
 
APACHE PHP MYSQL telepítése
APACHE PHP MYSQL telepítéseAPACHE PHP MYSQL telepítése
APACHE PHP MYSQL telepítése
 
Dr. Ekler Péter: A mobilszoftver két értéke – legjobb gyakorlatok és újdonság...
Dr. Ekler Péter: A mobilszoftver két értéke – legjobb gyakorlatok és újdonság...Dr. Ekler Péter: A mobilszoftver két értéke – legjobb gyakorlatok és újdonság...
Dr. Ekler Péter: A mobilszoftver két értéke – legjobb gyakorlatok és újdonság...
 
Devops meetup - Automatizált tesztek
Devops meetup - Automatizált tesztekDevops meetup - Automatizált tesztek
Devops meetup - Automatizált tesztek
 

Ci

  • 1. Continuous integration Mikor, miért, hogyan Nagy Norbert
  • 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. 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. 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. 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. 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. 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át magunk is fordíthatjuk • Szükséges extra: JRE 
  • 9. Verziókezelő rendszerek • Git • Mercurial • SVN • CVS
  • 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. 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 a csapat 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.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. 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. 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. 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. 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. 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. 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 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.
  • 23. 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) { ... }
  • 24. 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
  • 25.
  • 26. 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
  • 27. 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
  • 28. 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
  • 29. build.xml • “target” szekciók szabályozzák, hogy milyen feladatok hajthatóak végre • “Clean” target • “Prepare” target • Párhuzamos végrehajtás
  • 30. Új project készítése • New job menüpont
  • 31. Ú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
  • 32. Új project készítése • “Disable build” checkbox-ból kivesszük a pipát
  • 33. Ú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
  • 34. Ú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
  • 38. 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
  • 39. 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