Apache je jedním z nejpopulárnějších open-source webových serverů. Instalace Apache na server může být provedena různými způsoby, přičemž každý nástroj pro správu konfigurace má své specifické způsoby deklarace a implementace. V této části se podíváme na to, jak každý z těchto nástrojů přistupuje k instalaci Apache, abychom porozuměli základním principům infrastruktury jako kódu a správě konfigurace.
Puppet
Puppet používá skripty nazývané manifesty, které jsou psány v jazyce Ruby a ukládány s příponou .pp. Manifesty jsou soubory deklarací, které mohou být seskupeny do modulů, což usnadňuje organizaci a správu kódu. K instalaci Apache pomocí Puppetu může vypadat následující příklad:
Puppet používá architekturu „master a agent“, kde hlavní server (master) vydává instrukce agentům na jednotlivých serverech. Tento způsob umožňuje centrální správu a automatizaci konfigurací na více serverech.
Chef
Chef používá skripty nazývané recepty, které jsou rovněž psány v Ruby a ukládány s příponou .rb. Recepty mohou být seskupeny do cookbooks (kuchařek), což je podobné modulům v Puppet. Kód pro instalaci Apache v Chef by mohl vypadat takto:
Chef může běžet v režimu klient-server nebo v samostatném režimu, známém jako chef-solo, který komunikuje s remote servery pomocí SSH.
Ansible
Ansible využívá skripty nazývané playbooky, které jsou psány v jazyce YAML a ukládány s příponou .yml. Na rozdíl od Puppet a Chef, Ansible nemá koncept modulů, ale používá knihovnu modulů pro vykonávání běžných příkazů. Kód pro instalaci Apache pomocí Ansible by mohl vypadat následovně:
Ansible je známý svou rychlostí, protože nevyžaduje instalaci žádných speciálních balíčků na každý nový server, místo toho využívá SSH k připojení na vzdálené servery a vykonávání konfigurací.
SaltStack
SaltStack je nástroj založený na Pythonu, který používá různé typy modulů pro správu konfigurace. Moduly jsou uspořádány do specifických kategorií, jako jsou moduly pro vykonávání příkazů, moduly pro správu stavů nebo moduly pro běh systémových úloh. Skript pro instalaci Apache pomocí SaltStack by mohl vypadat takto:
SaltStack běží na základě vztahu „master a minion“, což je jeho terminologie pro klient-server architekturu. Tento nástroj je zvláštní tím, že uživatel může zvolit jazyk, ve kterém bude modul napsán, přičemž nejčastěji je použitý jazyk YAML.
Rozdíly v přístupu k automatizaci
Puppet, Chef, Ansible a SaltStack se liší v několika ohledech. Každý z těchto nástrojů poskytuje uživatelům specifický způsob organizace a správy kódu pro instalaci a konfiguraci aplikací. Puppet a Chef využívají deklarativní jazyky Ruby a mají podobné koncepce, jako jsou moduly a recepty. Ansible se od ostatních nástrojů liší jednodušší strukturou a YAML syntaxi, což činí jeho implementaci přímočarější. SaltStack se zaměřuje na flexibilitu ve volbě jazyků a modulů pro specifické úkoly.
Kontajnery
V poslední době se stále více používá virtualizace na úrovni operačního systému, která umožňuje běh více izolovaných instancí v rámci jednoho systému. Tento způsob virtualizace je známý jako kontejnery a je široce používán pro snadnou a efektivní správu aplikací. Kontejnery, například s využitím nástroje Docker, umožňují běh aplikace s jejími závislostmi bez potřeby plné virtuální mašiny. Na rozdíl od tradičních virtuálních strojů, kde každá instance běží s kompletním operačním systémem, kontejnery sdílejí jádro operačního systému a jsou mnohem lehčí a rychlejší.
Použití kontejnerů umožňuje efektivnější nasazení aplikací na serverech, což výrazně zjednodušuje a urychluje procesy při testování, nasazování a škálování aplikací. Kontajnery jsou ideální pro mikroservisní architektury, kde každý kontejner může běžet konkrétní aplikaci nebo službu a být snadno spravován pomocí nástrojů jako Docker či Kubernetes.
Pochopení těchto nástrojů a konceptů je nezbytné pro vývojáře a administrátory, kteří se zabývají automatizací správy konfigurací, protože každý z těchto nástrojů má svoje výhody a nevýhody v závislosti na konkrétních požadavcích a prostředí.
Jaké jsou rozdíly mezi Continuous Delivery a DevOps?
V roce 2009, ve stejném roce, kdy se začal rozvíjet koncept DevOps, Timothy Fitz poprvé použil termín "continuous deployment" (kontinuální nasazení). Tento pojem definoval jako jednoduchý proces: "Jen odesílejte svůj kód zákazníkům co nejčastěji." Přesně o rok později byl publikován knihou nazvanou "Continuous Delivery", kterou napsali Jez Humble a David Farley. Tento pojem získal širší pozornost a v praxi znamenal něco trochu jiného: "Implementace continuous delivery znamená zajistit, že váš software je vždy připravený k nasazení po celou dobu jeho životního cyklu, že jakákoliv verze může být potenciálně uvolněna uživatelům na jedno kliknutí díky plně automatizovanému procesu během několika sekund nebo minut."
Na rozdíl od continuous deployment, který se zaměřuje na co nejrychlejší uvolnění nových verzí kódu uživatelům, continuous delivery pokrývá širší oblast a soustředí se na zajištění, že software je stále v nasaditelném stavu. Tato filozofie zahrnuje praktiky kódování, správu verzí kódu a metodologie jako je například feature flagging, která umožňuje nasadit kód do produkce, aniž by byl ihned dostupný pro uživatele. Cílem continuous delivery je zajistit, že jakákoliv verze kódu je připravena pro produkci, čímž se eliminuje fáze testování, integrace a hardeningu, které tradičně následovaly po dokončení vývoje. To znamená, že celý proces od kódu po nasazení je zautomatizován, což umožňuje flexibilní a rychlé dodání nových funkcionalit.
Continuous delivery může být implementováno ve vývojovém týmu bez nutnosti změn v operačním týmu, ale to může v konečném důsledku vyvolat napětí, pokud týmy pracují v odlišných rytmech. Zatímco continuous delivery zajišťuje efektivní způsob vydávání kódu, DevOps je kulturní změna, která řeší napětí mezi týmy vývoje a operací. DevOps nejen zrychluje proces nasazování nových verzí, ale také usnadňuje spolupráci mezi těmito dvěma oblastmi, což vede k lepší efektivitě a spolehlivosti celého systému.
V rámci širšího přístupu DevOps se tak snažíme spojit týmy, které jsou zodpovědné za vývoj a provoz. DevOps a agilní metodologie jsou si blízké, ale není nezbytné implementovat agilní procesy, aby bylo možné použít principy DevOps. I v neagilním prostředí může DevOps zvýšit spolehlivost nasazení, snížit dobu výpadků a zlepšit frekvenci vydání. DevOps není o neustálém vydávání nových verzí každou minutu, ale spíše o dosažení vyšší kvality a rychlosti vydávání verzí, například při pravidelných měsíčních nebo ročních nasazeních.
Co se týče testování v rámci DevOps, existuje často nedostatečná zmínka o tom, jakou roli testování v tomto přístupu hraje. Většina odborné literatury o DevOps se zaměřuje na vývojáře a operace, což může testerům způsobovat určitou nervozitu ohledně jejich role. Důležité je ale pochopit, že testování je napříč celým vývojovým procesem a mělo by být součástí každé fáze vývoje softwaru. Jak uvádí Dan Ashby, testování by mělo být součástí každého bodu modelu DevOps, ať už se jedná o automatické testy, testování kódu při nasazení nebo testování v průběhu vývoje.
V souvislosti s DevOps se testování stává součástí širší spolupráce napříč týmy. To znamená, že testování je nezbytnou součástí práce každého člena týmu a mělo by probíhat kontinuálně od začátku projektu. Jez Humble a Dave Farley ve své knize o continuous delivery uvádějí, že testování je činností, která by měla být neustále přítomná, a je součástí širší spolupráce mezi vývojovým týmem, testerem a operacemi. Tester musí chápat, že jeho role se mění a vyžaduje větší míru spolupráce a komunikace s ostatními členy týmu, aby bylo zajištěno, že kód je vždy připravený k nasazení.
Důležitou součástí přechodu na DevOps je správné nastavení testovací strategie. Pokud chcete začít pracovat s DevOps, je důležité zhodnotit současný přístup k testování ve vaší organizaci a zjistit, jak můžete spolupracovat napříč různými týmy a jak přispět ke zlepšení celkové efektivity nasazování kódu. Před implementací DevOps by bylo dobré provést retrospektivu testovací strategie, abyste se ujistili, že celý tým má jednotnou představu o tom, jakým způsobem budou testy prováděny a jaké konkrétní cíle chcete dosáhnout.
Testování v rámci DevOps není samostatnou úlohou, ale součástí širšího procesu, který zahrnuje všechny aspekty vývoje a nasazení kódu. Úspěšné přijetí DevOps přináší výrazné zlepšení v kvalitě softwaru, rychlosti jeho nasazení a efektivitě spolupráce mezi vývojáři a operačními týmy.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский