Přizpůsobení pracovního postupu pomocí proměnných prostředí

Dokončeno

V této lekci se naučíte konfigurovat a spravovat chování specifické pro prostředí pomocí proměnných, kontextů a vlastních skriptů v pracovních postupech GitHub Actions.

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

  • Použijte výchozí a vlastní proměnné prostředí.
  • Přístup k kontextovým informacím v pracovních postupech
  • Nastavte proměnné prostředí na různých úrovních pracovního toku.
  • Použijte vlastní skripty s klíčovým slovem spustit.
  • Uplatněte ochranu prostředí pro nasazení

Výchozí proměnné prostředí a kontexty

V rámci pracovního postupu GitHub Actions je k dispozici několik výchozích proměnných prostředí, které můžete použít, ale jenom v rámci spouštěče, který spouští úlohu. Tyto výchozí proměnné rozlišují malá a velká písmena a odkazují na hodnoty konfigurace systému a aktuálního uživatele. Tyto výchozí proměnné prostředí doporučujeme použít k odkazování na systém souborů místo použití pevně zakódovaných cest k souborům. Pokud chcete použít výchozí proměnnou prostředí, zadejte $ název proměnné prostředí.

jobs:
  prod-check:
    steps:
      - run: echo "Deploying to production server on branch $GITHUB_REF"

Kromě výchozích proměnných prostředí můžete jako kontexty použít definované proměnné. Kontexty a výchozí proměnné jsou podobné v tom, že obě poskytují přístup k informacím o prostředí, ale mají některé důležité rozdíly. I když se výchozí proměnné prostředí dají použít jenom v rámci spouštěče, můžete v libovolném okamžiku pracovního postupu použít kontextové proměnné. Kontextové proměnné například umožňují spustit if příkaz pro vyhodnocení výrazu před spuštěním spouštěče.

name: CI
on: push
jobs:
  prod-check:
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - run: echo "Deploying to production server on branch $GITHUB_REF"

Tento příklad používá github.ref kontext ke kontrole větve, která aktivovala pracovní postup. Pokud je větev main, spustí se vykonavatel, který vytiskne text "Nasazení na produkční server na větvi $GITHUB_REF." Výchozí proměnná prostředí $GITHUB_REF se ve vykonavateli používá k odkazování na větev. Všimněte si, že výchozí proměnné prostředí jsou velkými písmeny, kde jsou všechny kontextové proměnné malými písmeny.

Kontextové informace dostupné v pracovním postupu

Kontexty slouží k přístupu k informacím o spuštěních pracovních postupů, proměnných, prostředích spouštěčů, úlohách a krocích. Každý kontext je objekt, který obsahuje vlastnosti, které mohou být jiné objekty nebo řetězce. Mezi dostupné kontexty patří github, env, vars, job, jobs, steps, runner, secrets, strategy, matrix, needs a inputs.

Následující tabulka uvádí kontexty a popisy pracovního postupu:

Kontext Popis
github Informace o spuštění pracovního postupu Další informace najdete v github kontextu.
env Obsahuje proměnné, které jste nastavili v pracovním postupu, úloze nebo kroku. Další informace najdete v env kontextu.
vars Obsahuje proměnné, které jste nastavili na úrovni úložiště, organizace nebo prostředí. Další informace najdete v vars kontextu.
job Informace o aktuálně spuštěné úloze Další informace najdete v job kontextu.
jobs Pouze pro opakovaně použitelné pracovní postupy obsahuje výstupy úloh z opakovaně použitelného pracovního postupu. Další informace najdete v jobs kontextu.
steps Informace o krocích spuštěných v aktuální úloze Další informace najdete v steps kontextu.
runner Informace o spouštěči, který spouští aktuální úlohu. Další informace najdete v runner kontextu.
secrets Obsahuje názvy a hodnoty tajných kódů, které jsou k dispozici pro spuštění pracovního postupu. Další informace najdete v secrets kontextu.
strategy Informace o strategii provádění mřížky pro aktuální úlohu Další informace najdete v strategy kontextu.
matrix Obsahuje vlastnosti matice definované v pracovním postupu, které platí pro aktuální úlohu. Další informace najdete v matrix kontextu.
needs Obsahuje výstupy všech úloh, které jsou definovány jako závislost aktuální úlohy. Další informace najdete v needs kontextu.
inputs Obsahuje vstupy opakovaně použitelného nebo ručně aktivovaného pracovního postupu. Další informace najdete v inputs kontextu.

