Jak můžu pomocí GitHub Actions vytvářet pracovní postupy pro CI?

Dokončeno

Vzpomeňte si, že vaším cílem je automatizovat proces sestavení a publikování kódu, aby se funkce aktualizovaly pokaždé, když vývojář přidá změnu do základu kódu.

Pokud chcete tento proces implementovat, naučíte se:

  • Vytvořte pracovní postup ze šablony.
  • Vyhněte se duplikaci pomocí opakovaně použitelných pracovních postupů.
  • Testujte proti více cílům.
  • Oddělte úlohy sestavení a testování.

Vytvoření pracovního postupu ze šablony

Pokud chcete vytvořit pracovní postup, je běžné začít pomocí šablony. Šablona obsahuje běžné úlohy a kroky předem nakonfigurované pro konkrétní typ automatizace, kterou implementujete. Pokud neznáte pracovní postupy, úlohy a kroky, podívejte se na modul Automatizace úloh vývoje pomocí gitHub Actions modulu.

Na hlavní stránce úložiště GitHub vyberte Akce a pak vyberte Nový pracovní postup.

Na stránce Zvolit pracovní postup si můžete vybrat z mnoha typů šablon. Jedním z příkladů je šablona Node.js. Šablona Node.js nainstaluje Node.js a všechny závislosti, sestaví zdrojový kód a spustí testy pro různé verze Node.js. Dalším příkladem je šablona balíčku Pythonu , která nainstaluje Python a jeho závislosti, a pak spustí testy, včetně lintu, ve více verzích Pythonu.

Pokud chcete začít se šablonou pracovního postupu Node.js, zadejte do vyhledávacího pole Node.js.

Snímek obrazovky znázorňující kartu GitHub Actions se zvýrazněným vyhledávacím polem a textem Node.js

Ve výsledcích hledání v podokně Node.js vyberte Konfigurovat.

Snímek obrazovky znázorňující kartu GitHub Actions se zvýrazněným podoknem Node.js a vybraným tlačítkem Konfigurovat

Soubor node.js.yml pro váš projekt se vytvoří ze šablony:

name: Node.js CI

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [14.x, 16.x, 18.x]

    steps:
    - uses: actions/checkout@v3
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'
    - run: npm ci
    - run: npm run build --if-present
    - run: npm test

Jak je vidět v atributu on, tento ukázkový pracovní postup se spustí v reakci na odeslání změn do úložiště nebo při vytvoření pull requestu proti hlavní větvi.

Tento pracovní postup spouští jednu úlohu označenou atributem job .

Atribut runs-on určuje, že pro operační systém se pracovní postup spouští na ubuntu-latest. Atribut node-version určuje, že existují tři buildy, jeden pro Node.js verze 14.x, 16.x a 18.x. Atribut matrix je podrobněji popsán později v modulu.

V atributu jobs kroky používají akce GitHub Actions /checkout@v3 k získání kódu z úložiště do virtuálního počítače a akcí /setup-node@v3 k nastavení správné verze Node.js. Určíte, že chcete otestovat tři verze Node.js pomocí atributu ${{ matrix.node-version }} . Tento atribut odkazuje na matici, kterou jste definovali dříve. Atribut cache určuje správce balíčků pro ukládání do mezipaměti ve výchozím adresáři.

Poslední část tohoto kroku provede příkazy, které Node.js projekty používají. Příkaz npm ci nainstaluje závislosti ze package-lock.json souboru. npm run build --if-present spustí skript sestavení, pokud existuje. npm test spustí testovací architekturu. Tato šablona zahrnuje sestavení i testovací kroky ve stejné úloze.

Další informace o npm najdete v dokumentaci k npm:

Tým vývojářů může těžit z použití opakovaně použitelných pracovních postupů ke zjednodušení a standardizaci opakovaných kroků automatizace. Pomocí opakovaně použitelných pracovních postupů můžete snížit redundanci, zlepšit udržovatelnost a zajistit konzistenci v kanálech kontinuální integrace a průběžného nasazování (CI/CD).

Vyhněte se duplikaci pomocí opakovaně použitelných pracovních postupů

S tím, jak se týmy škálují a projekty zvětšují, je běžné vidět stejné kroky, které se opakují napříč několika soubory pracovního postupu. Tyto kroky můžou zahrnovat stažení kódu, instalaci závislostí, testování a nasazení. Tento druh duplikace nejen zahltí základ kódu, ale také zvyšuje dobu údržby, když se vyžadují změny kódu. Opakovaně použitelné pracovní postupy tento problém řeší tím, že umožňují definovat logiku automatizace jednou a pak volat logiku z jiných pracovních postupů.

Opakovaně použitelné pracovní postupy jsou speciální pracovní postupy GitHub Actions, které mohou volat jiné pracovní postupy, podobně jako funkce při programování. Vytvoříte je pro sdílení opakující se logiky, jako jsou kroky sestavení, testovací postupy nebo strategie nasazení. Po vytvoření opakovaně použitelného pracovního postupu na něj můžete odkazovat z jakéhokoli jiného pracovního postupu ve stejném úložišti nebo dokonce v různých úložištích.

Diagram znázorňující koncept opakovaně použitelných pracovních postupů v GitHub Actions Centrální pracovní postup může odkazovat na více úložišť nebo pracovních postupů.

Proč používat opakovaně použitelné pracovní postupy?

