Jak Nastavit CI/CD Pipeline S GitHub Actions: Difference between revisions

From IT-Core
Jump to navigation Jump to search
Created page with "Další užitečnou funkcí je sledování hodnot výrazů v reálném čase. V panelu Watch můžete přidat jakýkoliv výraz (například users.length nebo document.title) a vidět, jak se mění při průchodu kódem. To je efektivnější než vpisovat console.log do každé větve. Pozor si dejte na to, že u asynchronních funkcí se hodnoty zobrazují v okamžiku zastavení, takže pokud potřebujete vidět stav po dokončení nějaké operace, budete muset nasta..."
 
mNo edit summary
Line 1: Line 1:
Další užitečnou funkcí je sledování hodnot výrazů v reálném čase. V panelu Watch můžete přidat jakýkoliv výraz (například users.length nebo document.title) a vidět, jak se mění při průchodu kódem. To je efektivnější než vpisovat console.log do každé větve. Pozor si dejte na to, že u asynchronních funkcí se hodnoty zobrazují v okamžiku zastavení, takže pokud potřebujete vidět stav po dokončení nějaké operace, budete muset nastavit breakpoint až za ní.<br><br>Mezi časté chyby patří zapomenutí na podmínky spuštění. Pokud máte workflow s více joby, ale některý z nich je určen jen pro specifickou větev, použijte if podmínku. Jinak se nasazení spustí i při pushi do feature větve, což může vést k neočekávaným změnám. Další pastí je špatně nastavený caching. Bez cache se každý běh spouští od nuly, což prodlužuje dobu pipeline i u malých projektů. GitHub Actions poskytuje akce pro cache – stačí správně určit klíč podle hash souboru se závislostmi, a pak se instalace opakuje jen při změně závislostí.<br><br>Docker Compose je další krok, který výrazně zjednodušuje život. Místo dlouhých příkazů s mnoha parametry napíšete soubor docker-compose.yml, ve kterém definujete služby, sítě a svazky. Typickou chybou je definovat databázi a webovou aplikaci jako dva samostatné kontejnery, ale připojit je k sobě přes síť až po spuštění. Compose to zvládne automaticky, pokud obě služby umístíte do stejného souboru. Pozor ale na to, že každý kontejner má vlastní souborový systém. Jakmile v něm smažete data, jsou pryč. Proto vždy používejte takzvané svazky (volumes) pro data, která chcete uchovat, jinak o ně přijdete při každém restartu.<br><br>Co se týče praktických rad, vždy si ověřte, že obraz, který stahujete, je oficiální a aktualizovaný. Na veřejných registrech najdete tisíce obrazů, ale ne všechny jsou udržované. Spolehněte se na ty, které mají jasný popis a jsou spravované přímo dodavatelem technologie. Dále se vyhněte používání tagu latest pro produkci. I když se to zdá pohodlné, takový obraz se může ze dne na den změnit a vaše aplikace pak přestane fungovat z ničeho nic. Raději používejte konkrétní verze, i když to znamená občasné manuální aktualizace.<br><br>Když se řekne databáze, většina vývojářů si představí tabulky, řádky a SQL dotazy. Relační databáze jsou osvědčeným standardem, ale ne pro každý projekt jsou tou nejlepší volbou. NoSQL databáze nabízí jiný způsob ukládání dat, který může být v některých případech výrazně efektivnější. Než se ale pustíte do jejich implementace, je důležité pochopit, kdy dávají smysl a kdy naopak přinesou více problémů než užitku.<br><br>Nakonec, běžnou chybou je ignorování velikosti obrazů. Každý obraz, který použijete, zabírá místo na disku a při přenosu mezi registry spotřebovává čas a data. Snažte se používat minimalistické základy, jako jsou varianty s označením -alpine, a kombinovat příkazy pro instalaci balíčků do jednoho řádku tak, abyste minimalizovali počet vrstev. Tím dosáhnete menších obrazů a rychlejšího nasazení. Až toto zvládnete, můžete se pustit do pokročilejších témat, jako je orchestrace nebo bezpečnostní skenování. Ale pro začátek stačí, když budete rozumět tomu, co děláte, a budete vědět, kde hledat, když se něco pokazí.<br><br>Typickým případem, kdy zvolit NoSQL, je ukládání uživatelských profilů, produktů v e-shopu nebo obsahu pro analytické nástroje. Představte si, že máte v aplikaci položky, které mají různé atributy – jeden produkt má barvu a velikost, jiný jen hmotnost. V relační databázi byste museli vytvářet mnoho prázdných sloupců nebo propojovat pomocné tabulky. V dokumentové NoSQL databázi jednoduše uložíte každý produkt jako JSON dokument s libovolnými klíči.<br><br>Důležité je také myslet na to, že commit zprávy jsou určeny lidem, ne strojům. Vyhněte se příliš technickému žargonu, který by neznalý kolega nemusel pochopit. Současně ale nepopisujte každý řádek kódu – to je zbytečné. Zaměřte se na záměr a na dopad. Pokud se někdo za půl roku zeptá, proč je v kódu určité řešení, měl by dostat odpověď právě z vaší zprávy. Pište proto s ohledem na budoucí čtenáře, kterými budete s největší pravděpodobností i vy sami.<br><br>SQL injection není problém, který by se dal vyřešit jednou provždy. Vyžaduje průběžnou pozornost a kódování s ohledem na bezpečnost. Při každém novém dotazu se zeptejte, zda obsahuje uživatelský vstup, a pokud ano, použijte parametrizaci. Pravidelně aktualizujte databázové ovladače a frameworky, které často obsahují opravy známých zranitelností. Investice do prevence se mnohonásobně vrátí, protože náklady na řešení úniku dat jsou obvykle výrazně vyšší než čas strávený psaním bezpečného kódu.
Typické chyby, které vás stojí čas i výkon Největší výkonnostní pastí je zbytečné kopírování objektů při každé akci. Redux vyžaduje neměnnost, ale to neznamená, že musíte deep-clone celý stav. Pokud měníte pouze jednu vlastnost, použijte spread operátor na úrovni, kterou měníte. Vyhněte se také ukládání celých polí objektů do stavu, pokud je potřebujete jen přečíst. Místo toho si je nechte v paměti a do Reduxu ukládejte pouze identifikátory. Při mapování stavu do props vybírejte jen to, co komponenta potřebuje, a používejte selektory, které se zapojí do memoizace.<br><br>Automatizace nasazení je jednou z prvních věcí, které byste měli ve svém projektu zavést, pokud chcete ušetřit čas a předejít chybám. GitHub Actions nabízí integrované řešení přímo v repozitáři, takže nemusíte provozovat žádný externí server. Pro menší týmy i středně velké projekty je to obvykle nejpraktičtější volba, protože konfigurace je deklarativní a veškerá historie běhů zůstává přehledně na jednom místě.<br><br>Častou chybou bývá, že vývojáři spoléhají pouze na příkaz console.log a vypisují si desítky hlášek do konzole. To je sice rychlé, ale z dlouhodobého hlediska nepřehledné a často vám unikne kontext, ve kterém k chybě došlo. Místo toho si osvojte používání podmíněných breakpointů – kliknete pravým tlačítkem na číslo řádku, zvolíte Add conditional breakpoint a zadáte podmínku, která musí být splněna, aby se provádění zastavilo. Ušetříte tím spoustu času, pokud se chyba projevuje jen při určité hodnotě proměnné (například když je pole prázdné nebo když je uživatel přihlášený).<br><br>Prvním krokem k efektivnímu použití je správné členění store. Rozdělte si Redux store na menší slice, každý s vlastními reducery a akcemí. Například oddělte data uživatele, obsah košíku a stav notifikací. Tím zajistíte lepší čitelnost a snazší testování. Vyhněte se obřím reducertům, které řeší všechno. Místo toho použijte funkci combineReducers a každý slice nechte žít samostatně. Tím se vyhnete častému problému, kdy jedna chyba v jednom místě rozbije celou aplikaci.<br><br>Další užitečnou funkcí je sledování hodnot výrazů v reálném čase. V panelu Watch můžete přidat jakýkoliv výraz (například users.length nebo document.title) a vidět, jak se mění při průchodu kódem. To je efektivnější než vpisovat console.log do každé větve. Pozor si dejte na to, že u asynchronních funkcí se hodnoty zobrazují v okamžiku zastavení, takže pokud potřebujete vidět stav po dokončení nějaké operace, budete muset nastavit breakpoint až za ní.<br><br>Při testování chybových stavů postupujte stejně, ale mock funkce necháte vyhodit výjimku. Ověřte, že je dispatchována akce pro chybu, a že stav aplikace zůstává konzistentní. Častou chybou je testovat pouze šťastnou cestu. Přitom ošetření chyb je v Reduxu kritické, protože uživatel musí vidět, že něco selhalo, a aplikace se nesmí zhroutit. Dále si dejte pozor na to, abyste nemockovali příliš mnoho. Pokud mockujete i samotný dispatch, ztrácíte kontrolu nad tím, co testujete.<br><br>Při výběru IDE pro Python nejde o to, které je nejlepší, ale které nejlépe sedne vašemu stylu práce. Začněte tím, že si ujasníte, co od nástroje skutečně potřebujete. Pokud píšete skripty pro automatizaci nebo analýzu dat, často stačí lehký editor s integrovaným terminálem. Pokud vyvíjíte větší aplikace s frameworky, oceníte pokročilé ladění, správu virtuálních prostředí a integraci s verzovacími systémy. Nenechte se zlákat množstvím funkcí – klíčové je, aby nástroj zrychloval vaši práci, ne ji komplikoval.<br><br>Nakonec se rozhodněte podle toho, co jste si ověřili v praxi. Ideální je, když si vyberete jeden hlavní nástroj a jeden záložní pro rychlé úpravy. Vyhnete se tak situaci, kdy budete muset kvůli jednomu skriptu otevírat těžké prostředí. Pamatujte, že žádné IDE nenahradí znalost příkazů a syntaxe jazyka – je to jen nástroj, který vám má usnadnit práci, ne za vás myslet.<br><br>Refaktorování kódu je nedílnou součástí vývoje, ale často ho vnímáme jako zdlouhavou a nudnou činnost. Mnoho vývojářů stále ručně přejmenovává proměnné, přesouvá metody nebo mění signatury funkcí, přitom moderní vývojová prostředí nabízejí celou řadu vestavěných nástrojů, které tyto operace výrazně urychlí a hlavně eliminují chyby vzniklé při ručním zásahu. Stačí se naučit pár klávesových zkratek a pochopit, co všechno IDE umí.<br><br>Pozor také na to, jak IDE spravuje virtuální prostředí. Dobrý nástroj by měl umožnit vytvořit nové prostředí jedním kliknutím a automaticky ho aktivovat při spuštění projektu. Pokud tuto funkci nemá, snadno se stane, že balíčky instalujete do globálního prostředí a po čase narazíte na konflikty verzí. To je jeden z nejčastějších zdrojů frustrace, přitom se mu dá snadno předejít právě správným výběrem.