Při spuštění pracovního postupu jsou k dispozici různé kontexty v různých časech. Kontext můžete například použít secrets jenom na konkrétních místech v práci. Můžete také použít některé funkce, jako je tato hashFiles funkce, pouze na konkrétních místech.

Následující tabulka uvádí omezení pro každý kontext a speciální funkci v pracovním postupu. Uvedené kontexty jsou k dispozici pouze pro zadaný klíč pracovního postupu. Nemůžete je použít nikde jinde. Funkci můžete použít kdekoli, pokud není uvedená v následující tabulce.

Klíč pracovního postupu Kontext Speciální funkce
run-name github inputs vars Žádné
concurrency github inputs vars Žádné
env github, secrets, , inputsvars Žádné
jobs.<job_id>.concurrency github, needs, strategy, matrix, , inputsvars Žádné
jobs.<job_id>.container github, needs, strategy, matrix, , varsinputs Žádné
jobs.<job_id>.container.credentials github, needs, strategy, , matrixenv, vars, , secretsinputs Žádné
jobs.<job_id>.container.env.<env_id> github, needs, strategy, matrixjob, runnerenvvars, secretsinputs Žádné
jobs.<job_id>.container.image github, needs, strategy, matrix, , varsinputs Žádné
jobs.<job_id>.continue-on-error github, needs, strategy, vars, , matrixinputs Žádné
jobs.<job_id>.defaults.run github, needs, strategy, matrix, env, , varsinputs Žádné
jobs.<job_id>.env github, needs, strategy, matrix, vars, , secretsinputs Žádné
jobs.<job_id>.environment github, needs, strategy, matrix, , varsinputs Žádné
jobs.<job_id>.environment.url github, needs, strategy, matrixjob, runnerenvvars, stepsinputs Žádné
jobs.<job_id>.if github, needs, , varsinputs always, canceled, , successfailure
jobs.<job_id>.name github, needs, strategy, matrix, , varsinputs Žádné
jobs.<job_id>.outputs.<output_id> github, needs, , strategy, matrixjobrunnerenvvarssecrets, stepsinputs Žádné
jobs.<job_id>.runs-on github, needs, strategy, matrix, , varsinputs Žádné
jobs.<job_id>.secrets.<secrets_id> github, needs, strategy, matrix, secrets, , inputsvars Žádné
jobs.<job_id>.services github, needs, strategy, matrix, , varsinputs Žádné
jobs.<job_id>.services.<service_id>.credentials github, needs, strategy, , matrixenv, vars, , secretsinputs Žádné
jobs.<job_id>.services.<service_id>.env.<env_id> github, needs, strategy, matrixjob, runnerenvvars, secretsinputs Žádné
jobs.<job_id>.steps.continue-on-error github, needs, , strategy, matrixjobrunnerenvvarssecrets, stepsinputs hashové_soubory
jobs.<job_id>.steps.env github, needs, , strategy, matrixjobrunnerenvvarssecrets, stepsinputs hashFiles
jobs.<job_id>.steps.if github, needs, strategy, matrixjob, runnerenvvars, stepsinputs always, canceled, success, , failurehashFiles
jobs.<job_id>.steps.name github, needs, , strategy, matrixjobrunnerenvvarssecrets, stepsinputs hashFiles
jobs.<job_id>.steps.run github, needs, , strategy, matrixjobrunnerenvvarssecrets, stepsinputs hashFiles
jobs.<job_id>.steps.timeout-minutes github, needs, , strategy, matrixjobrunnerenvvarssecrets, stepsinputs hashFiles
jobs.<job_id>.steps.with github, needs, , strategy, matrix, jobrunnerenv, vars, secrets, , stepsinputs hashFiles
jobs.<job_id>.steps.working-directory github, needs, , strategy, matrix, jobrunnerenv, vars, secrets, , stepsinputs hashFiles
jobs.<job_id>.strategy github, potřeby, vars, inputs Žádné
jobs.<job_id>.timeout-minutes github, needs, strategy, matrix, , varsinputs Žádné
jobs.<job_id>.with.<with_id> github, needs, strategy, matrix, , inputsvars Žádné
on.workflow_call.inputs.<inputs_id>.default github inputs vars Žádné
on.workflow_call.outputs.<output_id>.value github, pracovní místa, vars, inputs Žádné

