Dev Ops A rendszerfejleszts s zemeltets kapcsoldsa VIMIAV

  • Slides: 41
Download presentation
Dev. Ops: A rendszerfejlesztés és üzemeltetés kapcsolódása (VIMIAV 21) Dev. Ops – Folytonos integráció

Dev. Ops: A rendszerfejlesztés és üzemeltetés kapcsolódása (VIMIAV 21) Dev. Ops – Folytonos integráció (CI) és keretrendszerek Szatmári Zoltán Méréstechnika és Információs Rendszerek Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék 1

Fejlesztési és üzemeltetési életciklus § § § § § Tervezés Fejlesztés Fordítás Csomagolás Tesztelés

Fejlesztési és üzemeltetési életciklus § § § § § Tervezés Fejlesztés Fordítás Csomagolás Tesztelés Integráció Telepítés Üzemeltetés Monitoring / Adatgyűjtés 2

Motivációs gondolatok § Hibák késői javítása egyre drágább 3

Motivációs gondolatok § Hibák késői javítása egyre drágább 3

Motivációs gondolatok § Csapat kohézió hiánya problémákat okoz o „Az XY osztályt érintő változtatásaid

Motivációs gondolatok § Csapat kohézió hiánya problémákat okoz o „Az XY osztályt érintő változtatásaid nem kompatibilisek az enyéimmel? Hogy fogjuk összefésülni őket? ” o „Mikor frissítettük a Szuper Függőséget 2. 3. 1 -beta verzióra? ” o „Azt hittem ezt már javítottátok 3 hónapja” o „Nem lebegőpontos bemenetet vár ez az interfész? ” 4

Motivációs gondolatok § Egyéni, kézi fordítás, tesztelés nem reprodukálható o „Nálad ez a teszt

Motivációs gondolatok § Egyéni, kézi fordítás, tesztelés nem reprodukálható o „Nálad ez a teszt lefutott? ” o „Pontosan mi is került a 4. 5 -ös verzióba? ” o „Milyen kódfedettségünk van most? ” o „Az előbb még ugyanez más eredményt adott!” 5

Motivációs gondolatok § Kész termék hiánya stratégiai hátrány lehet o „Hiszen ez működött az

Motivációs gondolatok § Kész termék hiánya stratégiai hátrány lehet o „Hiszen ez működött az én gépemen” o „Szükségem lenne egy friss verzióra, hogy kipróbáljak valamit” o „Jön egy ügyfél, be kéne mutatni neki a rendszert” 6

Miért alkalmazzunk CI eszközöket? § Gyors és gyakori visszajelzés a rendszerfejlesztés különböző fázisairól §

Miért alkalmazzunk CI eszközöket? § Gyors és gyakori visszajelzés a rendszerfejlesztés különböző fázisairól § Automatizálás, reprodukálhatóság o Fejlesztők tehermentesítése o Kockázat csökkenése § Integráció és telepítés megkönnyítése o Nagy számú komponens integrációja egyre nehezebb § Kódminőség javítása o Mérhető és megjelenített metrikák használhatók o Regressziók vizsgálhatók 7

Continous Integration (CI) Folytonos integráció Martin Fowler § „a software development https: //martinfowler. com/articles

Continous Integration (CI) Folytonos integráció Martin Fowler § „a software development https: //martinfowler. com/articles /continuous. Integration. html practice where members of a team integrate their work frequently, usually each person integrates at least daily” § „Each integration is verified by an automated build (including test) to detect integration errors Forrás as quickly as possible. ” 8

Continous Delivery / Deployment (CD) „build software so that it is always in a

Continous Delivery / Deployment (CD) „build software so that it is always in a state where it could be put into production” Forrás: https: //martinfowler. com/bliki/Continuous. Delivery. html Forrás 9

Előkövetelmények § Követelmény o Verziókezelés o Automatikus fordítás o Automatikus tesztelés § Nem elvárás

Előkövetelmények § Követelmény o Verziókezelés o Automatikus fordítás o Automatikus tesztelés § Nem elvárás o Folyamatos kiadások (CD) o Kézi tesztelések hiánya o Infrastructure as a Code o Agile, Scrum vagy Kanban fejlesztési módszertan 10

Jó gyakorlatok CI kapcsán § § § § Egy közös repository Automatikus fordítás Legalább

Jó gyakorlatok CI kapcsán § § § § Egy közös repository Automatikus fordítás Legalább napi „commit” minden fejlesztőtől Gyors „build” folyamat „Build” hibák gyors javítása Mindenki számára követhető és látható folyamat Telepítés automatizálás (opcionális) 11

