Konfigurace pracovního postupu GitHub Actions

Dokončeno

Tady se dozvíte o některých běžných konfiguracích v souboru pracovního postupu. Prozkoumáte také kategorie typů událostí, zakázání a odstranění pracovních postupů a použití konkrétních verzí akce pro osvědčené postupy zabezpečení.

Konfigurace pracovních postupů pro spouštění naplánovaných událostí

Jak už bylo zmíněno dříve, můžete nakonfigurovat pracovní postupy tak, aby běžely, když dojde ke konkrétní aktivitě na GitHubu, když dojde k události mimo GitHub nebo v naplánovaném čase. Událost schedule umožňuje aktivovat pracovní postup, který se bude spouštět v určitých časech UTC pomocí syntaxe POSIX cron. Tato syntaxe cron má pět * polí a každé pole představuje jednotku času.

Diagram pěti časových polí pro naplánování události v souboru pracovního postupu

Pokud byste například chtěli spustit pracovní postup každých 15 minut, schedule událost by vypadala takto:

on:
  schedule:
    - cron:  '*/15 * * * *'

A pokud byste chtěli spustit pracovní postup každou neděli v 3:00, schedule událost by vypadala takto:

on:
  schedule:
    - cron:  '0 3 * * SUN'

Operátory můžete použít také k určení rozsahu hodnot nebo k vytáčení v naplánovaném pracovním postupu. Nejkratší interval, který můžete spouštět naplánované pracovní postupy, je jednou za pět minut a běží na nejnovějším potvrzení ve výchozí nebo základní větvi.

Konfigurace pracovních postupů pro spouštění ručních událostí

Kromě plánovaných událostí můžete pracovní postup aktivovat ručně pomocí workflow_dispatch události. Tato událost umožňuje spustit pracovní postup pomocí rozhraní REST API GitHubu nebo výběrem tlačítka Spustit pracovní postup na kartě Akce v úložišti na GitHubu. Pomocí workflow_dispatch, můžete zvolit, pro kterou větev má pracovní postup běžet, a také nastavit volitelné inputs , že GitHub bude prezentovat jako prvky formuláře v uživatelském rozhraní.

on:
  workflow_dispatch:
    inputs:
      logLevel:
        description: 'Log level'     
        required: true
        default: 'warning'
      tags:
        description: 'Test scenario tags'  

Kromě workflow_dispatchtoho můžete pomocí rozhraní API GitHubu aktivovat událost webhooku s názvem repository_dispatch. Tato událost umožňuje aktivovat pracovní postup pro aktivitu, která se vyskytuje mimo GitHub, a v podstatě slouží jako požadavek HTTP do vašeho úložiště s žádostí GitHubu o aktivaci pracovního postupu mimo akci nebo webhook. Použití této ruční události vyžaduje, abyste udělali dvě věci: odešlete POST požadavek do koncového bodu /repos/{owner}/{repo}/dispatches GitHubu s názvy událostí webhooku v textu požadavku a nakonfigurujte pracovní postup tak, aby tuto událost používal repository_dispatch .

curl \
  -X POST \
  -H "Accept: application/vnd.github.v3+json" \
  https://api.github.com/repos/octocat/hello-world/dispatches \
  -d '{"event_type":"event_type"}'
on:
  repository_dispatch:
    types: [opened, deleted]

Konfigurace pracovních postupů pro spouštění událostí webhooku

Nakonec můžete nakonfigurovat pracovní postup, který se má spustit, když na GitHubu dojde ke konkrétním událostem webhooku. U webhooku můžete aktivovat většinu událostí webhooku z více než jedné aktivity, takže pokud pro webhook existuje více aktivit, můžete zadat typ aktivity, který má pracovní postup aktivovat. Můžete například spustit pracovní postup pro check_run událost, ale pouze pro rerequested typy aktivit.requested_action

on:
  check_run:
    types: [rerequested, requested_action]

Použití podmíněných klíčových slov

V souboru pracovního postupu můžete získat přístup k informacím o kontextu a vyhodnotit výrazy. Přestože se výrazy běžně používají s podmíněným if klíčovým slovem v souboru pracovního postupu k určení, jestli se má krok spustit nebo ne, můžete k vytvoření podmíněného výrazu použít libovolný podporovaný kontext a výraz. Je důležité vědět, že při použití podmíněných výrazů v pracovním postupu musíte použít konkrétní syntaxi ${{ <expression> }}, která GitHubu říká, aby vyhodnotil výraz, a nechovejte s ním jako s řetězcem.

