41
Confidential & Proprietary Deployment, build and release management Szabó András 2012.

Budapest DevOps Meetup - Deployment, build and release management

Embed Size (px)

DESCRIPTION

http://www.meetup.com/devopsbp/events/50529942/

Citation preview

Page 1: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Deployment, build and release management

Szabó András

2012.

Page 2: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Áttekintés• Deployment rendszer

– Saját igényekhez készült egyedi megoldás– Könnyen a fejlesztési folyamatokhoz

igazítható– Egyedi komponensek (pl. flash kifrissítés)– PHP

• Build folyamatok• Release management

Page 3: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Deployment rendszer

Page 4: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

DEMÓ

Page 5: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Deployment rendszer célja

• Build folyamatok futtatása (pl. nyelvesítés, packaging)

• Forráskód eljuttatása a célszerverekre

• Rugalmas konfigurálhatóság• A szerverek változásainak gyors

követése• Monitorozás

Page 6: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Deployment – kézi kifrissítés

Page 7: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Deployment – centralizált

Page 8: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Deployment - SCM• SCM: Source Code Management

– Centralizált– Aszinkron műveletek: gearman jobqueue– Fájlok frissítése rsync-kel többszálon– Pre/post-commit hookok– Több verziókezelőt támogat (svn, git)– Széleskörűen konfigurálható– Monitoring– Release management

Page 9: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Rendszer felépítése• Központi szerver

– Repositoryk– Gearman jobqueue– Központi feldolgozók

• Kliens szerverek– Kliens feldolgozó

• Minden szervert rövid hosztneve alapján azonosítunk

• Szervereket csoportokba szervezzük

Page 10: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Rendszer felépítése

Page 11: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Központi szerver komponensei

• Verziótár hookok• Gearman jobqueue• Deployment feldolgozók (branch

típusonként egy)• Branch létrehozásra feldolgozók

(feature és release branchekre)• Válasz feldolgozó

Page 12: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Verziótár hookok• Pre-commit/pre-receive hook

– Autentikáció (git httpn keresztül)– Php lint– Egyéb ellenőrzések

• Post-commit/post-receive hook– Változások lekérdezése– Deploy job feladása a queueba, ha ismert és

aktív branchbe volt kommit– Deploy job már minden szükséges adatot

tartalmaz

Page 13: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Gearman jobqueue• Van hozzá natív PHP extension• Nincs címzés és csoportos küldés

– Egy adott névvel rendelkező job valamelyik arra a névre hallgató feldolgozóhoz kerül

• Képes a szinkron végrehajtásra, de ez nem működött megbízhatóan – amúgy is érdemesebb aszinkron folyamatkezelést megvalósítani

• Egy feladat újbóli feladásáról nekünk kell gondoskodnunk

• Perzisztens adattárolás (nem használjuk)

Page 14: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Gearman jobqueue• Saját PHP lib épült a gyári megoldás

fölé– Feldolgozók közös interfészt kaptak– Stabil PHP démon megvalósítás a

feldolgozókhoz– Válaszok kezelésére általános megoldás– Címzés: job nevébe került a rövid

hosztnév, pl. “Scm.Synchronize:flash56”

Page 15: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Gearman jobqueue• Felmerült problémák

– A feldolgozók egy idő után elárasztották a hálózatot “noop” üzenetekkel (valószínűleg bug) – rendszeres újracsatlakozás megoldotta a problémát

– Hiba esetén jobok újrafeladása: a feldolgozó réteg automatikusan kezeli

Page 16: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Deployment feldolgozó• Working copy létrehozása/frissítése• Szükség esetén build cleanup (ant task)• Build futtatása• Prioritás alapján szervercsoportoknak

szinkronizálási feladat• Válaszok monitorozása• Cache-ek ürítésére (pl. APC flush) jobok

feladása

Page 17: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Egyéb feldolgozók• Feature/release branch létrehozására

1-1 feldolgozó– Branch létrehozása a repositoryban– Igény szerint working copy létrehozása

(git esetében)

• Válaszok feldolgozása– Külön démon végzi, különböző

válaszjobokra van feliratkozva

Page 18: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Kliens oldali kifrissítés• Egy feldolgozó (gyakran szűk

keresztmetszet)• Szinkronizálás job:

– Rsyncet futtat (nagyobb io/hálózati terhelés esesén lassú)

– Branch törlés/létrehozás– Fájljogosultságok (chown)– Éles release branch kiválasztása (symlink

váltás)• APC flush job (lokális url meghívása)

Page 19: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Szerverek teljes kifrissítése

• Külön job• Hasznos új szerver üzembehelyezése

után vagy sokáig kiesett szerver frissítéséhez

• Szerverek kifrissítési állapotának ellenőrzése– Minden repository/branchhez

verzióellenőrzés

Page 20: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Rendszer karbantartása• Update system script

– Kliensek ellenőrzése (státusz, verzió)– Kliensek frissítése (giten keresztül)– Kliensek leállítása– Kliensek státusza felületen

nyomonkövethető

• Feldolgozó démonok aktív figyelése– monit

Page 21: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

SCM monitor

Page 22: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Konfiguráció• Fő egység a projekt

– Build konfiguráció, APC beállítások• Projekten belül több repository• Repositoryn belül branchek

– Minden branchnek egyedi kifrissítési konfiguráció (milyen szervercsoportok mely szervereire menjen a kifrissítés)

• Egy projekten belül több kifrissítési konfiguráció (pl. feature/release branchekre külön)