Revision as of 02:28, 22 August 2026

Typické chyby, které vás stojí čas i výkon Největší výkonnostní pastí je zbytečné kopírování objektů při každé akci. Redux vyžaduje neměnnost, ale to neznamená, že musíte deep-clone celý stav. Pokud měníte pouze jednu vlastnost, použijte spread operátor na úrovni, kterou měníte. Vyhněte se také ukládání celých polí objektů do stavu, pokud je potřebujete jen přečíst. Místo toho si je nechte v paměti a do Reduxu ukládejte pouze identifikátory. Při mapování stavu do props vybírejte jen to, co komponenta potřebuje, a používejte selektory, které se zapojí do memoizace.

Automatizace nasazení je jednou z prvních věcí, které byste měli ve svém projektu zavést, pokud chcete ušetřit čas a předejít chybám. GitHub Actions nabízí integrované řešení přímo v repozitáři, takže nemusíte provozovat žádný externí server. Pro menší týmy i středně velké projekty je to obvykle nejpraktičtější volba, protože konfigurace je deklarativní a veškerá historie běhů zůstává přehledně na jednom místě.

Častou chybou bývá, že vývojáři spoléhají pouze na příkaz console.log a vypisují si desítky hlášek do konzole. To je sice rychlé, ale z dlouhodobého hlediska nepřehledné a často vám unikne kontext, ve kterém k chybě došlo. Místo toho si osvojte používání podmíněných breakpointů – kliknete pravým tlačítkem na číslo řádku, zvolíte Add conditional breakpoint a zadáte podmínku, která musí být splněna, aby se provádění zastavilo. Ušetříte tím spoustu času, pokud se chyba projevuje jen při určité hodnotě proměnné (například když je pole prázdné nebo když je uživatel přihlášený).