Toto jsou výhody používání opakovaně použitelných pracovních postupů:

  • Konzistence. Týmy můžou dodržovat stejné standardy automatizace ve všech projektech.
  • Efektivita. Místo kopírování a vkládání kroků stačí odkazovat na opakovaně použitelný pracovní postup.
  • Jednodušší aktualizace. Když se proces změní, například přidáním testovacího kroku, aktualizujete ho na jednom místě. Pak všechny pracovní postupy, které využívají výhody pracovního postupu, fungují automaticky.
  • Škálovatelnost. Opakovaně použitelné pracovní postupy jsou ideální pro týmy platformy nebo DevOps, které spravují více služeb.

Dále se dozvíte, jak pomocí opakovaně použitelných pracovních postupů zlepšit projekty.

Implementace opakovaně použitelných pracovních postupů

Použití opakovaně použitelných pracovních postupů:

  1. Ve složce úložiště vytvořte opakovaně použitelný pracovní postup. Soubor obsahuje kroky automatizace, které chcete sdílet, například běžné kroky spojené s testováním, sestavováním a nasazováním.
  2. Explicitně povolit opětovné použití pracovního postupu jeho konfigurací s událostí workflow_call
  3. Ve svých hlavních pracovních postupech (pracovních postupech hlavního volání) odkazujte na tento znovu použitelný soubor a poskytněte všechny požadované vstupy nebo tajné informace.

Pokud chcete ilustrovat výhody opakovaně použitelných pracovních postupů, zvažte následující scénář z reálného světa.

Příklad

Představte si, že vaše organizace má 10 mikroslužeb. Všechny 10 mikroslužeb potřebují stejný postup:

  • Spouštění testů
  • Lintování kódu
  • Nasazení do konkrétního prostředí

Bez opakovaně použitelných pracovních postupů každé úložiště skončí duplikací stejné logiky v několika souborech pracovního postupu, což vede k opakovaným krokům a obtížnější údržbě.

Pokud používáte opakovaně použitelné pracovní postupy:

  • Proces definujete jednou v centrálním souboru (například v ci-standard.yml).
  • Tento soubor voláte ze vlastního pracovního postupu každé mikroslužby a předáváte proměnné jako prostředí nebo název aplikace.

Pokud přidáte nový krok zabezpečení nebo nástroj, například ke kontrole ohrožení zabezpečení, přidáte ho do opakovaně použitelného pracovního postupu jenom jednou. Všech 10 mikroslužeb okamžitě začne používat aktualizovaný proces. Nemusíte upravovat 10 mikroslužeb.

Když pochopíte, jak opakovaně použitelné pracovní postupy fungují a jaké jsou jejich výhody, můžete využít osvědčené postupy, abyste maximalizovali jejich efektivitu a zajistili bezproblémovou integraci s kanály CI/CD.

Osvědčené postupy

  • Centralizujte své opakovaně použitelné pracovní postupy do jednoho úložiště, pokud je plánujete sdílet mezi týmy.
  • Používejte větve nebo značky k vytváření verzí pracovních postupů (například použití @v1), abyste v případě potřeby mohli snadno vrátit změny zpět.
  • Jasně zdokumentovat vstupy a tajné kódy. Opakovaně použitelné pracovní postupy často spoléhají na vstupy a tajné kódy. Týmy potřebují vědět, jaké informace použít.
  • Pokud potřebujete znovu použít jenom několik kroků, zkombinujte opakovaně použitelné pracovní postupy se složenými akcemi místo vytvoření úplného pracovního postupu.

Opakovaně použitelné pracovní postupy představují účinný způsob, jak vynutit konzistenci, omezit duplicity a škálovat postupy DevOps v jakémkoli technickém týmu. Bez ohledu na to, jestli spravujete jedno úložiště, mikroslužby nebo opensourcové knihovny, můžou opakovaně použitelné pracovní postupy zjednodušit automatizaci, takže ci/CD je rychlejší, čistější a jednodušší pro správu.

Přizpůsobení šablon pracovních postupů

Na začátku tohoto modulu jste zvážili scénář, ve kterém potřebujete nastavit CI pro váš tým vývojářů. Šablona Node.js je skvělý začátek, ale chcete ji přizpůsobit tak, aby lépe vyhovovala požadavkům vašeho týmu. Chcete cílit na různé verze Node.js a různých operačních systémů. Chcete také, aby kroky sestavení a testování byly samostatné úlohy.

Tady je příklad přizpůsobeného pracovního postupu:

strategy:
  matrix:
    os: [ubuntu-latest, windows-latest]
    node-version: [16.x, 18.x]

V tomto příkladu nakonfigurujete matici sestavení pro testování v různých operačních systémech a jazykových verzích. Tato matice vytvoří čtyři sestavení, jedno pro každý operační systém spárovaný s každou verzí Node.js.

Čtyři sestavení a jejich testy vytvářejí velké množství protokolových dat. Může být obtížné to všechno seřadit. V následující ukázce přesunete testovací krok do vyhrazené testovací úlohy. Tato úloha prověřuje více cílů. Oddělení sestavení a testovacích kroků usnadňuje práci s daty protokolu.

test:
  runs-on: ${{ matrix.os }}
  strategy:
    matrix:
      os: [ubuntu-latest, windows-latest]
      node-version: [16.x, 18.x]
  steps:
  - uses: actions/checkout@v3
  - name: Use Node.js ${{ matrix.node-version }}
    uses: actions/setup-node@v3
    with:
      node-version: ${{ matrix.node-version }}
  - name: npm install, and test
    run: |
      npm install
      npm test
    env:
      CI: true