DevOps

DVOP3 WBB

Bc. Matěj Cajthaml ©

Smíchovská střední průmyslová
škola a gymnázium

icon

DevOps

DevOps

  • automatizace a definice procesů
  • spolupráce vývojářů, testerů a manažerů
  • proces celého vývoje aplikace (neustálý cyklus)

CI/CD

  • CI - Continuous Integration
    • řešíme konflikty, chyby, testování
    • sestavení aplikace
  • CD - Continuous Deployment
    • nasazení aplikace

Platformy na CI/CD

Platformy na CI/CD

  • Github Actions
  • GitLab CI
  • Jenkins
  • Buddy
  • a další

Fungování platforem

  • definujeme různé akce, jejich napojení a spouštění
  • např. při pushnutí kódu na GitHub se spustí tato akce
  • akci je přiřazen tzv. runner (buď v cloudu nebo náš) a ten ji provede

Github Actions

  • existuje v rámci GitHubu, zdarma ale omezené
  • definice akcí v souboru .github/workflows/*.yml
  • akce se skládají z jednotlivých kroků
  • existují různé předpřipravené akce (např. checkout), i komunitou vytvořené
  • po zapojení můžeme sledovat

Ukázka

FTP nahrání

Práce

Pomocí GitHub si založte repozitář, ve kterém když pushnete kód, tak se vám nahraje na FTP server hostingu.

Pokročilé: HTML soubory (např. články) vygenerujte dle dalšího souboru pomocí vlastního skriptu, který se při deployi spustí

Pokročilé actions

Práce

Zjistěte, jak lze akci nastavit závislost na jiné akci. Do minulého příkladu přidejte, aby se FTP nahrání spustilo až po jiné úspěšné akci (skriptu, který např. něco kontroluje).

Pokročilé actions ale zase jinak

Práce

Zjistěte, jak lze nastavit pokročilé podmínky pro spuštění akce. Lze spustit akci jen kliknutím na tlačítko? Co spouštění akce jen pro pull requesty?

Virtualizace

Virtualizace

  • cílem je oddělení HW a SW
  • příklady: VirtualBox, VMware, Hyper-V
  • výhody: izolace, bezpečnost, snadná migrace
  • nevýhody: výkon, náročnost na HW

Proč není vhodné mít veškerý SW na jednom systému (OS, platformě, ...)?

Kontejnarizace

Kontejnarizace

  • cílem je oddělení aplikací s možností rychlého nasazení
  • sdílené jádro OS
  • příklady: Docker, Podman, LXC
  • výhody: rychlost, izolace, snadná migrace
  • nevýhody: výkon, náročnost na HW

Jak to funguje

  • izolace na bázi jmenných prostorů
    • omezíme kdo co vidí a může přistupovat
  • potřebujeme:
    • docker daemon
    • docker client
    • docker image

Z jmených prostorů se čistě teoreticky nemělo dát uniknout. Ale děje se to.

Docker image

  • obsahuje vše potřebné pro běh aplikace
  • určujeme, co tedy OS má mít nainstalované, jak se zapne, atd.
  • je založen na vrstvách — ulehčení sdílení
  • je možné vytvářet vlastní, sdílet je a podobně
  • docker image se staví z tzv. Dockerfile

Ukázka dockerfile

Sestavení a spuštění

  • sestavení: docker build -t node-app .
  • spuštění: docker run -d -p 3333:3000 node-app

  • aplikace poběží na portu 3333, v appce spouštíme na 3000
  • oddělujeme tím zcela porty kontejneru a hosta

Co dělá kontejner?

  • po zapnutí žije do té doby, než je zastaven
  • při spadnutí se (dle nastavení) restartuje
  • pokud nic nenastavíme, data se po restartu ztratí
  • pokud chceme data uchovat, musíme určit co se má uložit a namapovat
  • tzv. volume

Výhody při správně nastaveném kontejneru

  • snadná migrace
  • snadné škálování
  • snadné nasazení
  • snadná aktualizace
  • snadná izolace a dobrá bezpečnost

Docker-compose

Docker-compose

  • jeden kontejner obsahuje jednu službu
  • co když je služba závislá na jiné službě?
  • např. databáze, cache, jiné API
  • řešení: docker-compose - možnost definovat více kontejnerů a vzájemné závislosti

Ukázka docker-compose

Příkazy

  • spuštění: docker-compose up -d
  • zastavení: docker-compose down

Tvorba docker-compose

Práce

Vytvořte si pro nějakou netriviální službu s alespoň 2 kontejnery docker-compose.

Jednoduché nasazení

  • při změně stačí jen:
    • sestavit nový image
    • stáhnout image na serveru
    • vypnout
    • aktualizovat compose
    • spustit

Děkuji za pozornost!

  • matej.cajthaml@ssps.cz
  • https://ssps.cajthaml.eu/