Vlastní proměnné prostředí

Podobně jako při použití výchozích proměnných prostředí můžete v souboru pracovního postupu použít vlastní proměnné prostředí. Pokud chcete vytvořit vlastní proměnnou, musíte ji definovat v souboru pracovního postupu pomocí env kontextu. Pokud chcete použít hodnotu proměnné prostředí uvnitř spouštěče, můžete pro čtení proměnných prostředí použít normální metodu operačního systému Runner.

name: CI
on: push
jobs:
  prod-check:
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - run: echo "Nice work, $First_Name. Deploying to production server on branch $GITHUB_REF"
        env:
          First_Name: Mona

Nastavení vlastních proměnných prostředí v pracovním postupu

Proměnné prostředí, které jsou vymezeny na celý pracovní postup, můžete definovat pomocí env na nejvyšší úrovni souboru pracovního postupu. Vymezte obsah úlohy v rámci pracovního postupu pomocí jobs.<job_id>.env. Proměnnou prostředí můžete určit v určitém kroku v rámci úlohy pomocí .jobs.<job_id>.steps[*].env

Tady je příklad, který ukazuje všechny tři scénáře v souboru pracovního postupu:

name: Greeting on variable day

on:
  workflow_dispatch

env:
  DAY_OF_WEEK: Monday

jobs:
  greeting_job:
    runs-on: ubuntu-latest
    env:
      Greeting: Hello
    steps:
      - name: "Say Hello Mona it's Monday"
        run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!"
        env:
          First_Name: Mona

Použití výchozího kontextu v pracovním postupu

Platforma GitHubu nastavuje výchozí proměnné prostředí. Nejsou definovány v pracovním postupu, ale v příslušném kontextu můžete použít výchozí proměnnou prostředí v pracovním postupu. Většina z těchto proměnných, kromě CI, začíná na GITHUB_* nebo RUNNER_*. Tyto poslední dva druhy nelze přepsat. Tyto výchozí proměnné mají také odpovídající a podobně pojmenovanou kontextovou vlastnost. Například RUNNER_* řada výchozích proměnných má odpovídající kontextovou vlastnost runner.*.

Tady je příklad, jak přistupovat k výchozím proměnným v pracovním postupu použitím těchto metod:

on: workflow_dispatch

jobs:
  if-Windows-else:
    runs-on: macos-latest
    steps:
      - name: condition 1
        if: runner.os == 'Windows'
        run: echo "The operating system on the runner is $env:RUNNER_OS."
      - name: condition 2
        if: runner.os != 'Windows'
        run: echo "The operating system on the runner is not Windows, it's $RUNNER_OS."

Další informace najdete v tématu Výchozí proměnné prostředí.

Předání vlastních proměnných prostředí do pracovního postupu