Compile vs build Compile != Build 12

Compile vs build Compile != Build 12

Általános CI komponensek § § Forráskód előkészítése (verziókezelés) Fordítás Statikus ellenőrzés Automatikus tesztelés o

Általános CI komponensek § § Forráskód előkészítése (verziókezelés) Fordítás Statikus ellenőrzés Automatikus tesztelés o Unit-, integrációs- és rendszertesztelés § Monitor és trigger folyamatok (automatizálás) § Metrika gyűjtés és reporting 13

Statikus ellenőrzés § Statikus ellenőrzési technikák o Szoftver vizsgálata végrehajtás nélkül o Kódolási irányelvek

Statikus ellenőrzés § Statikus ellenőrzési technikák o Szoftver vizsgálata végrehajtás nélkül o Kódolási irányelvek ellenőrzése o Metrikák számítása § Előny: akkor is elvégezhető, ha o Még nem futtatható a szoftver o Költséges a futtatás o Nem áll rendelkezésre bemenet 14

Statikus ellenőrzés - Findbugs § Nagy, kiterjeszthető szabályhalmaz § Példák: o Rossz szokás: „random

Statikus ellenőrzés - Findbugs § Nagy, kiterjeszthető szabályhalmaz § Példák: o Rossz szokás: „random object created and used only once” o Helyesség: „bitwise add of signed byte value” o Sebezhetőség: „expose inner static state by storing mutable object into a static field” o Többszálúság: „synchronization on Boolean could lead to deadlock” o Teljesítmény: „invoke to. String() on a string” o Biztonság: „hardcoded constant database password” o Gyanús: „useless assignment in return statement” 15

