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

Dokončeno

Tady se dozvíte o GitHub Actions a pracovních postupech pro CI.

Naučíte se:

  • Vytvoření pracovního postupu ze šablony
  • Porozumět protokolům GitHub Actions
  • Testování proti více cílům
  • Samostatné úlohy sestavení a testování
  • Uložení a přístup k artefaktům sestavení
  • Automatizace označování žádosti o přijetí změn při kontrole

Vytvoření pracovního postupu ze šablony

Pokud chcete vytvořit pracovní postup, začněte pomocí šablony. Šablona obsahuje běžné úlohy a kroky předkonfigurované 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ě vyberte kartu Akce a pak vyberte Nový pracovní postup.

Na stránce Zvolit pracovní postup si můžete vybrat z mnoha různých šablon. Jedním z příkladů je šablona Node.js, která provádí čistou instalaci závislostí uzlů, sestaví zdrojový kód a spustí testy pro různé verze Node. Dalším příkladem je šablona balíčku Pythonu, která nainstaluje závislosti Pythonu a spouští testy, včetně lintu, napříč různými verzemi Pythonu.

Do vyhledávacího pole zadejte Node.js.

snímek obrazovky zobrazující kartu GitHub Actions se zvýrazněným vyhledávacím polem a textemNode.js

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

snímek obrazovky s kartou GitHub Actions se zvýrazněným podoknem Node.js a vybranou šablonou Node.js

Tento výchozí pracovní postup šablony Node.js uvidíte v nově vytvořeném souboru node.js.yml.

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

Všimněte si atributu on:. Tento pracovní postup se aktivuje při odeslání do úložiště a při vytvoření žádosti o sloučení proti hlavní větvi.

V tomto pracovním postupu je jedna job. Pojďme se podívat, co to dělá.

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 sestavení, jedna pro Node verze 14.x, 16.x a 18.x. Část matrix popíšeme podrobněji později, když pracovní postup přizpůsobíme.

steps v úloze používá akci GitHub Actions actions/checkout@v3 k získání kódu z vašeho úložiště do virtuálního počítače a akci actions/setup-node@v3 k nastavení správné verze Node.js. Určíme, že budeme testovat tři verze Node.js s atributem ${{ matrix.node-version }}. Tento atribut odkazuje na matici, která jsme dříve definovali. 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 spouští příkazy používané Node.js projekty. Příkaz npm ci nainstaluje závislosti ze souboru package-lock.json, npm run build --if-present spustí skript sestavení, pokud existuje, a npm test spustí testovací architekturu. Všimněte si, že tato šablona zahrnuje sestavení i testovací kroky ve stejné úloze.

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

Protokoly akcí pro sestavení

Když se pracovní postup spustí, vytvoří protokol, který obsahuje podrobnosti o tom, co se stalo, a případné chyby nebo selhání testů.

Pokud dojde k chybě nebo se test nezdaří, zobrazí se v protokolech červená ✖ místo zelené značky ✔. Můžete prozkoumat podrobnosti o chybě nebo selhání a zjistit, co se stalo.

 záznam GitHub Actions s podrobnostmi o neúspěšném testu.

V cvičení identifikujete neúspěšné testy prozkoumáním podrobností v protokolech. K protokolům se dostanete ze záložky Akce.

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

Na začátku tohoto modulu jsme popsali scénář, ve kterém potřebujete nastavit CI pro váš tým. Š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 a různé operační systémy. Chcete také, aby kroky sestavení a testování byly samostatné úlohy.

Pojďme se podívat, jak si pracovní postup přizpůsobíte.

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

Tady jsme nakonfigurovali matici sestavení pro testování v různých operačních systémech a jazykových verzích. Tato matice vytváří čtyři sestavení, jedno pro každý operační systém spárované s každou verzí Node.

