SlideShare uma empresa Scribd logo
1 de 27
Arkon Zrt.
Nagy Károly
 2 rendszer
        3 környezet
   14 alkalmazásszerver
       16 alkamazás
     35 svn repository
•Honnan indultunk?
Régmúlt


            •Koncepció
            •Folyamatok
  Múlt      •Problémák



            •Alapelvek
            •Megoldások
  Jelen     •Eredmények




            •Meddig jutottunk?
            •Hova tovább?
Konklúzió
•Honnan indultunk?
Régmúlt


            •Koncepció
            •Folyamatok
  Múlt      •Problémák



            •Alapelvek
            •Megoldások
  Jelen     •Eredmények




            •Meddig jutottunk?
            •Hova tovább?
Konklúzió
Két fázis:
1. Teszt
2. Live

•   Projektenkénti
    jogosultságok kezelése
•   Naplózás
•   Deploy után
    serverchecker
   Inkonzisztens kód a webszervereken
   Konkurenciakezelés nem megoldott
   Nincs kód-minőségellenőrzés és trending
   Rsync alatt is ment rá forgalom
   Központi config nehézkes
   Push a pull helyett
   Nem atomi műveletek
   Nehéz és lassú rollback
•Honnan indultunk?
Régmúlt


            •Koncepció
            •Folyamatok
  Múlt      •Problémák



            •Alapelvek
            •Megoldások
  Jelen     •Eredmények




            •Meddig jutottunk?
            •Hova tovább?
Konklúzió
   A legfontosabb műveletek legyenek atomi
    műveletek
   Legyen staging környezet
   Egyszerű és gyors rollback
   Code Quality ellenőrzésére legyen lehetőség
   Konkurenciakezelés
   Pull működés
1. Jenkins build indítása
2. SVN update és Ant script
   futtatása
   1. SVN externals update
   2. Clean
   3. Symfony cc
   4. Lintest
   5. PHP Depend, PHP MD, PHP CS,
      PHP Loc
   6. PHPUnit
   7. Package
3. Deploy to staging
4. Release teszt
5. Share
   Deploy (build)
        Staging gépre update-eli a kódot
        SVN-es kódon ANT build és Code Quality
        Ant által készített csomagot deployolja a staging gépre
        Central configból módosítja a kódot
        Scripteket futtat
   Distribute (share)
        Prescript futtatása
        Csomagot kirakja az éles szerverekre
        Billentés
        Postscript futtatása
   Minden esetben komplett csomag kerül
    kihelyezésre a szerverekre
   Atomi művelettel váltás régi és új kód között
   Előnyök
    ◦   Folyamatosan felügyelhető config paraméterek
    ◦   „Tiszta” kód
    ◦   Integritás megőrzése
    ◦   Egyszerű rollback
   A rollback művelet egy könyvtárváltással
    végrehajtható
   Csomagokat váltunk, nem revisiont
   Jenkins
    ◦   Ant build
    ◦   Syntax check
    ◦   PHP MD
    ◦   PHP Unit
    ◦   Code Coverage
    ◦   PHP Loc
    ◦   Checkstyle
   Project-Matrix authorizáció
    ◦ Nagyon finom felbontásig hangolható
   Inf.arkon.hu
    ◦ Share queue
   Inf.arkon.hu
    ◦ Python (Django)
    ◦ Deployment és monitoring
    ◦ A share funkciót valósítja meg
    ◦ Queueban tárolt job-ok percenként indulnak el, ha
      nincsen konkurens share folyamat
    ◦ Site-onkénti jogosultság
    ◦ LDAP authentikáció
   Csomagtovábbítás
    ◦ A csomagokat az ANT script állítja elő tar.gz
      formában
    ◦ A deploy kicsomagolja és alkalmazza rajta a
      felülírásokat ( central config stb.)
    ◦ Kész csomag továbbítódik a szerverekre
    ◦ Pre- és postscriptek biztosítják a további testre
      szabhatóságot
      Pl.: check.txt törlése, php-fpm restart stb.
   PHP-FPM APC alatt „beragadt” inode-ok
    ◦ Prescripttel leállítjuk a php-fpm-et
    ◦ Postscripttel indítjuk újra
   TMPfs az átnevezett könyvtárban zárolva
    tartotta az inode-ot.
   Időzítés precíz hangolása szükséges a
    Haproxy miatt (eszközleterhelés vs
    tartalomkihelyezés)
   SVN externals nem frissült
   Időszinkron Jenkinsben
   Ingatlan.com
    ◦ Több build folyamat során elkapott hiba
    ◦ Stabilabb deploy folyamat
    ◦ Kifinomultabb ellenőrzés, így megelőzhető vagy
      előbb észlelhető hibák
    ◦ Tesztesetek
   Koponyeg.hu
    ◦ PHP depend piramis
    ◦ PMD hibák trendje
    ◦ Unstable-ből stable
    ◦ PHP package-ek
      használata
    ◦ Kódolási szemlélet
      váltás