Statikus ellenőrzés - Sonar. Qube § Kódminőség menedzsment platform § 20+ támogatott nyelv (Java,

Statikus ellenőrzés - Sonar. Qube § Kódminőség menedzsment platform § 20+ támogatott nyelv (Java, C, C++, C#, …) § Kódolási irányelvek vizsgálata: o Kódduplikálás o Tesztfedettség o Kód komplexitás o Lehetséges hibák és sebezhetőségek o Költség becslés § Jelentések, diagramok generálása 16

Tesztelés § Általános teszt típusok o o Unit tesztelés Integrációs tesztelés Rendszertesztelés Robosztusság tesztelés

Tesztelés § Általános teszt típusok o o Unit tesztelés Integrációs tesztelés Rendszertesztelés Robosztusság tesztelés § Tesztelési célok o o o Smoke teszt Regressziós teszt Teljesítmény teszt Biztonsági teszt Elfogadhatósági teszt 17

CI eszközök https: //en. wikipedia. org/wiki/Comparison_of_continuous_integration_software 18

CI eszközök https: //en. wikipedia. org/wiki/Comparison_of_continuous_integration_software 18

Jenkins § Nyílt forráskódú CI szerver § Könnyű telepítés és használat o Webes GUI

Jenkins § Nyílt forráskódú CI szerver § Könnyű telepítés és használat o Webes GUI § Pluginekkel való bővíthetőség § Stabil, erős közösség, támogatás § Elosztott, párhuzamos megvalósítás 19

Jenkins - Funkciók § § § Build trigger Forráskód előkészítése Automatikus fordítás, tesztelés Jelentések

Jenkins - Funkciók § § § Build trigger Forráskód előkészítése Automatikus fordítás, tesztelés Jelentések előállítása Értesítések kiküldése Telepítés 20

Jenkins – Build Trigger § § § Kézi „build” Periodikus Feladatok közötti függőség Verziókezelő

Jenkins – Build Trigger § § § Kézi „build” Periodikus Feladatok közötti függőség Verziókezelő változás REST hívásra Külső rendszerek o Chat o Jira 21

Jenkins - Forráskód előkészítése 22

Jenkins - Forráskód előkészítése 22

Jenkins - Fordítási lépések § Automatikus fordítási eszközök meghívása o Maven o Ant o

Jenkins - Fordítási lépések § Automatikus fordítási eszközök meghívása o Maven o Ant o Gradle § Shell script o Bash o Python o Ruby o Groovy § Egyéb műveletek 23

Jenkins – Fordítási környezetek § Dedikált „workspace” minden fordításhoz o Opcionális takarítás az előző

Jenkins – Fordítási környezetek § Dedikált „workspace” minden fordításhoz o Opcionális takarítás az előző build után § Környezeti változók használata § Docker, vagy VM konténerben történő fordítás § Skálázhatóság: Jenkins workers o Saját dedikált worker o On-demand Cloud worker (Pl. AWS EC 2) 24

Jenkins – Jelentések § Statikus analízis jelentések o Checkstyle, Findbugs, PMD, Sonar. Qube jelentések

Jenkins – Jelentések § Statikus analízis jelentések o Checkstyle, Findbugs, PMD, Sonar. Qube jelentések § Teszt eredmény és fedettség jelentések o Junit, Test. NG, Sonar. Qube, Cobertura 25

Jenkins - Értesítések § § § E-mail Twitter Slack Google calendar RSS … 26

Jenkins - Értesítések § § § E-mail Twitter Slack Google calendar RSS … 26

Jenkins - Plugins § § § § § Build trigger Forráskód/Verziókezelés Build eszközök Build

Jenkins - Plugins § § § § § Build trigger Forráskód/Verziókezelés Build eszközök Build wrappers Build jelentések Build értesítések Artifact feltöltés, publikálás Telepítés UI kiegészítők Authentikáció és felhazsnálókezelés 27

Jenkins - Jenkinsfile § CI as a Code § Deklaratív pipeline leírás, imperatív betétekkel

Jenkins - Jenkinsfile § CI as a Code § Deklaratív pipeline leírás, imperatív betétekkel 28

Travis § Nyílt forráskódú § Hosztolt (Cloud) szolgáltatás § Ingyenes minden publikus Git. Hub

Travis § Nyílt forráskódú § Hosztolt (Cloud) szolgáltatás § Ingyenes minden publikus Git. Hub projekthez 29

Travis - Funkciók § § § Git. Hub projektek figyelése Tesztek futtatása Jelentések készítése

Travis - Funkciók § § § Git. Hub projektek figyelése Tesztek futtatása Jelentések készítése „Artifact”-ok előállítása Kódminőség ellenőrzése Telepítés felhő-alapú környezetbe § … igazából bármi, amire szükség van 30

Támogatott platformok 31

Támogatott platformok 31

Travis - Architektúra 32

Travis - Architektúra 32

Előnyök és hátrányok § Előnyök o Könnyű konfigurálhatóság o Jó Git. Hub integráció o

Előnyök és hátrányok § Előnyök o Könnyű konfigurálhatóság o Jó Git. Hub integráció o Jó teljesítmény és sebesség o Népszerű, nagy támogatottság, közösség § Hátrányok o Nincs kézi fordítási lehetőség o Hosztolt infrastruktúra, esetleges leállások o Kevésbé kiterjeszthető, mint a Jenkins o Titkos/érzékeny projektekhez nem alkalmas 33

. travis. yml • YAML formátumú leíró nyelv o CI as a Code §

. travis. yml • YAML formátumú leíró nyelv o CI as a Code § Alapértelmezett sablonok különböző nyelvekhez o Java: gradle / maven fordítás minden további beállítás nélkül § Környezeti változók, titkosított kulcsok használhatóak 34

Travis vs Jenkins 35

Travis vs Jenkins 35

Git. Lab + Git. Lab CI § Jó alternatíva a Git. Hub + Travis

Git. Lab + Git. Lab CI § Jó alternatíva a Git. Hub + Travis kombinációra § Saját üzemeltetésű verziókezelő + CI eszköz § YAML formátumú CI pipeline leírás 36

Git. Lab CI -. gitlab-ci. yml 37

Git. Lab CI -. gitlab-ci. yml 37

Git. Lab CI 38

Git. Lab CI 38

Git. Lab CI 39

Git. Lab CI 39

Alternatívák § Cloud o circleci. com – Travis-hez nagyon hasonló o appveyor. com –

Alternatívák § Cloud o circleci. com – Travis-hez nagyon hasonló o appveyor. com – Windows alkalmazásokhoz o codeship. io – Erős CD cloud szolgáltatók felé o drone. io § Saját üzemeltetés o Dot. CI o Drone 41

Hivatkozások § § § https: //jenkins. io/ https: //travis-ci. org https: //docs. travis-ci. com/user/deployment/heroku/

Hivatkozások § § § https: //jenkins. io/ https: //travis-ci. org https: //docs. travis-ci. com/user/deployment/heroku/ https: //heroku. com https: //spring. io/guides/gs/spring-boot-docker/ 42