Folyamatos integráció Flashcards
Mi az a folyamatos integráció? (Continuous Integration)
Egy szoftverfejlesztési gyakorlat, amely során a csapat tagjai rendszeresen integrálnak, legalább egy integráció / nap. Minden integráció egy automatikus buildelésből áll, beleértve a tesztek futtatása. Jobb minőségű szoftvert biztosít ez a gyakorlat, mert a hibák rögtön kibuknak.
CI fázisai
- forráskód tárolása
- verziókezelő
- build
- statikus kódanalízis
- automata unit tesztek futtatása
- kód lefedettség ellenőrzése
- alkalmazás elkészítése
- teszt adatok felállítása, teszt környezetbe helyezés
- funkcionális tesztek
- reportok készítése
- csapatnak elküldeni, akik erre tudnak reagálni.
(Source -> Build -> Test -> Deploy)
Source
A CI/CD pipeline alapköve. A forráskód a fejlesztők által folyamatosan frissítve van egy verziókezelő rendszer segítségével. Minden módosítás trackelve van és bármikor visszaállhatnak előző verziókra. A Source stage-ben a commitok, merge requestek triggerelik a következő fázist.
Build
Egy kritikus szakasza a pipeline-nak mivel itt lesz a forráskódból futtatható állomány.
Ebben a fázisban kerülnek kezelésre a függőségek, és a statikus kód analízis is lefut. Ha a build elhasal, akkor a fejlesztőknek ezt jelzi a rendszer, illetve a hiba okát is. A build után előáll egy artifact, vagy akár több is ami a következő fázisba átadható.
Test
Ebben a fázisban futnak le az automatikus tesztek amelyek garantálják a termék minőségét.
Tesztek amik lefutnak:
* Integrációs tesztek
* Funkcionális tesztek
* Teljesítménybeli tesztek
* Biztonsági tesztek
Deploy
A pipeline utolsó fázisa, ahol a program kitelepítésre kerül így elérhetővé válhat a felhasználók számára.
CI szabályai
- közös repository használata
- állandó integrálás a fő branchről
- automata gyors build és automata unit tesztek a build részeként
- DEV és UAT környezet a develop branch klónjaként léteznek
Folyamatos szállítás (Continuous Delivery)
- A termék mindig készen áll arra, hogy szállítva legyen UAT/QA-ra.
- Folyamatos szállítás és telepítés: UAT-ra.
- Batched deploy PROD-ra.
Folyamatos kitelepítés (Continuous Deployment)
Automatikus kitelepítés PROD-ra
Continuous Delivery és Continuous Deployment különbség
Continuous Deliverynél a PROD-ra való telepítés manuális addig a Continuous Deployment-nél ez automatikus.
CI Stack komponensek és eszközök
- verziókezelő (pl git)
- vcs manager (pl gitlab)
- software project manager (pl Gradle)
- CI servers (pl Jenkins)
- repository management (pl Nexus)
- code review, dokumentáció, hiba keresés. (nem fő része)
Jenkins
Ingyenes, pluginokkal tudjuk kiegészíteni, skálázható. Ugyanazok a pluginek megvannak, mint a Gradle-höz is.
Beállításai: header, forrás kód, mire triggerelődjön, gradle wrapper, script beállításai, postbuild akciók beállításai (pl a JUnit teszt eredmények reportolása).
Úgynevezett agentek (slaves) léteznek akik a buildelést, tesztelést végzik így a master servert hagyják más dolgokkal foglalkozni. Skálázhatóságot segítik elő.
Telepítés a Jenkinssel: kontrollálja a folyamatot, nexusból letöltés, cél környezetbe feltöltés, megállítja, újraindítja a folyamatot, ha kell.
Repository Management
Szerver alkalmazás (Nexus), bináris komponenseket tároljuk itt (artifactokat).
Azért is használjuk, mert az artifactokat nem akarjuk publikálni.
Nexus karakterisztika a letöltések számát csökkenti, jobb build stabilitás, mert nem függenek külső repotól, snapshot repokkal való kapcsolat magasabb teljesítmény érdekében.
Kontrolálhatjuk az engedélyezett artifactokat. Központi tároló, ahonnan a többi fejlesztő le tudja szedni az artifactokat. Kényelmesebb használat, mert nekünk már nem kell buildelni.
Repository management típusai
● hostolt
● proxy (távoli szerverre), hogy a saját gyorsabb legyen
● virtual: adapter különböző repok számára.
Repository csoportok: Sorrendbe tehetők, előírás, hogy ki írhatja elő.
Snapshot: szeretném megosztani valakivel, hogy hogy állok, de még nincs kész. Van redeploy, akárhány verzió lehet.
Release: nincs redeploy, tehát ha kint van az 1.0 nem lehet még egyszer 1.0. Gradle publish-al lehet távoli repoba feltölteni, ha megadjuk ennek címét.