•Honnan indultunk?
Régmúlt


            •Koncepció
            •Folyamatok
  Múlt      •Problémák



            •Alapelvek
            •Megoldások
  Jelen     •Eredmények




            •Meddig jutottunk?
            •Hova tovább?
Konklúzió
   Inkonzisztens kód a webszervereken        

   Konkurenciakezelés nem megoldott          

   Nincs kód minőségellenőrzés és trending   

   Rsync alatt is ment rá forgalom           
   Központi config nehézkes                  
   Push a pull helyett                       

   Nem atomi műveletek                       

   Nehéz és lassú rollback                   
   Integritásvédelem
    ◦ Check.txt-be verziószám
   Release management a CI helyett
   DB változások kezelése
   Funkcionális tesztek futtatása Jenkins build-
    ből (symfony)
Arkon Zrt.
Nagy Károly

Mais conteúdo relacionado

Semelhante a Continous Integration and Deployment

Az SVN használata a csapatfejlesztésben
Az SVN használata a csapatfejlesztésbenAz SVN használata a csapatfejlesztésben
Az SVN használata a csapatfejlesztésbenJános Pásztor
 
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
 
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
 
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
 
Budapest.rb 2011/01 - Rails Deployment
Budapest.rb 2011/01 - Rails DeploymentBudapest.rb 2011/01 - Rails Deployment
Budapest.rb 2011/01 - Rails DeploymentDigital Natives
 
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?Webműves Kelemen tanácsai, avagy mi kell a PHP falába?
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?Open Academy
 
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
 
Deep reinforcement learning with DonkeyCar
Deep reinforcement learning with DonkeyCarDeep reinforcement learning with DonkeyCar
Deep reinforcement learning with DonkeyCarLeventeDmsa1
 
Nagyméretű forráskódtárak inkrementális statikus analízise
Nagyméretű forráskódtárak inkrementális statikus analíziseNagyméretű forráskódtárak inkrementális statikus analízise
Nagyméretű forráskódtárak inkrementális statikus analíziseDániel Stein
 
Nagy terhelésű webes rendszerek fejlesztése
Nagy terhelésű webes rendszerek fejlesztéseNagy terhelésű webes rendszerek fejlesztése
Nagy terhelésű webes rendszerek fejlesztéseJános Pásztor
 
