====== CI/CD (Automatizace vývoje) ====== **CI/CD** je kombinace postupů a nástrojů, které umožňují vývojovým týmům dodávat kód častěji, spolehlivěji a s minimem manuálních zásahů. Je to základní pilíř kultury **DevOps**. Zkratka se skládá ze dvou (respektive tří) hlavních částí: ===== 1. CI: Continuous Integration (Průběžná integrace) ===== Cílem CI je zajistit, aby kód od různých vývojářů mohl být pravidelně (i několikrát denně) slučován do centrálního repozitáře (např. Git). * **Automatické sestavení:** Jakmile vývojář nahraje kód, systém jej automaticky zkompiluje. * **Automatické testy:** Ihned po sestavení se spustí testy (Unit testy), které ověří, zda nová změna nerozbila stávající funkcionalitu. ===== 2. CD: Continuous Delivery a Deployment ===== Zde dochází k automatizaci cesty kódu z repozitáře k uživateli. * **Continuous Delivery:** Proces automaticky připraví balíček (např. Docker image), který je připraven k nasazení. Samotné nasazení do produkce však vyžaduje manuální schválení. * **Continuous Deployment:** Každá změna, která úspěšně projde testy, je automaticky a okamžitě nasazena přímo do produkčního prostředí. ===== Prvky CI/CD Pipeline ===== Typická "trubka" (pipeline) obsahuje tyto kroky: ^ Fáze ^ Nástroje ^ Činnost ^ | **Source** | Git, GitHub, GitLab | Správa verzí zdrojového kódu. | | **Build** | Jenkins, GitLab CI, Maven | Kompilace kódu a vytvoření artefaktů (binárky, obrazy). | | **Test** | JUnit, Selenium, Pytest | Ověření kvality a bezpečnosti kódu. | | **Deploy** | Ansible, Terraform, ArgoCD | Nasazení do testovacího nebo produkčního prostředí. | ===== Výhody zavedení CI/CD ===== * **Rychlejší Time-to-Market:** Nové funkce se dostanou k zákazníkům v řádu minut či hodin, nikoliv měsíců. * **Méně chyb:** Automatické testy zachytí většinu chyb dříve, než se dostanou k uživateli. * **Snadnější Rollback:** Pokud se objeví problém, lze se okamžitě vrátit k předchozí funkční verzi (často jedním kliknutím). ===== Populární nástroje ===== * **GitLab CI/CD:** Integrované řešení přímo v platformě GitLab pomocí souboru ''.gitlab-ci.yml''. * **GitHub Actions:** Automatizace přímo v GitHubu využívající YAML konfigurace. * **Jenkins:** Tradiční, vysoce přizpůsobitelný open-source nástroj (vyžaduje vlastní správu). * **ArgoCD:** Moderní nástroj pro tzv. **GitOps**, který synchronizuje stav Kubernetes clusteru s Git repozitářem. > **Pravidlo palce:** Dobrá pipeline by měla být rychlá. Pokud testy trvají hodiny, vývojáři je přestanou sledovat a ztratí se výhoda rychlé zpětné vazby. [[it_encyklopedie:vyvoj_a_devops|Zpět na DevOps]]