Particularizarea fluxului de lucru cu variabile de mediu
În această unitate, veți afla cum să configurați și să gestionați comportamentul specific mediului utilizând variabile, contexte și scripturi particularizate în fluxurile de lucru Acțiuni GitHub.
Pentru a implementa acest proces, veți afla cum să:
- Utilizați variabile de mediu implicite și particularizate.
- Accesarea informațiilor contextuale în fluxurile de lucru.
- Setați variabile de mediu la diferite domenii de flux de lucru.
- Utilizați scripturi particularizate cu cuvântul cheie rulare.
- Aplicați protecții de mediu pentru implementări.
Variabile și contexte implicite de mediu
În fluxul de lucru Acțiuni GitHub, sunt disponibile mai multe variabile de mediu implicite pe care să le utilizați, dar numai în cadrul alergătorului care execută o activitate. Aceste variabile implicite sunt sensibile la litere mari și mici și se referă la valorile de configurare pentru sistem și pentru utilizatorul curent. Vă recomandăm să utilizați aceste variabile de mediu implicite pentru a face referire la sistemul de fișiere în loc să utilizați căi de fișier cu codare hard. Pentru a utiliza o variabilă de mediu implicită, specificați $ urmat de numele variabilei de mediu.
jobs:
prod-check:
steps:
- run: echo "Deploying to production server on branch $GITHUB_REF"
În plus față de variabilele implicite de mediu, puteți utiliza variabile definite ca contexte. Contextele și variabilele implicite sunt similare, pentru că ambele oferă acces la informațiile despre mediu, dar au câteva diferențe importante. Deși variabilele implicite de mediu pot fi utilizate numai în cadrul rulării, puteți utiliza variabile de context în orice moment din fluxul de lucru. De exemplu, variabilele contextuale vă permit să rulați o instrucțiune if pentru a evalua o expresie înainte de executarea alergătorului.
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"
Acest exemplu utilizează github.ref context pentru a verifica ramura care a declanșat fluxul de lucru. Dacă ramura este main, rulatorul este executat și imprimă "Se implementează pe serverul de producție pe ramura $GITHUB_REF". Variabila $GITHUB_REF de mediu implicită este utilizată în runner pentru a face referire la ramură. Observați că variabilele implicite de mediu sunt majuscule, unde variabilele contextuale sunt toate mici.
Informații contextuale disponibile într-un flux de lucru
Utilizați contexte pentru a accesa informații despre rularea fluxului de lucru, variabilele, mediile de rulare, activitățile și pașii. Fiecare context este un obiect care conține proprietăți care pot fi alte obiecte sau șiruri. Contextele disponibile includ github, , , envvars, job, jobs, steps, runnersecretsstrategy, matrix, needsși .inputs
Următorul tabel listează contextele și descrierile fluxului de lucru:
| Context | Descriere |
|---|---|
github |
Informații despre rularea fluxului de lucru. Pentru mai multe informații, consultați github contextul. |
env |
Conține variabile pe care le setați într-un flux de lucru, o activitate sau un pas. Pentru mai multe informații, consultați env contextul. |
vars |
Conține variabile pe care le setați la nivel de depozit, organizație sau mediu. Pentru mai multe informații, consultați vars contextul. |
job |
Informații despre activitatea în curs de rulare. Pentru mai multe informații, consultați job contextul. |
jobs |
Doar pentru fluxurile de lucru reutilizabile, conține ieșiri ale lucrărilor din fluxul de lucru reutilizabil. Pentru mai multe informații, consultați jobs contextul. |
steps |
Informații despre pașii care au rulat în activitatea curentă. Pentru mai multe informații, consultați steps contextul. |
runner |
Informații despre alergător care rulează activitatea curentă. Pentru mai multe informații, consultați runner contextul. |
secrets |
Conține numele și valorile secretelor disponibile pentru rularea unui flux de lucru. Pentru mai multe informații, consultați secrets contextul. |
strategy |
Informații despre strategia de executare a matricei pentru activitatea curentă. Pentru mai multe informații, consultați strategy contextul. |
matrix |
Conține proprietățile matricei definite în fluxul de lucru care se aplică activității curente. Pentru mai multe informații, consultați matrix contextul. |
needs |
Conține rezultatele tuturor lucrărilor care sunt definite ca dependență a activității curente. Pentru mai multe informații, consultați needs contextul. |
inputs |
Conține intrările unui flux de lucru reutilizabil sau declanșat manual. Pentru mai multe informații, consultați inputs contextul. |
Contextele diferite sunt disponibile în momente diferite într-un flux de lucru care rulează. De exemplu, puteți utiliza secrets contextul doar în anumite locuri dintr-o activitate. De asemenea, puteți utiliza unele funcții, cum ar fi funcția hashFiles , doar în anumite locuri.
Următorul tabel listează restricțiile pentru fiecare context și funcție specială dintr-un flux de lucru. Contextele listate sunt disponibile doar pentru cheia de flux de lucru indicată. Nu le puteți utiliza în alt loc. Puteți utiliza o funcție oriunde dacă nu este listată în tabelul următor.
| Cheie flux de lucru | Context | Funcții speciale |
|---|---|---|
run-name |
github, , inputsvars |
Niciunul |
concurrency |
github, , inputsvars |
Niciunul |
env |
github, secrets, inputs, vars |
Niciunul |
jobs.<job_id>.concurrency |
github, needs, strategy, matrix, inputsvars |
Niciunul |
jobs.<job_id>.container |
github, needs, strategy, matrix, varsinputs |
Niciunul |
jobs.<job_id>.container.credentials |
github, needs, strategymatrixenvvarssecretsinputs |
Niciunul |
jobs.<job_id>.container.env.<env_id> |
github, , needs, strategy, matrix, jobrunner, env, vars, , , secretsinputs |
Niciunul |
jobs.<job_id>.container.image |
github, needs, strategy, matrix, varsinputs |
Niciunul |
jobs.<job_id>.continue-on-error |
github, needs, strategy, vars, matrixinputs |
Niciunul |
jobs.<job_id>.defaults.run |
github, needs, , strategymatrix, envvars,inputs |
Niciunul |
jobs.<job_id>.env |
github, needs, , strategymatrix, varssecrets,inputs |
Niciunul |
jobs.<job_id>.environment |
github, needs, strategy, matrix, varsinputs |
Niciunul |
jobs.<job_id>.environment.url |
github, , needs, strategy, matrix, jobrunner, env, vars, , , stepsinputs |
Niciunul |
jobs.<job_id>.if |
github, needs, vars, inputs |
always, canceled, success, failure |
jobs.<job_id>.name |
github, needs, strategy, matrix, varsinputs |
Niciunul |
jobs.<job_id>.outputs.<output_id> |
github, , needs, , strategymatrix, jobrunner, env, vars, secrets, , stepsinputs |
Niciunul |
jobs.<job_id>.runs-on |
github, needs, strategy, matrix, varsinputs |
Niciunul |
jobs.<job_id>.secrets.<secrets_id> |
github, needs, , strategymatrix, secretsinputs,vars |
Niciunul |
jobs.<job_id>.services |
github, needs, strategy, matrix, varsinputs |
Niciunul |
jobs.<job_id>.services.<service_id>.credentials |
github, needs, strategymatrixenvvarssecretsinputs |
Niciunul |
jobs.<job_id>.services.<service_id>.env.<env_id> |
github, , needs, strategy, matrix, jobrunner, env, vars, , , secretsinputs |
Niciunul |
jobs.<job_id>.steps.continue-on-error |
github, , needs, , strategymatrix, jobrunner, env, vars, secrets, , stepsinputs |
hashFiles |
jobs.<job_id>.steps.env |
github, , needs, , strategymatrix, jobrunner, env, vars, secrets, , stepsinputs |
hashFiles |
jobs.<job_id>.steps.if |
github, , needs, strategy, matrix, jobrunner, env, vars, , , stepsinputs |
always, canceledsuccess, , failure,hashFiles |
jobs.<job_id>.steps.name |
github, , needs, , strategymatrix, jobrunner, env, vars, secrets, , stepsinputs |
hashFiles |
jobs.<job_id>.steps.run |
github, , needs, , strategymatrix, jobrunner, env, vars, secrets, , stepsinputs |
hashFiles |
jobs.<job_id>.steps.timeout-minutes |
github, , needs, , strategymatrix, jobrunner, env, vars, secrets, , stepsinputs |
hashFiles |
jobs.<job_id>.steps.with |
github, needs, , strategy, matrixjob, runner, , env, vars, secrets, stepsinputs |
hashFiles |
jobs.<job_id>.steps.working-directory |
github, needs, , strategy, matrixjob, runner, , env, vars, secrets, stepsinputs |
hashFiles |
jobs.<job_id>.strategy |
github, nevoi, vars, inputs |
Niciunul |
jobs.<job_id>.timeout-minutes |
github, needs, strategy, matrix, varsinputs |
Niciunul |
jobs.<job_id>.with.<with_id> |
github, needs, strategy, matrix, inputsvars |
Niciunul |
on.workflow_call.inputs.<inputs_id>.default |
github, , inputsvars |
Niciunul |
on.workflow_call.outputs.<output_id>.value |
github, locuri de muncă, vars, inputs |
Niciunul |
Variabile de mediu particularizate
Similar cu utilizarea variabilelor implicite de mediu, puteți utiliza variabile de mediu particularizate în fișierul flux de lucru. Pentru a crea o variabilă particularizată, trebuie să o definiți în fișierul flux de lucru utilizând env context. Dacă doriți să utilizați valoarea unei variabile de mediu în interiorul unui alergător, puteți utiliza metoda normală a sistemului de operare pentru citirea variabilelor de mediu.
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
Setarea variabilelor de mediu particularizate într-un flux de lucru
Aveți posibilitatea să definiți variabile de mediu care sunt definite pentru întregul flux de lucru, utilizând env la nivelul superior al fișierului flux de lucru. Întindeți conținutul unei activități dintr-un flux de lucru utilizând jobs.<job_id>.env. Puteți să întindeți o variabilă de mediu la un anumit pas dintr-o activitate, utilizând jobs.<job_id>.steps[*].env.
Iată un exemplu care afișează toate cele trei scenarii dintr-un fișier de flux de lucru:
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
Utilizarea unui context implicit într-un flux de lucru
Platforma GitHub setează variabile de mediu implicite. Acestea nu sunt definite într-un flux de lucru, dar puteți utiliza o variabilă de mediu implicită într-un flux de lucru în contextul corespunzător. Cele mai multe dintre aceste variabile, altele decât CI, începe cu GITHUB_* sau RUNNER_*. Ultimele două tipuri nu pot fi suprascrise. De asemenea, aceste variabile implicite au o proprietate de context corespunzătoare și denumită similar. De exemplu, RUNNER_* seria de variabile implicite au o proprietate contextuală corespunzătoare pentru runner.*.
Iată un exemplu despre cum să accesați variabilele implicite dintr-un flux de lucru, aplicând aceste metode:
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."
Pentru mai multe informații, consultați Variabile implicite de mediu.
Trecerea variabilelor de mediu particularizate la un flux de lucru
Puteți trece variabilele de mediu particularizate de la un pas al unei activități de flux de lucru la pașii următori din activitate. Generați o valoare într-un pas al unei activități și atribuiți valoarea unei variabile de mediu existente sau noi. În continuare, scrieți perechea variabilă/valoare la fișierul de mediu GITHUB_ENV. Puteți utiliza fișierul de mediu într-o acțiune sau dintr-o comandă shell din activitatea fluxului de lucru utilizând run cuvântul cheie.
Pasul care creează sau actualizează variabila de mediu nu are acces la noua valoare, dar toți pașii următori dintr-o lucrare au acces.
Iată un exemplu:
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'
Adăugarea protecțiilor de mediu
Puteți adăuga reguli de protecție pentru mediile definite pentru depozitul dvs. GitHub.
Pentru a adăuga un mediu, în depozit:
Selectați Setări.
În panoul din stânga, selectați Mediu.
Selectați butonul Mediu nou pentru a adăuga și a configura un mediu și a adăuga protecții.
Despre medii
Utilizați medii pentru a descrie un obiectiv general de implementare, cum ar fi producția, paginarea sau dezvoltarea. Atunci când un flux de lucru Acțiuni GitHub se implementează într-un mediu, mediul apare pe pagina principală a depozitului. Puteți utiliza medii pentru a solicita aprobarea unei activități pentru a continua, a restricționa ramurile care pot declanșa un flux de lucru, implementări de poartă utilizând reguli de protecție a implementării particularizate sau puteți limita accesul la secrete.
Fiecare activitate dintr-un flux de lucru poate face referire la un mediu. Orice reguli de protecție pe care le setați pentru mediu trebuie să treacă înainte ca o activitate care face referire la mediu să fie trimisă unui alergător. Activitatea poate accesa secretele mediului numai după ce activitatea este trimisă unui alergător.
Atunci când un flux de lucru face referire la un mediu, mediul apare în implementările depozitului.
Reguli de protecție a mediului
Regulile de protecție a implementării mediului necesită condiții specifice de transfer înainte de o activitate care face referire la mediu. Puteți utiliza regulile de protecție a implementării pentru a solicita o aprobare manuală, a amâna o activitate sau a restricționa mediul la anumite ramuri. De asemenea, puteți să creați și să implementați reguli de protecție particularizate susținute de aplicațiile GitHub pentru a utiliza sistemele partenere pentru a controla implementările care fac referire la medii care sunt configurate pe GitHub.
Iată o explicație a acestor reguli de protecție:
Reguli obligatorii de protecție a recenzenților. Utilizați această regulă pentru a solicita unei anumite persoane sau unei echipe să aprobe activități de flux de lucru care fac referire la mediu. Puteți lista până la șase utilizatori sau echipe ca recenzenți. Recenzenții trebuie să aibă cel puțin permisiuni citire la depozit. Numai un recenzent necesar trebuie să aprobe activitatea pentru ca aceasta să continue.
De asemenea, puteți preveni auto-recenziile pentru implementările într-un mediu protejat. Dacă activați această setare, utilizatorii care inițiază o implementare nu pot aproba activitatea de implementare, chiar dacă sunt recenzenți necesari. Prin activarea auto-revizuirilor, se asigură că mai multe persoane revizuiesc implementările în medii protejate.
Pentru mai multe informații despre revizuirea lucrărilor care fac referire la un mediu cu recenzenții necesari, consultați Revizuirea implementărilor.
Reguli de proiectare a cronometrului de așteptare. Puteți utiliza o regulă de protecție a cronometrului de așteptare pentru a întârzia o activitate pentru o anumită perioadă de timp după ce se declanșează inițial activitatea înainte de a continua implementarea mediului. Timpul (în minute) trebuie să fie un număr întreg între 1 și 43.200 (30 de zile). Timpul de așteptare nu se contorizează în timpul facturabil.
Reguli de protecție a ramurilor și etichetelor. Puteți utiliza regulile de implementare ramură și protecție etichete pentru a restricționa ramurile și etichetele utilizate pentru a implementa în mediu. Aveți mai multe opțiuni pentru implementarea ramurii și regulile de protecție a etichetelor pentru un mediu.
- Nicio restricție nu setează nicio restricție pe ce ramură sau etichetă se poate implementa în mediu.
- Ramurile protejate permit numai ramuri cu reguli de protecție a ramurilor activate pentru implementare în mediu. Dacă nu sunt definite reguli de protecție pentru ramură pentru orice ramură din depozit, atunci toate ramurile se pot implementa. Setarea Ramuri și etichete selectate asigură doar ramurile și etichetele care corespund modelelor de nume specificate se pot implementa în mediu.
- Dacă specificați
releases/*ca regulă de implementare sau etichetă, doar o ramură sau o etichetă cu un nume care începe cureleases/poate fi implementată în mediu. (Caracterele wildcard nu se potrivesc/. Pentru a potrivi ramurile sau etichetele care încep curelease/și care conțin o altă bară oblică unică, utilizațirelease/*/*.) Dacă adăugațimainca regulă de ramură, o ramură numitămainse poate implementa și în mediu.
Reguli de protecție pentru implementarea particularizată. Puteți crea reguli de protecție particularizate pentru a implementa implementările pentru a utiliza serviciile partenere. De exemplu, puteți utiliza sisteme de observare, sisteme de gestionare a modificărilor, sisteme de calitate a codului sau alte configurații manuale pe care le utilizați pentru a evalua pregătirea și a furniza aprobări automate pentru implementări la GitHub.
După ce creați reguli de protecție a implementării particularizate și le instalați într-un depozit, puteți activa regula de protecție a implementării particularizate pentru orice mediu din depozit.
Notă
Dacă aveți un plan de echipă GitHub gratuit, GitHub Pro sau GitHub, regulile de proiectare a implementării mediului sunt disponibile doar pentru depozitele publice; cu excepția regulilor de protejare a etichetelor și a ramurilor. Pentru utilizatorii care au planuri de echipă GitHub Pro sau GitHub, regulile de ramură și de protecție a etichetelor sunt disponibile și pentru depozitele private.
Scripturi în fluxul de lucru
În exemplele precedente ale fragmentului de flux de lucru, cuvântul cheie run este utilizat pentru a imprima un șir de text. Deoarece cuvântul cheie run spune activității să execute o comandă în rulare, utilizați run cuvânt cheie pentru a rula acțiuni sau scripturi.
jobs:
example-job:
steps:
- run: npm install -g bats
În acest exemplu, utilizați npm pentru a instala bats pachetul de testare software utilizând run cuvântul cheie. De asemenea, puteți rula un script ca acțiune. Puteți să stocați scriptul în depozit, adesea efectuat într-un director .github/scripts/, apoi să furnizați calea și tipul shell utilizând cuvântul cheie run.
jobs:
example-job:
steps:
- name: Run build script
run: ./.github/scripts/build.sh
shell: bash