Page 23: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Egyedi modulok• Flash alkalmazások kezelése

– Egyedi verziókezelés és deployment– Munka branchek, trunk/prelive/live

kontextek kezelése– Minden branchhez egyedi

verziókonfigurácók adhatóak meg– Könnyű visszaállási lehetőség

Page 24: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Egyéb szolgáltatások• Virtuális branchek kezelése (symlinkelt

könyvtárak, pl. csapat release branch)• Deployment parancsok commit

messageből– APC flush vezérlése (pl. nagy terheléscsúcs)– Build előtt cleanup

• Live release rss feed• Lehet kommitokat lájkolni

Page 25: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

BUILD folyamatok

Page 26: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Build folyamat célja• A rendszer gyorsítása előfeldolgozással• Feladatai:

– Js/css fájlok tömörítése, csomagolása– Dinamikus fordításhoz nyelvesítési adatok

kigyűjtése– Template-ek nyelvesítése– Statikus tartalmak verziózása– PHP osztályok összecsomagolása

• 10 nyelv mellett 30-60 sec között fut

Page 27: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Nyelvesítés• Saját nyelvesítési rendszer• A build folyamat automatikusan

feltérképezi, milyen template milyen nyelvi elemeket használ

• Újrabuildelés csak a változott fájlok/változott nyelvi elemek alapján

• Dinamikus fordítások feldarabolása (nyelvenként ~160 kicsi adatfájl)

Page 28: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

js/css csomagolás, verziózás

• YUI Compressor js és css fájlokra• Oldaltípusonként külön js és css

csoportokat csomagolunk össze (pl. channel/dashboard)

• Minden statikus tartalom utolsó fájlmódosítási dátum alapján kap verziót

• Css fájlokba injektáljuk a verziókat• Statikus tartalmat nagyrészét nginx/cdn

szolgálja ki

Page 29: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

PHP osztályok csomagolása

• Saját framework osztályok• Leggyakrabban használt üzleti

logikát megvalósító osztályok• Összeállítása kézzel történik

(érdemes lenne rendszeresen monitorozni a hatékonyságot)

• Mérete: ~1Mb jelenleg

Page 30: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Release management

Page 31: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Release management• A jó folyamat kiválasztása erősen

termék és cégfüggő• Igazodnia kell a megrendelők

(termékmenedzserek) igényeihez• Ustream: számos azonnali módosítás

és gyorsjavítás – be kell tudni illeszteni a napi folyamatokba

Page 32: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Régi út• Minden fejlesztés és tesztelés a

trunkban• Élesítés közvetlenül a stagebe

– Lassú élesítés– Nehézkes a visszahúzás– Trunk/stage környezet eltérése miatt

gyakori hibák

• Trunkban rengeteg halott kód gyűlt fel, egyre nehezebb a karbantartás

Page 33: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Brancheljünk?• Fő ág a stage/master branch• Minden branch a fő ágból ágazik el• Feature branchek a fejlesztéshez,

elsőkörös QA-hoz• Release branchek az élesítés

előkészítéséhez, végleges QA-hoz• Élesítés csak a release branch

váltását jelenti, könnyű visszavonás

Page 34: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Feature branchek• Minden fejlesztés kisebb-nagyobb

feature és csapat branchekben folyik• Csapat branchek főleg demózáshoz,

komponensek összeillesztéséhez, de rövid időn belül halott kódot tartalmazhatnak

• A termékmenedzserek felől érkező állandóan változó igények miatt nehéz a brancheket karbantartani

Page 35: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Fokozatos refactoring• Branchelés helyett refaktorizálás a fő

ágban közvetlenül– Adott komponensben új absztrakciós

réteg bevezetése– Új üzleti logika megvalósítása– Fokozatos átállás az új megvalósításra– Ha a régi kódokat már semmi nem

használja, az absztrakciós réteg megszüntethető

Page 36: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Élesítés folyamata• Release branch létrehozása (nem tag!)

– Tesztelés minél közelebb az éles rendszerhez

• Éles release branch váltás:– Nincs kiemelt esemény abban az időszakban

(pl. sokezer dolláros ppv adás)– CI buildek hiba nélkül futnak– QA-n átment– Szükség esetén sysop/backend csapat review

• Live váltás/rollback egy kattintás

Page 37: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Élesítések ütemezése• SCM felületen a csapatok előre

felviszik az élesítési időpontokat• Scrum szerint dolgozó csapatok a

sprintek szerint release-elnek• Pl. backend csapat fix heti release-

eket csinál• Fontos módosítás esetén quickfix

release/élesbe kommitolás engedélyezett

Page 38: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Élesítés naptár

Page 39: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Continuous integration• Különálló Jenkins szerver

– Repository mirrorból dolgozik (gyors)– Branchenként külön jobok– Unit/db/integrációs/end-to-end tesztek

futtatása minden kommit után (gyors)– Nightly build: code coverage, statikus

analízis futtatás (lassú)– Párhuzamos buildek futattása izoláltan

(saját db, memcache pooling)

Page 40: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

Továbbfejlesztési irányok• Jelenleg sok adminisztrációs munka

– Release log karbantartása (JIRA ticketek alapján kigyűjthető)

• Pre-commit/release hook– JIRA ticketek ellenőrzése– Phpcs futtatás változott fájlokra

• Release folyamat jobbá tétele, folyamatos kód integráció

Page 41: Budapest DevOps Meetup - Deployment, build and release management

Confidential & Proprietary

KÖSZÖNÖM A FIGYELMET!Jöhetnek a kérdések.