Jak můžu pomocí GitHub Actions vytvořit pracovní postupy pro kontinuální integraci?

Dokončeno

Tady najdete informace o GitHub Actions a pracovních postupech pro kontinuální integraci.

Získáte informace pro:

  • Vytvořit pracovní postup ze šablony
  • Analyzovat protokoly GitHub Actions
  • Otestovat více cílů
  • Oddělit úlohy sestavení a testování
  • Ukládat artefakty sestavení a přistupovat k nim
  • Automatizovat označování žádosti o přijetí změn při revizi

Vytvořit pracovní postup ze šablony

Pokud chcete vytvořit pracovní postup, začněte tím, že použijete šablonu. Š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 vývojových úloh pomocí GitHub Actions .

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.

Screenshot showing GitHub Actions tab with the search box highlighted and containing the text 'Node.js'.

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

Screenshot showing GitHub Actions tab with the Node.js pane highlighted and the Node.js template selected.

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 nasdílení změn do úložiště a při provedení žádosti o přijetí změn v hlavní větvi.

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

Atribut runs-on: určuje, že pro operační systém je pracovní postup spuštěn v ubuntu-latest. Atribut node-version: určuje, že existují tři buildy, jeden pro Node verze 14.x, 16.x a 18.x. Část popíšeme matrix podrobněji později, když pracovní postup přizpůsobíme.

V steps úloze se k získání kódu z úložiště do virtuálního počítače používají akce GitHub Actions /checkout@v3 a akce /setup-node@v3 pro 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 provádí příkazy používané projekty Node.js. Příkaz npm ci nainstaluje závislosti ze souboru package-lock.json, příkaz npm run build --if-present spustí skript sestavení (pokud existuje) a příkaz npm test spustí testovací prostředí. Všimněte si, že tato šablona obsahuje kroky pro sestavení i testování ve stejné úloze.

Další informace o příkazu npm najdete v příslušné dokumentaci:

Protokoly akcí pro sestavení

Při spuštění pracovního postupu se vytvoří protokol, který obsahuje podrobnosti o tom, co se stalo, a případné chyby nebo selhání testu.

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

 GitHub Actions log with details on a failed test.

V tomto cvičení identifikujete neúspěšné testy zkoumáním podrobností uvedených v protokolech. K protokolům můžete přistupovat z karty Actions.

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 uzlů 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 můžete pracovní postup přizpůsobit.

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

Výše 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í poměrně hodně informací protokolu. Mohlo by být obtížné je všechny roztřídit. V následující ukázce vám ukážeme, jak přesunout testovací krok do vyhrazené testovací úlohy. Tato úloha otestuje 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, označuje se produkt jako artefakt. Například sestavení Node.js vytvoří kontejner Dockeru, který lze nasadit. Tento artefakt, kontejner, se dá nahrát do úložiště pomocí akcí akcí/ upload-artifact a později stáhnout z úložiště pomocí akcí akce /download-artifact.

Uložení artefaktu 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í v prostoru úložiště na GitHubu. Prostor je pro veřejná úložiště zdarma a v závislosti na účtu je určitý prostor zdarma i pro privátní úložiště. GitHub ukládá artefakty po dobu 90 dnů.

V následujícím fragmentu actions/upload-artifact@main kódu pracovního postupu si všimněte, že v akci je path: atribut. Hodnota tohoto atributu je cesta k uložení artefaktu. V tomto příkladu jsme zadali public/, aby se do adresáře nahrálo vš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. Nyní 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 revizí na GitHubu pomocí pracovních postupů

Zatím jsme popsali spuštění pracovního postupu s událostmi GitHubu, jako jsou push nebo žádost o přijetí změn. 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 parametr pull-request-review.

Další akcí, kterou můžeme provést, je přidání popisku k žádosti o přijetí změn. V tomto případě používáme 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 třeba nastavit požadovaný počet schvalovatelů. V tomto příkladu je zadaný jeden. secrets.GITHUB_TOKEN Ověřovací proměnná se vyžaduje, protože akce musí provádět změny v úložišti přidáním popisku. Nakonec zadejte 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.