Folytonos integráció (CI/CD)
Folytonos integráció (CI/CD)
Leírás
Ebben a leckében a lokális buildfolyamatoktól jutunk el a csapat- és projektszintű automatizálásig. A cél annak megértése, hogy a fordítás, tesztelés, csomagolás és közzététel miként válik közös, ismételhető és ellenőrizhető munkafolyamattá.
A lecke a korábbi build rendszerekről szóló anyagra épül. Ott a lokális buildfolyamat, az artifact fogalma, valamint a build automatizálás alapjai jelentek meg. Itt ugyanezeket a lépéseket emeljük át CI/CD környezetbe.
Tanulási célok
A lecke végére a hallgató:
- érti, hogyan kapcsolódik a lokális build a CI/CD folyamathoz,
- el tudja különíteni a CI, Continuous Delivery és Continuous Deployment fogalmát,
- meg tudja magyarázni, mi a pipeline,
- fel tud sorolni tipikus pipeline lépéseket és indítási eseményeket,
- ismeri a pipeline tipikus kimeneteit,
- érti a feature branch + pull request alapú munkafolyamat szerepét,
- alapvetően ismeri a Jenkins és a GitHub Actions szerepét,
- lát egy minimális GitHub Actions workflow példát,
- el tudja helyezni a Unity projekteket CI/CD környezetben is.
Előismeretek
A lecke feltételezi a következő fogalmak alapszintű ismeretét:
- fordítás és linkelés,
- build rendszerek,
- artifact,
- verziókezelés Git segítségével,
- alapvető tesztelési fogalmak.
1. Build rendszerektől a CI/CD-ig
Korábban a lokális buildfolyamat volt a fókusz:
- fordítás,
- linkelés,
- tesztelés,
- artifact előállítása.
A következő lépés ezek automatizálása csapat- és projektszinten:
- közös repository használata,
- automatikus build,
- automatikus tesztelés,
- automatikus visszajelzés,
- mérőszámok gyűjtése,
- egységes folyamat minden fejlesztő számára.
Lényeg
A CI/CD a build rendszerekre épül: a lokális automatizálásból közös, ismételhető fejlesztési munkafolyamat lesz.
flowchart LR
A[Lokális build] --> B[Build script]
B --> C[Automatikus trigger]
C --> D[CI/CD pipeline]
D --> E[Build]
D --> F[Test]
D --> G[Package]
G --> H[Artifact]
2. Alapfogalmak
CI (Continuous Integration)
A forráskód változásainak gyakori integrálása közös repository-ba, automatikus builddel és automatikus teszteléssel.
A cél az, hogy a hibák minél hamarabb kiderüljenek, és a közös ág stabil maradjon.
Continuous Delivery
A szoftver folyamatosan kiadható állapotban van. A release előkészítése automatizált, de a végső kiadás még lehet emberi döntés.
Continuous Deployment
A sikeres pipeline után a változás automatikusan települ célkörnyezetbe vagy akár éles rendszerbe.
DevOps
A fejlesztés és üzemeltetés összehangolt szemlélete. A cél a gyorsabb szállítás, a megbízhatóbb működés, az automatizálás és a folyamatos visszajelzés.
Rövid különbségtétel
- CI: build + teszt automatikusan
- Delivery: bármikor kiadható állapot
- Deployment: automatikus telepítés
- DevOps: tágabb működési és szervezési szemlélet
flowchart LR
A[Kódváltozás] --> B[CI: build + teszt]
B --> C[Delivery: kiadható állapot]
C --> D[Deployment: automatikus telepítés]
3. Folytonos integráció dióhéjban
Hagyományos esetben a fejlesztő:
- megírja a kódot,
- lefordítja,
- futtatja a teszteket,
- majd valamilyen módon közzéteszi az eredményt.
CI esetén ugyanez automatizáltan történik:
- a kód közös tárhelyre kerül,
- a rendszer lehúzza a friss változatot,
- buildet és teszteket futtat,
- visszajelzést ad,
- és szükség esetén kiadható csomagot is előállít.
Miért hasznos?
- gyorsabb visszajelzés,
- hamarabb kiderülő integrációs hibák,
- következetes ellenőrzés,
- jobban látható fejlesztési folyamat.
4. Mi az a pipeline?
A pipeline a fejlesztési folyamat automatizált lépéssorozata. Tipikusan egymás után futó szakaszokból áll, de bizonyos részei párhuzamosíthatók.
A pipeline célja, hogy a forráskódból ellenőrzött, tesztelt és kiadható eredmény készüljön.
A pipeline működését gyakran konfigurációs fájl írja le, például:
Jenkinsfile.github/workflows/*.yml
Pipeline tipikus lépései
- checkout / forráskód letöltése,
- függőségek előkészítése,
- build,
- tesztelés,
- csomagolás,
- artifact előállítása,
- publish vagy delivery,
- deploy,
- értesítés / visszajelzés.
flowchart LR
A[Checkout] --> B[Dependencies]
B --> C[Build]
C --> D[Test]
D --> E[Package]
E --> F[Artifact]
F --> G[Publish / Deploy]
G --> H[Notify]
5. Mikor indul el egy pipeline?
A pipeline futása eseményhez vagy időzítéshez kötött.
Tipikus indítási lehetőségek
- push vagy commit egy branchre,
- pull request megnyitása vagy frissítése,
- merge a main branchre,
- tag vagy release létrehozása,
- manuális indítás,
- időzített futtatás, például nightly build.
Miért fontos ez?
A trigger határozza meg, hogy a pipeline mikor és milyen változásra reagáljon.
flowchart TD
A[Kódváltozás vagy esemény] --> B{Trigger típusa}
B --> C[push / commit]
B --> D[pull request]
B --> E[merge a main branchre]
B --> F[tag / release]
B --> G[manuális indítás]
B --> H[időzített futtatás]
C --> I[CI/CD pipeline]
D --> I
E --> I
F --> I
G --> I
H --> I
6. A pipeline tipikus kimenetei
A pipeline nem kizárólag lefutási állapotot ad vissza. Nem csak annyit mond, hogy sikeres vagy hibás lett, hanem konkrét kimeneteket is előállít.
Tipikus kimenetek
- futtatható állomány,
- teszt riport,
- code coverage riport,
- telepítőcsomag,
- release csomag,
- nightly build csomag,
- egyéb build outputok.
Unity-s példák
- Windows build,
- Android APK vagy AAB,
- WebGL export,
- Development build,
- Release build.
flowchart LR
A[CI/CD pipeline] --> B[Futtatható állomány]
A --> C[Teszt riport]
A --> D[Code coverage]
A --> E[Telepítőcsomag]
A --> F[Release csomag]
A --> G[Nightly build]
A --> H[Unity build output]
Lényeg
A CI/CD nemcsak ellenőriz, hanem kézzelfogható build eredményeket is termel.
7. CI tipikus munkafolyamatban
Egy modern Git-alapú csapatmunkában a fejlesztő jellemzően külön feature branch-en dolgozik.
Tipikus folyamat
- fejlesztés feature branch-en,
- commit,
- pull request,
- automatikus build és teszt,
- merge csak sikeres pipeline után,
- a main branch mindig fordulóképes és stabil marad.
flowchart LR
A[Feature branch] --> B[Commit]
B --> C[Pull request]
C --> D[Automatikus build]
D --> E[Automatikus teszt]
E --> F{Sikeres?}
F -- Igen --> G[Merge a main branchbe]
F -- Nem --> H[Javítás]
H --> B
Miért fontos?
A CI nemcsak automatizálás, hanem fegyelmezett közös fejlesztési munkafolyamat is.
8. CI eszközök és fejlődési út
Egyszerű megoldások
- PowerShell vagy Bash szkriptek,
- esemény- vagy időzített futtatás.
Központibb megoldások
- távoli build szerver,
- közös webes visszajelzés,
- egységes környezet.
Izolált megoldások
- konténerizált build és teszt,
- kontrollált könyvtár- és verziókészlet,
- reprodukálható környezet.
Példák
- Make, MSBuild,
- Jenkins,
- GitHub Actions,
- GitLab CI,
- CircleCI,
- Docker,
- Kubernetes,
- OpenEmbedded,
- Yocto.
9. Jenkins röviden
A Jenkins egy nyílt forráskódú, széles körben használt CI/CD eszköz.
Fő jellemzők
- elosztott működés,
- plugin alapú bővíthetőség,
- Docker integráció,
- idő- és eseményvezérelt futtatás,
- pipeline alapú működés.
Fontos fogalmak
- Pipeline: teljes munkafolyamat
- Node: futtató gép
- Stage: logikai szakasz
- Step: konkrét lépés
A Jenkins jó példa arra, hogyan válik a build és a release folyamat programozhatóvá.
10. GitHub Actions röviden
A GitHub Actions a GitHub-ba épített CI/CD eszköz.
Fő jellemzők
- workflow alapú működés,
- YAML alapú konfiguráció,
- a workflow fájlok helye:
.github/workflows/, - trigger-ek eseményekhez vagy időzítéshez köthetők,
- különböző runner környezetek használhatók.
Fő elemek
- on: trigger meghatározása,
- job: önálló futási egység,
- step: a jobon belüli konkrét lépés,
- runner: a futtatási környezet.
Miért hasznos?
A build, teszt és artifact-kezelés közvetlenül a repositoryhoz kapcsolódhat.
11. GitHub Actions és Jenkins összevetése
A két megoldás szemléletben sokszor hasonló.
Közös pontok
- YAML vagy deklaratív pipeline leírás,
- trigger alapú indítás,
- több lépéses workflow,
- külső komponensek integrálása,
- Docker használat,
- build + test + artifact folyamatok.
Egyszerű különbség
- Jenkins: külön kiszolgálót és infrastruktúrát igényelhet
- GitHub Actions: közvetlenül a GitHub repository részeként használható
12. Minimális GitHub Actions workflow
Az alábbi példa egy egyszerű .NET CI workflow-t mutat:
name: .NET CI
on:
push:
branches: [ "main" ]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
- name: Restore
run: dotnet restore
- name: Build
run: dotnet build --no-restore --configuration Release
- name: Test
run: dotnet test --no-build --configuration Release
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: build-output
path: .
Mit mutat a példa?
- a workflow triggerét,
- a runner környezetet,
- a checkout lépést,
- a .NET környezet előkészítését,
- a restore, build és test lépéseket,
- az artifact feltöltését.
13. Unity CI/CD környezetben
A Unity projekt is beilleszthető CI/CD folyamatba.
Tipikus lépések
- commit a repositoryba,
- automatikus build,
- automatikus teszt,
- artifact előállítása,
- release vagy test build közzététele.
Lehetséges buildtípusok
- Development build,
- Release build.
Tipikus Unity artifactok
- Windows build,
- Android build,
- WebGL export.
Időzített lehetőségek
- nightly build,
- teszt build.
14. A folytonos integráció előnyei
- automatikus build és teszt,
- gyors visszajelzés,
- integrációs hibák gyorsabb felismerése,
- követhető állapot,
- automatikusan előálló riportok és metrikák,
- moduláris fejlesztés támogatása,
- mindig legyen demonstrálható verzió.
15. A folytonos integráció korlátai és hátrányai
- önmagában nem garantálja a minőséget,
- a tesztek minősége meghatározó,
- a build rendszer és pipeline kialakítása időigényes,
- nagyon kis projekteknél nem mindig éri meg,
- legacy rendszereknél költséges lehet a bevezetés,
- kritikus rendszereknél különösen fontos a megfelelő validáció,
- az automatizmus nem helyettesítheti teljesen az emberi minőségi felügyeletet.
16. Gyakori hibák és anti-patternök
Tipikus problémák
- túl lassú pipeline,
- instabil tesztek,
- túl sok manuális lépés,
- “works on my machine” jelenség,
- nincs artifact mentés,
- nincs értesítés vagy láthatóság,
- minden branch mindenhová deployol.
A “works on my machine” jelenség pontosabban
Nem az a baj, hogy a fejlesztői és a CI környezet nem teljesen azonos. A probléma akkor jelentkezik, ha a különbségek nincsenek kontrollálva, és a lokálisan működő build vagy teszt nem reprodukálható a közös pipeline-ban.
Miért veszélyesek ezek?
A rosszul kialakított CI/CD folyamat nem gyorsítja, hanem akadályozza a fejlesztést.
17. Continuous Delivery röviden
A Continuous Delivery célja, hogy a szoftver folyamatosan kiadható állapotban maradjon.
Előnyök
- gyorsabb reagálás,
- gyakoribb visszajelzés,
- jobb szállítási fegyelem,
- megbízhatóbb verziók.
Korlátok
- nem minden rendszer frissíthető folyamatosan,
- bizonyos területeken külön validáció szükséges,
- a felhasználási környezet elfedheti a hibákat,
- kritikus rendszereknél az emberi jóváhagyás szerepe megmarad.
18. Összefoglalás
Ebben a leckében a lokális build automatizálásból indultunk ki, és eljutottunk a CI/CD szervezett, csapatmunkára épülő világáig. A központi fogalom a pipeline, amely automatizált lépésekből áll, eseményekre vagy időzítésre indul, és konkrét build eredményeket állít elő. Megnéztük a CI, Delivery és Deployment közti különbséget, a Git-alapú munkafolyamat szerepét, valamint a Jenkins és GitHub Actions helyét is.
A gyakorlati rész szempontjából különösen fontos, hogy a CI/CD nem öncélú: a cél a gyors visszajelzés, a reprodukálható build, a követhető folyamat és a stabil közös ág fenntartása.
Kulcsfogalmak
- CI
- Continuous Delivery
- Continuous Deployment
- DevOps
- pipeline
- trigger
- artifact
- workflow
- runner
- branch
- pull request
- build
- test
- release
- deploy
Ellenőrző kérdések
- Mi a különbség a CI, Continuous Delivery és Continuous Deployment között?
- Mi a pipeline szerepe a modern fejlesztési folyamatban?
- Milyen események indíthatnak el egy pipeline-t?
- Milyen tipikus kimeneteket állíthat elő egy CI/CD pipeline?
- Miért fontos a feature branch + pull request alapú munkafolyamat?
- Miben különbözik a Jenkins és a GitHub Actions alaphelyzete?
- Mit jelent a “works on my machine” jelenség CI/CD környezetben?
- Miért nem elég önmagában a CI a magas minőség garantálásához?
Továbblépés
A következő gyakorlati lépés egy egyszerű .NET projekt CI workflow-jának elkészítése lehet GitHub Actions segítségével. Jó kiindulópont lehet egy kis játéklogika vagy UI-projekt, amelyhez build, teszt és artifact feltöltés is könnyen bemutatható.