Přizpůsobení pracovního postupu pomocí proměnných prostředí
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:
Vyberte Nastavení.
V levém podokně vyberte Prostředí.
Výběrem tlačítka Nové prostředí přidejte a nakonfigurujte prostředí a přidejte ochranu.
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žijterelease/*/*.) Pokud přidátemainjako 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.
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