Prvním krokem k efektivnímu použití je správné členění store. Rozdělte si Redux store na menší slice, každý s vlastními reducery a akcemí. Například oddělte data uživatele, obsah košíku a stav notifikací. Tím zajistíte lepší čitelnost a snazší testování. Vyhněte se obřím reducertům, které řeší všechno. Místo toho použijte funkci combineReducers a každý slice nechte žít samostatně. Tím se vyhnete častému problému, kdy jedna chyba v jednom místě rozbije celou aplikaci.

Další užitečnou funkcí je sledování hodnot výrazů v reálném čase. V panelu Watch můžete přidat jakýkoliv výraz (například users.length nebo document.title) a vidět, jak se mění při průchodu kódem. To je efektivnější než vpisovat console.log do každé větve. Pozor si dejte na to, že u asynchronních funkcí se hodnoty zobrazují v okamžiku zastavení, takže pokud potřebujete vidět stav po dokončení nějaké operace, budete muset nastavit breakpoint až za ní.

Při testování chybových stavů postupujte stejně, ale mock funkce necháte vyhodit výjimku. Ověřte, že je dispatchována akce pro chybu, a že stav aplikace zůstává konzistentní. Častou chybou je testovat pouze šťastnou cestu. Přitom ošetření chyb je v Reduxu kritické, protože uživatel musí vidět, že něco selhalo, a aplikace se nesmí zhroutit. Dále si dejte pozor na to, abyste nemockovali příliš mnoho. Pokud mockujete i samotný dispatch, ztrácíte kontrolu nad tím, co testujete.