Vlastní proměnné prostředí můžete předat z jednoho kroku úlohy pracovního postupu do následných kroků v rámci úlohy. Vygenerujte hodnotu v jednom kroku úlohy a přiřaďte ji existující nebo nové proměnné prostředí. V dalším kroku zapíšete dvojici proměnných a hodnot do souboru prostředí GITHUB_ENV. Soubor prostředí můžete použít v akci nebo z příkazového prostředí v úloze pracovního procesu pomocí klíčového slova run.

Krok, který vytvoří nebo aktualizuje proměnnou prostředí, nemá přístup k nové hodnotě, ale všechny následné kroky v úloze mají přístup.

Tady je příklad:

steps:
  - name: Set the value
    id: step_one
    run: |
      echo "action_state=yellow" >> "$GITHUB_ENV"
  - name: Use the value
    id: step_two
    run: |
      printf '%s\n' "$action_state" # This will output 'yellow'

Přidání ochrany prostředí

Můžete přidat pravidla ochrany pro prostředí definovaná pro vaše úložiště GitHub.

Chcete-li přidat prostředí ve svém úložišti:

  1. Vyberte Nastavení.

    Nabídková lišta webového rozhraní s kartami, jako jsou Kód, Úkoly a Wiki; Nastavení je zvýrazněno.

  2. V levém podokně vyberte Prostředí.

    Snímek obrazovky s nabídkou Nastavení v části Obecné s oddíly pro Přístup, Kód a automatizaci, Zabezpečení a Integrace Možnost Prostředí je zvýrazněná.

  3. Výběrem tlačítka Nové prostředí přidejte a nakonfigurujte prostředí a přidejte ochranu.

    Snímek obrazovky se stránkou Nastavení úložiště GitHub zobrazující oddíl Prostředí se zprávou, že neexistují žádná prostředí, a zvýrazněným tlačítkem Nové prostředí

Informace o prostředích

Pomocí prostředí můžete popsat obecný cíl nasazení, jako je produkční, přípravný nebo vývoj. Když se pracovní postup GitHub Actions nasadí do prostředí, zobrazí se prostředí na hlavní stránce úložiště. Pomocí prostředí můžete vyžadovat schválení úlohy pro pokračování, omezit, které větve můžou aktivovat pracovní postup, regulovat nasazení pomocí vlastních pravidel ochrany nasazení nebo omezit přístup k tajným informacím.

Každá úloha v pracovním postupu může odkazovat na jedno prostředí. Všechna pravidla ochrany, která nastavíte pro prostředí, musí projít, než je úloha odkazující na prostředí odeslána spouštěči. Úloha má přístup k tajným kódům prostředí až po odeslání úlohy do spouštěče.

Když pracovní postup odkazuje na prostředí, prostředí se zobrazí v nasazeních daného úložiště.

Pravidla ochrany prostředí

Pravidla ochrany nasazení prostředí vyžadují, aby určité podmínky byly splněny před tím, než úloha, která odkazuje na prostředí, pokračuje. Pomocí pravidel ochrany nasazení můžete vyžadovat ruční schválení, zpozdit úlohu nebo omezit prostředí na konkrétní větve. Můžete také vytvořit a implementovat vlastní pravidla ochrany využívající GitHub Apps, která používají partnerské systémy k řízení nasazení, která odkazují na prostředí nakonfigurovaná na GitHubu.