Gitflow vs. Trunk based development
Gitflow vs. Trunk based development Gitflow vs. Trunk based development
Gitflow vs. Trunk based development István Marhefka
 
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
 
Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (Attila Balogh-Biró
 
Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (Attila Balogh-Biró
 
Grid és adattárolás
Grid és adattárolásGrid és adattárolás
Grid és adattárolásFerenc Szalai
 

Semelhante a Continous Integration and Deployment (20)

Ci
CiCi
Ci
 
Webkonf 2013
Webkonf 2013Webkonf 2013
Webkonf 2013
 
Az SVN használata a csapatfejlesztésben
Az SVN használata a csapatfejlesztésbenAz SVN használata a csapatfejlesztésben
Az SVN használata a csapatfejlesztésben
 
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
 
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
 
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
 
Budapest.rb 2011/01 - Rails Deployment
Budapest.rb 2011/01 - Rails DeploymentBudapest.rb 2011/01 - Rails Deployment
Budapest.rb 2011/01 - Rails Deployment
 
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?Webműves Kelemen tanácsai, avagy mi kell a PHP falába?
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?
 
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
 
Deep reinforcement learning with DonkeyCar
Deep reinforcement learning with DonkeyCarDeep reinforcement learning with DonkeyCar
Deep reinforcement learning with DonkeyCar
 
Nagyméretű forráskódtárak inkrementális statikus analízise
Nagyméretű forráskódtárak inkrementális statikus analíziseNagyméretű forráskódtárak inkrementális statikus analízise
Nagyméretű forráskódtárak inkrementális statikus analízise
 
Nagy terhelésű webes rendszerek fejlesztése
Nagy terhelésű webes rendszerek fejlesztéseNagy terhelésű webes rendszerek fejlesztése
Nagy terhelésű webes rendszerek fejlesztése
 
Gitflow vs. Trunk based development
Gitflow vs. Trunk based development Gitflow vs. Trunk based development
Gitflow vs. Trunk based development
 
Szoftver tesztelés
Szoftver tesztelésSzoftver tesztelés
Szoftver tesztelés
 
A forditonak mindenhez lehet köze
A forditonak mindenhez lehet közeA forditonak mindenhez lehet köze
A forditonak mindenhez lehet köze
 
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
 
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!
 
Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (
 
Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (Enterprise java evolució, avagy java ee (
Enterprise java evolució, avagy java ee (
 
Grid és adattárolás
Grid és adattárolásGrid és adattárolás
Grid és adattárolás
 

Continous Integration and Deployment

  • 2.  2 rendszer  3 környezet  14 alkalmazásszerver  16 alkamazás  35 svn repository
  • 3. •Honnan indultunk? Régmúlt •Koncepció •Folyamatok Múlt •Problémák •Alapelvek •Megoldások Jelen •Eredmények •Meddig jutottunk? •Hova tovább? Konklúzió
  • 4.
  • 5. •Honnan indultunk? Régmúlt •Koncepció •Folyamatok Múlt •Problémák •Alapelvek •Megoldások Jelen •Eredmények •Meddig jutottunk? •Hova tovább? Konklúzió
  • 6.
  • 7.
  • 8. Két fázis: 1. Teszt 2. Live • Projektenkénti jogosultságok kezelése • Naplózás • Deploy után serverchecker
  • 9. Inkonzisztens kód a webszervereken  Konkurenciakezelés nem megoldott  Nincs kód-minőségellenőrzés és trending  Rsync alatt is ment rá forgalom  Központi config nehézkes  Push a pull helyett  Nem atomi műveletek  Nehéz és lassú rollback
  • 10. •Honnan indultunk? Régmúlt •Koncepció •Folyamatok Múlt •Problémák •Alapelvek •Megoldások Jelen •Eredmények •Meddig jutottunk? •Hova tovább? Konklúzió
  • 11. A legfontosabb műveletek legyenek atomi műveletek  Legyen staging környezet  Egyszerű és gyors rollback  Code Quality ellenőrzésére legyen lehetőség  Konkurenciakezelés  Pull működés
  • 12.
  • 13. 1. Jenkins build indítása 2. SVN update és Ant script futtatása 1. SVN externals update 2. Clean 3. Symfony cc 4. Lintest 5. PHP Depend, PHP MD, PHP CS, PHP Loc 6. PHPUnit 7. Package 3. Deploy to staging 4. Release teszt 5. Share
  • 14. Deploy (build)  Staging gépre update-eli a kódot  SVN-es kódon ANT build és Code Quality  Ant által készített csomagot deployolja a staging gépre  Central configból módosítja a kódot  Scripteket futtat  Distribute (share)  Prescript futtatása  Csomagot kirakja az éles szerverekre  Billentés  Postscript futtatása
  • 15. Minden esetben komplett csomag kerül kihelyezésre a szerverekre  Atomi művelettel váltás régi és új kód között  Előnyök ◦ Folyamatosan felügyelhető config paraméterek ◦ „Tiszta” kód ◦ Integritás megőrzése ◦ Egyszerű rollback
  • 16. A rollback művelet egy könyvtárváltással végrehajtható  Csomagokat váltunk, nem revisiont
  • 17. Jenkins ◦ Ant build ◦ Syntax check ◦ PHP MD ◦ PHP Unit ◦ Code Coverage ◦ PHP Loc ◦ Checkstyle  Project-Matrix authorizáció ◦ Nagyon finom felbontásig hangolható
  • 18. Inf.arkon.hu ◦ Share queue
  • 19. Inf.arkon.hu ◦ Python (Django) ◦ Deployment és monitoring ◦ A share funkciót valósítja meg ◦ Queueban tárolt job-ok percenként indulnak el, ha nincsen konkurens share folyamat ◦ Site-onkénti jogosultság ◦ LDAP authentikáció
  • 20. Csomagtovábbítás ◦ A csomagokat az ANT script állítja elő tar.gz formában ◦ A deploy kicsomagolja és alkalmazza rajta a felülírásokat ( central config stb.) ◦ Kész csomag továbbítódik a szerverekre ◦ Pre- és postscriptek biztosítják a további testre szabhatóságot  Pl.: check.txt törlése, php-fpm restart stb.
  • 21. PHP-FPM APC alatt „beragadt” inode-ok ◦ Prescripttel leállítjuk a php-fpm-et ◦ Postscripttel indítjuk újra  TMPfs az átnevezett könyvtárban zárolva tartotta az inode-ot.  Időzítés precíz hangolása szükséges a Haproxy miatt (eszközleterhelés vs tartalomkihelyezés)  SVN externals nem frissült  Időszinkron Jenkinsben
  • 22. Ingatlan.com ◦ Több build folyamat során elkapott hiba ◦ Stabilabb deploy folyamat ◦ Kifinomultabb ellenőrzés, így megelőzhető vagy előbb észlelhető hibák ◦ Tesztesetek
  • 23. Koponyeg.hu ◦ PHP depend piramis ◦ PMD hibák trendje ◦ Unstable-ből stable ◦ PHP package-ek használata ◦ Kódolási szemlélet váltás
  • 24. •Honnan indultunk? Régmúlt •Koncepció •Folyamatok Múlt •Problémák •Alapelvek •Megoldások Jelen •Eredmények •Meddig jutottunk? •Hova tovább? Konklúzió
  • 25. Inkonzisztens kód a webszervereken   Konkurenciakezelés nem megoldott   Nincs kód minőségellenőrzés és trending   Rsync alatt is ment rá forgalom   Központi config nehézkes   Push a pull helyett   Nem atomi műveletek   Nehéz és lassú rollback 
  • 26. Integritásvédelem ◦ Check.txt-be verziószám  Release management a CI helyett  DB változások kezelése  Funkcionális tesztek futtatása Jenkins build- ből (symfony)