V oblasti softwarového vývoje hrají klíčovou roli kanály CI/CD (Continuous Integration/Continuous Delivery), které automatizují proces sestavování a nasazování kódu do různých prostředí.
Nicméně, samotné vytvoření a správa těchto kanálů může být náročná. Zde vstupuje do hry přístup Pipeline as Code, který spočívá v definování celého CI/CD kanálu pomocí kódu. Namísto spoléhání se na webová rozhraní a nástroje s funkcí „táhni a pusť“, konfigurační soubory určují, jak bude váš aplikační kód sestaven, testován a nasazen.
Než se však podrobně podíváme na Pipeline as Code a jak si vytvořit vlastní kanál, je důležité si ujasnit, co vlastně kanál ve vývoji softwaru představuje.
Co je to kanál ve vývoji softwaru?
Kanál ve vývoji softwaru je automatizovaná posloupnost kroků, které zpracovávají změny ve vašem kódu, spouští specifické procesy a nasazují ho do určeného prostředí. Pro lepší pochopení si to demonstrujme na příkladu.
Představte si, že máte tři mikroslužby a do jedné z nich jste přidali nové funkce. Nyní chcete spustit jednotkové testy na úrovni kódu. Po jejich úspěšném dokončení chcete zkontrolovat formátování kódu. Následně chcete kód sestavit a poté ho nasadit do dvou různých prostředí s více servery v každém. Nakonec byste rádi provedli integrační testy, abyste se ujistili, že vaše změny jsou v souladu s ostatními službami.
Všechny výše uvedené kroky lze provést manuálně. Avšak to by bylo časově náročné a náchylné k chybám. Existuje tedy způsob, jak tyto kroky automatizovat? Ano! Můžete vytvořit kanál a definovat v něm všechny tyto kroky. Poté, kdykoli provedete změny v kódu, stačí spustit kanál a nemusíte se starat o manuální procesy.
Výhody Pipeline jako kódu
Pokud používáte nástroje s rozhraním typu „táhni a pusť“, může být obtížné sledovat změny, udržovat konzistenci nebo podporovat spolupráci. Pipeline as Code představuje lepší způsob, jak definovat proces vývoje softwaru.
Pomáhá udržovat konzistentní procesy. Díky automatizaci získáváte opakovatelnost a možnost použití stejného kanálu pro různé systémy. Stejně jako u aplikačního kódu, i kód definující kanál podporuje spolupráci.
#1. Konzistence
Definování kanálu v textovém formátu zajišťuje, že nedojde k nečekaným odchylkám. Zavedením standardizovaného postupu pro veškeré sestavování a nasazování aplikací dosáhnete konzistence a snížíte riziko nečekaných problémů.
S konzistencí přichází i možnost implementace kontrol shody a zabezpečení. Konzistentní kanál vám umožní definovat bezpečnostní prověrky a kontroly zranitelnosti, čímž minimalizujete riziko průniku bezpečnostních hrozeb.
#2. Opakovatelnost
Vytvořte si kanál a nastavte automatizaci. Kromě konzistence, váš automatizovaný kanál zajistí, že veškerý kód aplikace projde stejnými fázemi a kontrolami.
Váš kód projde stejným procesem sestavení a nasazení pokaždé, když spustíte kanál. Tím je zajištěna opakovatelnost ve všech vašich cyklech.
#3. Spolupráce
Kód slouží jako médium pro tvorbu kanálu, čímž podporuje spolupráci. Různí členové týmu mohou přispívat ke stejnému kódu, stejně jako je tomu u kódu aplikace.
Pipeline as Code také umožňuje správu verzí a kontrolu kódu. To zajišťuje dodržování osvědčených postupů a včasné odhalení potenciálních problémů.
Nyní se podíváme na to, jak vytvořit vlastní kanál pomocí Pipeline jako kódu.
Pipeline jako kód v Jenkins
Pokud jde o systémy kontinuální integrace a kontinuálního zavádění (CI/CD), Jenkins je vedoucí open-source automatizační server. S Jenkins můžete snadno integrovat změny kódu, automatizovat testování, sestavovat a nasazovat software spolehlivě a efektivně.
Ať už se snažíte proniknout do světa automatizačních kanálů, nebo budujete složité podnikové systémy, Jenkins dokáže vyhovět specifickým potřebám vašeho projektu. Jeho bohatá nabídka pluginů a aktivní komunita vám pomohou maximalizovat efektivitu automatizace.
V Jenkins, je kanál definován jako sada různých pluginů uspořádaných v určitém pořadí, které tvoří váš CI/CD systém. Pro jednoduché i složité případy použití můžete svůj kanál definovat pomocí kódu s využitím doménově specifického jazyka (DSL) pro kanály. DSL je postaven na Apache Groovy.
Základem Pipeline jako kódu v Jenkins je Jenkinsfile – textový soubor, který obsahuje kód popisující jednotlivé fáze a akce. Podívejme se, jak vytvořit kanál jako kód pomocí Jenkinsfile.
Jak vytvořit kanál jako kód?
Po instalaci a spuštění Jenkins se přihlaste do webového rozhraní. Poté se ocitnete na hlavní stránce Dashboard. Zde začnete s vytvářením nového kanálu.
- V levém menu naleznete tlačítko Nová položka.
- Kliknutím na něj se dostanete na další stránku.
- Na nové stránce budete vyzváni k vytvoření nové položky.
- Zadejte název položky do pole Název položky. Tento krok je povinný.
- Mějte na paměti, že se vytvoří adresář se stejným názvem, proto je vhodné se vyhnout mezerám, které by mohly způsobit nežádoucí komplikace.
- Poté vyberte možnost Pipeline a klikněte na tlačítko OK v dolní části obrazovky.
- Zobrazí se okno Konfigurace.
- Klikněte na možnost Pipeline v levém menu nebo přejděte dolů do sekce Pipeline.
Začneme s jednoduchým kanálem, který můžete konfigurovat přímo z uživatelského rozhraní.
Vytvořte Pipeline jako kód přímo v Jenkins
V sekci Pipeline můžete začít s tvorbou svého prvního Pipeline jako kódu.
Z rozbalovacího menu Definice vyberte možnost Pipeline script. Pod tímto menu se objeví okno Skript, kde můžete napsat svůj kanál. Jenkins bude skript zde uložený.
Jenkins nabízí dvě možnosti syntaxe – deklarativní a skriptovanou. Deklarativní syntaxe je jednoduchá a vhodná pro základní kanály, zatímco skriptovaná syntaxe je určena pro pokročilé uživatele a komplexní pracovní postupy.
Pro vytvoření jednoduchých fází použijte deklarativní syntaxi a vytvořte tři fáze – sestavení, testování a nasazení kódu pomocí následujícího fragmentu kódu:
pipeline { agent any stages { stage('Build Code') { steps { echo 'This is the step for build...' } } stage('Test Code') { steps { echo 'This is the step to test...' } } stage('Deploy Code') { steps { echo 'This step deploys the code...' } } } }
Můžete také použít skriptovanou syntaxi, jak je uvedeno níže:
node { stage('Build Code') { echo 'This is the step for build...' } stage('Test Code') { echo 'This is the step to test...' } stage('Deploy Code') { echo 'This step deploys the code...' } }
Klikněte na Uložit. Poté klikněte na tlačítko Sestavit nyní v levém panelu. Tím se spustí váš nově vytvořený kanál.
Po dokončení kanálu, si můžete výsledek prohlédnout v Historii sestavení. Pokud je to vaše první spuštění, klikněte na číslo sestavení #1. Poté klikněte na Console Output v levém panelu. V každé fázi naleznete tři echo příkazy z vašeho kanálu.
Vytvořte kanál jako kód pomocí externího souboru
Udržovat kanály přímo v Jenkins se stává náročné s narůstající složitostí. Proto je vhodné použít externí soubor.
Před vytvořením kanálu v Jenkins budete potřebovat externí úložiště a systém správy verzí. Použijeme úložiště Git na GitHubu. Zde si vytvoříte soubor Jenkinsfile.
- Přejděte na svůj GitHub profil. Pokud nemáte účet, můžete si ho zdarma vytvořit.
- Vytvořte nové úložiště. Pojmenujte ho například customJenkins.
- Ujistěte se, že máte na svém místním počítači nainstalovaný Git.
- Vytvořte adresář ve zvolené složce.
- Přejděte do tohoto adresáře a otevřete terminál.
- Inicializujte prázdné úložiště pomocí příkazu `git init`.
- Vytvořte nový soubor pro Jenkinsfile. Nazveme ho customJenkinsfile.
- Do tohoto souboru napište definici kanálu. Například:
pipeline { agent any stages { stage('Build Code') { steps { echo 'This is the step for build defined in custom file...' } } stage('Test Code') { steps { echo 'This is the step to test defined in custom file...' } } stage('Deploy Code') { steps { echo 'This step defined in custom file deploys the code...' } } } }
- Přidejte nově vytvořený soubor do Git pomocí příkazu `git add –all` v terminálu.
- Uložte soubor do Git pomocí příkazu `git commit -m „Created custom jenkinsfile“`.
- Propojte místní úložiště se vzdáleným pomocí `git remote add origin [email protected]:
/customJenkins.git`. - Nakonec odešlete soubor do vzdáleného úložiště na GitHubu pomocí `git push –set-upstream origin master`.
Nyní máte vzdálené úložiště na GitHubu, které obsahuje soubor customJenkinsfile. Nyní nakonfigurujeme Jenkins pro jeho použití.
Nakonfigurujte Jenkins tak, aby používal Jenkinsfile z GitHubu
- Otevřete řídicí panel Jenkins.
- Vytvořte nový kanál, nebo klikněte na Konfigurovat z existujícího kanálu.
- Přejděte dolů do části Potrubí.
- Z rozevíracího menu Definice vyberte možnost Pipeline script from SCM.
- V sekci SCM vyberte Git.
- Zadejte odkaz na vaše úložiště na GitHubu do pole URL úložiště.
- V části Branches to build nastavte Specifikátor větve na */master.
- Přejděte níže do části Cesta ke skriptu. Zde zadejte název souboru Jenkinsfile, tj. customJenkinsfile. Klikněte na Uložit.
Nyní spusťte kanál. Jenkins nejprve načte váš kód ze vzdáleného úložiště. Poté sestaví kanál pomocí souboru customJenkinsfile a provede všechny fáze.
Úspěšně jste si vytvořili vlastní kanál pro vývoj softwaru pomocí Pipeline jako kódu. Kromě toho máte nyní správu verzí pro svůj skript kanálu. Veškeré změny v kódu kanálu jsou sledovány v Gitu pomocí jednotlivých commitů. Nyní se podíváme na doporučené postupy.
Doporučené postupy pro psaní efektivního Pipeline jako kódu
Podívejme se na doporučené postupy pro psaní kanálu jako kódu.
- Udržujte kanál přehledný a vyhněte se psaní příliš složitých podmínek.
- Pokud v kanálu provádíte příliš mnoho příkazů, rozdělte je do samostatných kroků.
- Používejte externí soubory se správou verzí pro skripty kanálu.
- Využívejte funkce programovacího jazyka, například Groovy, pro integraci různých kroků.
- Vyhněte se volání na `Jenkins.getInstance` nebo jeho přístupových prvků kvůli bezpečnosti a výkonu.
- Nepřepisujte vestavěné příkazy, jako jsou `sh` a `timeout`.
- Pro složité úlohy s vysokými nároky na CPU vytvářejte externí nástroje nebo skripty a integrujte je do kanálu.
- Využijte širokou škálu dostupných pluginů pro Jenkins, které vám pomohou s vaším případem použití.
- Ujistěte se, že jste implementovali zpracování výjimek a chyb.
- Nevytvářejte kanál jako kód s příliš velkým množstvím obchodní logiky uvnitř.
- Pokud je to možné, používejte parametrizované argumenty pro opakované použití kanálu.
Pipeline jako kód: Jednoduchý přístup ke složitým procesům
Pipeline as Code zjednodušuje automatizaci vašeho CI/CD kanálu tím, že celý proces reprezentuje jako kód. Zatímco CI/CD kanály automatizují sestavení, testování a nasazování změn kódu, využití Pipeline as Code to posouvá ještě dál. Umožňuje definovat proces v textové podobě namísto spoléhání se na grafická rozhraní.
S Pipeline as Code zajistíte, že každý krok vašeho pracovního postupu proběhne ve správném pořadí. Snížíte tak riziko nečekaných problémů. Navíc získáte řadu výhod – včetně konzistence, opakovatelnosti a podpory spolupráce.
Díky tomuto návodu nyní víte, jak si vytvořit vlastní kanál pomocí Jenkins, široce používaného nástroje pro CI/CD. Jenkins nabízí robustní a flexibilní platformu pro implementaci Pipeline jako kódu prostřednictvím svého Jenkinsfile. Dodržujte doporučené postupy a vytvářejte pracovní postupy, které budou vyhovovat vašim specifickým potřebám.
Pokud se chcete dozvědět více o Jenkins, můžete si prohlédnout návod na tvorbu vlastního Jenkins kanálu.