Například pracovní postup, který používá podmíněnou if kontrolu, jestli github.ref se shoduje (větev nebo odkaz značky, která aktivovala spuštění pracovního postupu), refs/heads/main aby mohl pokračovat následujícími kroky v pracovním postupu, by vypadal nějak takto:

name: CI
on: push
jobs:
  prod-check:
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      ...

Všimněte si, ${{ }} že v tomto příkladu chybí syntaxe. U některých výrazů, jako v případě podmíněného výrazu if , můžete vynechat syntaxi výrazu. GitHub automaticky vyhodnotí některé z těchto běžných výrazů, ale v případě, že zapomenete, které výrazy GitHub automaticky vyhodnotí, můžete je zahrnout.

Další informace o syntaxi a výrazech pracovního postupu najdete v syntaxi pracovního postupu pro GitHub Actions.

Zakázání a odstranění pracovních postupů

Po přidání pracovního postupu do úložiště můžete najít situaci, kdy chcete pracovní postup dočasně zakázat. Můžete zastavit aktivaci pracovního postupu, aniž byste museli odstranit soubor z úložiště, a to buď na GitHubu, nebo prostřednictvím rozhraní REST API GitHubu. Pokud chcete pracovní postup znovu povolit, můžete ho snadno provést stejnými metodami.

Snímek obrazovky se zákazem pracovního postupu na GitHubu

Zakázání pracovního postupu může být užitečné v některých situacích, například:

  • Chyba pracovního postupu vytváří příliš mnoho nebo nesprávných požadavků, které mají negativní vliv na externí služby.
  • Chcete dočasně pozastavit pracovní postup, který není kritický a zabírají na vašem účtu příliš mnoho minut.
  • Chcete pozastavit pracovní postup, který odesílá požadavky do služby, která je v provozu.
  • Pracujete na forku a nepotřebujete všechny funkce některých pracovních postupů, které zahrnuje (například naplánované pracovní postupy).

Můžete také zrušit spuštění pracovního postupu, které probíhá v uživatelském rozhraní GitHubu , z karty Actions nebo pomocí koncového bodu DELETE /repos/{owner}/{repo}/actions/runs/{run_id}rozhraní API GitHubu . Mějte na paměti, že když zrušíte spuštění pracovního postupu, GitHub zruší všechny své úlohy a kroky v rámci tohoto spuštění.

Použití pracovního postupu v šabloně organizace

Pokud máte pracovní postup, který používá více týmů v rámci organizace, místo opětovného vytvoření stejného pracovního postupu pro každé úložiště můžete zvýšit konzistenci ve vaší organizaci pomocí šablony pracovního postupu definované v úložišti organizace .github . Každý člen v organizaci může použít pracovní postup šablony organizace a jakékoli úložiště v organizaci má přístup k těmto pracovním postupům šablony.

Tyto pracovní postupy najdete tak, že přejdete na kartu Akce úložiště v organizaci, vyberete Nový pracovní postup a pak vyhledáte oddíl šablony pracovního postupu organizace s názvem Pracovní postupy vytvořené názvem organizace. Například organizace s názvem Mona má pracovní postup šablony, jak je znázorněno níže.

Snímek obrazovky pracovního postupu organizace šablony s názvem greet and triage by Mona

Použití konkrétních verzí akce

Při odkazování na akce v pracovním postupu doporučujeme místo samotné akce odkazovat na konkrétní verzi této akce. Odkazováním na konkrétní verzi umístíte ochranu před neočekávanými změnami nasdílenými do akce, která by mohla potenciálně narušit váš pracovní postup. Tady je několik způsobů, jak můžete odkazovat na konkrétní verzi akce:

steps:    
  # Reference a specific commit
  - uses: actions/setup-node@c46424eee26de4078d34105d3de3cc4992202b1e
  # Reference the major version of a release
  - uses: actions/setup-node@v1
  # Reference a minor version of a release
  - uses: actions/setup-node@v1.2
  # Reference a branch
  - uses: actions/setup-node@main

Některé odkazy jsou bezpečnější než jiné. Například odkazování na konkrétní větev spustí tuto akci z nejnovějších změn z této větve, kterou byste mohli nebo nechcete chtít. Odkazováním na konkrétní číslo verze nebo potvrzením hodnoty hash SHA je konkrétnější o verzi spuštěné akce. Pro větší stabilitu a zabezpečení doporučujeme použít sha potvrzení vydané akce v rámci pracovních postupů.