Tady je vysvětlení těchto pravidel ochrany:

  • Požadovaná pravidla ochrany revidujících Toto pravidlo použijte k požadování schválení úkolů v rámci pracovního procesu konkrétní osobou nebo týmem, které se odkazují na prostředí. Jako revidujícím můžete uvést až šest uživatelů nebo týmů. Kontroloři musí mít k úložišti alespoň oprávnění ke čtení. Aby mohli pokračovat, musí úlohu schválit jenom jeden požadovaný kontrolor.

    Můžete také zabránit vlastním kontrolám nasazení do chráněného prostředí. Pokud toto nastavení povolíte, uživatelé, kteří zahájí nasazení, nemůžou schválit úlohu nasazení, i když jsou požadovaným schvalovatelem. Povolením samoobslužných kontrol zajistíte, že nasazení do chráněných prostředí zkontroluje více než jedna osoba.

    Další informace o přezkoumání úloh, které odkazují na prostředí se stanovenými recenzenty, naleznete v části Kontrola nasazení.

  • Pravidla projekce časovače čekání Pomocí pravidla ochrany časovače čekání můžete zpozdit úlohu po určitou dobu po počáteční aktivaci úlohy před zahájením nasazení prostředí. Doba (v minutách) musí být celé číslo mezi 1 a 43 200 (30 dny). Doba čekání se nezapočítává do fakturovatelného času.

  • Pravidla ochrany větví a značek. Pomocí pravidel ochrany větví a značek pro nasazení můžete omezit, které větve a značky se používají k nasazení do prostředí. Pro větev nasazení a pravidla ochrany značek pro prostředí máte několik možností.

    • Žádné omezení nenastavuje žádné omezení, pro kterou větev nebo značku se dá nasadit do prostředí.
    • Chráněné větve pouze umožňují nasazení do prostředí jen větvím s aktivovanými pravidly ochrany větví. Pokud nejsou pro žádnou větev v úložišti definována žádná pravidla ochrany větví, můžou se nasadit všechny větve. Nastavení Vybraných větví a značek zajišťuje, že do prostředí se můžou nasadit jenom větve a značky, které odpovídají zadaným vzorům názvů.
    • Pokud zadáte releases/* jako větev nasazení nebo pravidlo značky, může se do prostředí nasadit jenom větev nebo značka s názvem, který začíná releases/ . (Zástupné znaky se neshodují s /. Pokud chcete spárovat větve nebo značky, které začínají release/ a obsahují jiné jedno lomítko, použijte release/*/*.) Pokud přidáte main jako pravidlo větve, může se do prostředí nasadit také větev pojmenovaná main.
  • Vlastní pravidla ochrany nasazení Můžete vytvořit vlastní pravidla ochrany pro brány nasazení, která budou používat partnerské služby. Můžete například použít systémy pozorovatelnosti, systémy správy změn, systémy kvality kódu nebo jiné ruční konfigurace, které používáte k vyhodnocení připravenosti a poskytování automatizovaných schválení pro nasazení na GitHub.

    Po vytvoření vlastních pravidel ochrany nasazení a jejich instalaci do úložiště můžete povolit vlastní pravidlo ochrany nasazení pro jakékoli prostředí v úložišti.

    Snímek obrazovky se stránkou Nastavení pro konfiguraci prostředí Environment1 s možnostmi pro revidující, časovač čekání, vlastní pravidla a omezení větví

Poznámka:

Pokud máte plán GitHubu Free, GitHub Pro nebo GitHub Team, pravidla projekce nasazení prostředí jsou dostupná jenom pro veřejná úložiště; s výjimkou pravidel ochrany větví a značek. Pro uživatele, kteří mají plány GitHub Pro nebo GitHub Team, jsou pro privátní úložiště dostupná také pravidla ochrany větví a značek.

Skripty v pracovním postupu

V předchozích příkladech run fragmentu pracovního postupu se klíčové slovo používá k tisku řetězce textu. run Vzhledem k tomu, že klíčové slovo dává úloze pokyn ke spuštění příkazu na spouštěči, použijete run klíčové slovo ke spuštění akcí nebo skriptů.

jobs:
  example-job:
    steps:
      - run: npm install -g bats

V tomto příkladu použijete npm k instalaci bats balíčku pro testování softwaru pomocí klíčového run slova. Skript můžete také spustit jako akci. Skript můžete uložit do úložiště, často provedené v .github/scripts/ adresáři, a pak zadat cestu a typ prostředí pomocí klíčového run slova.

jobs:
  example-job:
    steps:
      - name: Run build script
        run: ./.github/scripts/build.sh
        shell: bash