Při výběru IDE pro Python nejde o to, které je nejlepší, ale které nejlépe sedne vašemu stylu práce. Začněte tím, že si ujasníte, co od nástroje skutečně potřebujete. Pokud píšete skripty pro automatizaci nebo analýzu dat, často stačí lehký editor s integrovaným terminálem. Pokud vyvíjíte větší aplikace s frameworky, oceníte pokročilé ladění, správu virtuálních prostředí a integraci s verzovacími systémy. Nenechte se zlákat množstvím funkcí – klíčové je, aby nástroj zrychloval vaši práci, ne ji komplikoval.

Nakonec se rozhodněte podle toho, co jste si ověřili v praxi. Ideální je, když si vyberete jeden hlavní nástroj a jeden záložní pro rychlé úpravy. Vyhnete se tak situaci, kdy budete muset kvůli jednomu skriptu otevírat těžké prostředí. Pamatujte, že žádné IDE nenahradí znalost příkazů a syntaxe jazyka – je to jen nástroj, který vám má usnadnit práci, ne za vás myslet.

Refaktorování kódu je nedílnou součástí vývoje, ale často ho vnímáme jako zdlouhavou a nudnou činnost. Mnoho vývojářů stále ručně přejmenovává proměnné, přesouvá metody nebo mění signatury funkcí, přitom moderní vývojová prostředí nabízejí celou řadu vestavěných nástrojů, které tyto operace výrazně urychlí a hlavně eliminují chyby vzniklé při ručním zásahu. Stačí se naučit pár klávesových zkratek a pochopit, co všechno IDE umí.

Pozor také na to, jak IDE spravuje virtuální prostředí. Dobrý nástroj by měl umožnit vytvořit nové prostředí jedním kliknutím a automaticky ho aktivovat při spuštění projektu. Pokud tuto funkci nemá, snadno se stane, že balíčky instalujete do globálního prostředí a po čase narazíte na konflikty verzí. To je jeden z nejčastějších zdrojů frustrace, přitom se mu dá snadno předejít právě správným výběrem.