Čtyři sestavení spolu se všemi jejich testy vytvářejí značné množství protokolových informací. Může být obtížné to všechno seřadit. V následující ukázce vám ukážeme, jak přesunout testovací krok do vyhrazené testovací úlohy. Tato úloha prověřuje více cílů. Oddělení kroků sestavení a testování usnadňuje pochopení 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

Co jsou artefakty?

Když pracovní postup vytvoří něco jiného než záznam protokolu, produkt se nazývá artefakt. Například sestavení Node.js vytvoří kontejner Dockeru, který je možné nasadit. Tento artefakt, kontejner, je možné nahrát do úložiště pomocí akce actions/upload-artifact a později stáhnout z úložiště pomocí akce actions/download-artifact.

Uložení artefaktu ho zachová mezi úlohami. Každá úloha používá novou instanci virtuálního počítače, takže artefakt nemůžete znovu použít tak, že ho uložíte na virtuální počítač. Pokud artefakt potřebujete v jiné úloze, můžete artefakt nahrát do úložiště v jedné úloze a stáhnout ho pro jinou úlohu.

Úložiště artefaktů

Artefakty se ukládají do prostoru úložiště na GitHubu. Místo je volné pro veřejná úložiště a v závislosti na účtu je některé množství zdarma pro privátní úložiště. GitHub ukládá artefakty po dobu 90 dnů.

V následujícím fragmentu kódu pracovního postupu si všimněte, že v akci actions/upload-artifact@main existuje atribut path:. Hodnota tohoto atributu je cesta k uložení artefaktu. Tady určíme, veřejné nebo, aby se všechno nahrálo do adresáře. Pokud bychom chtěli nahrát jenom jeden soubor, použijeme něco jako veřejné/mytext.txt.

  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: npm install and build webpack
        run: |
          npm install
          npm run build
      - uses: actions/upload-artifact@main
        with:
          name: webpack artifacts
          path: public/

Pokud chcete stáhnout artefakt pro testování, musí se sestavení úspěšně dokončit a nahrát artefakt. V následujícím kódu určíme, že testovací úloha závisí na úloze sestavení.

test:
    needs: build
    runs-on: ubuntu-latest

V následujícím fragmentu kódu pracovního postupu stáhneme artefakt. Teď může testovací úloha použít artefakt k testování.

steps:
    - uses: actions/checkout@v3
    - uses: actions/download-artifact@main
      with:
        name: webpack artifacts
        path: public

Další informace o používání artefaktů v pracovních postupech najdete v tématu Ukládání dat pracovního postupu jako artefaktů v dokumentaci k GitHubu.

Automatizace kontrol v GitHubu pomocí pracovních postupů

Zatím jsme popsali zahájení pracovního postupu s událostmi GitHubu, jako jsou push nebo "pull request". Pracovní postup můžeme spustit také podle plánu nebo na nějaké události mimo GitHub.

Někdy chceme pracovní postup spustit až poté, co osoba provede nějakou akci. Můžeme například chtít spustit pracovní postup jenom poté, co revidujícím žádost o přijetí změn schválí. V tomto scénáři můžeme aktivovat pull-request-review.

Další akcí, kterou můžeme provést, je přidání štítku do pull requestu (žádosti o přijetí změn). V tomto případě použijeme akci pullreminders/label-when-approved-action.

    steps:
     - name: Label when approved
       uses: pullreminders/label-when-approved-action@main
       env:
         APPROVALS: "1"
         GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
         ADD_LABEL: "approved"

Všimněte si bloku s názvem env:. V tomto bloku nastavíte proměnné prostředí pro tuto akci. Můžete například nastavit počet potřebných schvalovatelů. Tady je to jedna. Ověřovací proměnná secrets.GITHUB_TOKEN je povinná, protože akce musí provádět změny v úložišti přidáním popisku. Nakonec zadáte název popisku, který chcete přidat.

Přidání popisku může být událost, která spustí jiný pracovní postup, například sloučení. Tuto událost probereme v dalším modulu o průběžném doručování pomocí GitHub Actions.