Munkafolyamat testreszabása környezeti változókkal

Befejezett

Ebben a leckében megtudhatja, hogyan konfigurálhatja és kezelheti a környezetspecifikus viselkedést változók, környezetek és egyéni szkriptek használatával a GitHub Actions-munkafolyamatokban.

Ennek a folyamatnak a végrehajtásához megtanulhatja, hogyan:

  • Alapértelmezett és egyéni környezeti változók használata.
  • Környezetfüggő információk elérése munkafolyamatokban.
  • Környezeti változók beállítása különböző munkafolyamat-hatókörökben.
  • Használjon egyéni szkripteket a futtatási kulcsszóval.
  • Alkalmazzon környezetvédelmi intézkedéseket a telepítésekhez.

Alapértelmezett környezeti változók és környezetek

A GitHub Actions munkafolyamatban számos alapértelmezett környezeti változó használható, de csak a feladatot végrehajtó futón belül. Ezek az alapértelmezett változók megkülönböztetik a kis- és nagybetűket, és a rendszer és az aktuális felhasználó konfigurációs értékeire hivatkoznak. Javasoljuk, hogy ezeket az alapértelmezett környezeti változókat használja a fájlrendszerre való hivatkozáshoz a nem rögzített fájlelérési utak használata helyett. Alapértelmezett környezeti változó használatához adja meg $ a környezeti változó nevét.

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

Az alapértelmezett környezeti változók mellett a definiált változókat környezetként is használhatja. A környezetek és az alapértelmezett változók abban hasonlítanak, hogy mindkettő hozzáférést biztosít a környezeti információkhoz, de van néhány fontos különbségük. Bár az alapértelmezett környezeti változók csak a futón belül használhatók, a környezeti változókat a munkafolyamat bármely pontján használhatja. A környezeti változók például lehetővé teszik egy utasítás futtatását egy if kifejezés kiértékeléséhez a futó végrehajtása előtt.

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"

Ez a példa a github.ref környezet használatával ellenőrzi a munkafolyamatot aktiváló ágat. Ha az ág az main, a futó végrehajtódik, és kiírja: "Üzembe helyezés az éles kiszolgálón, az ágon $GITHUB_REF." A futó az alapértelmezett környezeti változót $GITHUB_REF használja az ágra való hivatkozáshoz. Figyelje meg, hogy az alapértelmezett környezeti változók mind nagybetűsek, ahol a környezeti változók mind kisbetűsek.

A munkafolyamatban rendelkezésre álló kontextusbeli információk

Környezetek használatával hozzáférhet a munkafolyamat-futtatásokra, változókra, futókörnyezetekre, feladatokra és lépésekre vonatkozó információkhoz. Minden kontextus olyan objektum, amely olyan tulajdonságokat tartalmaz, amelyek más objektumok vagy karakterláncok lehetnek. Az elérhető környezetek közé tartozik a github, env, vars, job, jobs, steps, runnersecrets, strategy, matrix, , needsés inputs.

Az alábbi táblázat a munkafolyamat-környezeteket és -leírásokat sorolja fel:

Kontextus Leírás
github A munkafolyamat futtatásával kapcsolatos információk. További információ: github környezet.
env A munkafolyamatban, feladatban vagy lépésben beállított változókat tartalmazza. További információ: env környezet.
vars Az adattár, a szervezet vagy a környezet szintjén beállított változókat tartalmazza. További információ: vars környezet.
job Információk az éppen futó feladatról. További információ: job környezet.
jobs Csak újrafelhasználható munkafolyamatok esetén az újrahasználható munkafolyamatból származó feladatok kimeneteit tartalmazza. További információ: jobs környezet.
steps Információk az aktuális feladatban futtatott lépésekről. További információ: steps környezet.
runner Az aktuális feladatot futtató futó adatai. További információ: runner környezet.
secrets A munkafolyamat-futtatáshoz elérhető titkos kódok nevét és értékeit tartalmazza. További információ: secrets környezet.
strategy Információk az aktuális feladat mátrix-végrehajtási stratégiájáról. További információ: strategy környezet.
matrix A munkafolyamatban definiált mátrixtulajdonságokat tartalmazza, amelyek az aktuális feladatra vonatkoznak. További információ: matrix környezet.
needs Az aktuális feladat függőségeként definiált összes feladat kimenetét tartalmazza. További információ: needs környezet.
inputs Egy újrafelhasználható vagy manuálisan aktivált munkafolyamat bemeneteit tartalmazza. További információ: inputs környezet.

A munkafolyamat-futtatás során különböző környezetek érhetők el különböző időpontokban. Például a secrets környezetet csak egy munkán belül, adott helyeken használhatja. Emellett egyes függvényeket, például a hashFiles függvényt is csak bizonyos helyeken használhatja.

Az alábbi táblázat a munkafolyamat egyes környezeteinek és speciális függvényeinek korlátozásait sorolja fel. A felsorolt környezetek csak a megadott munkafolyamat-kulcshoz érhetők el. Máshol nem használhatja őket. A függvényeket bárhol használhatja, hacsak nem szerepel az alábbi táblázatban.

Munkafolyamat-kulcs Kontextus Speciális függvények
run-name \, \, \ Egyik sem
concurrency \, \, \ Egyik sem
env github, secrets, inputsvars Egyik sem
jobs.<job_id>.concurrency github, needs, strategy, matrixinputsvars Egyik sem
jobs.<job_id>.container github, needs, strategy, matrixvarsinputs Egyik sem
jobs.<job_id>.container.credentials github, needs, strategy, matrixenv, vars, secretsinputs Egyik sem
jobs.<job_id>.container.env.<env_id> github, needs, strategy, matrix, jobrunner, env, vars, , secretsinputs Egyik sem
jobs.<job_id>.container.image github, needs, strategy, matrixvarsinputs Egyik sem
jobs.<job_id>.continue-on-error github, needs, strategy, varsmatrixinputs Egyik sem
jobs.<job_id>.defaults.run github, needs, strategy, matrixenv, varsinputs Egyik sem
jobs.<job_id>.env github, needs, strategy, matrixvars, secretsinputs Egyik sem
jobs.<job_id>.environment github, needs, strategy, matrixvarsinputs Egyik sem
jobs.<job_id>.environment.url github, needs, strategy, matrix, jobrunner, env, vars, , stepsinputs Egyik sem
jobs.<job_id>.if github, needs, varsinputs always, canceled, successfailure
jobs.<job_id>.name github, needs, strategy, matrixvarsinputs Egyik sem
jobs.<job_id>.outputs.<output_id> github, needs, strategy, matrix, jobrunner, env, vars, secrets, , stepsinputs Egyik sem
jobs.<job_id>.runs-on github, needs, strategy, matrixvarsinputs Egyik sem
jobs.<job_id>.secrets.<secrets_id> github, needs, strategy, matrixsecrets, inputsvars Egyik sem
jobs.<job_id>.services github, needs, strategy, matrixvarsinputs Egyik sem
jobs.<job_id>.services.<service_id>.credentials github, needs, strategy, matrixenv, vars, secretsinputs Egyik sem
jobs.<job_id>.services.<service_id>.env.<env_id> github, needs, strategy, matrix, jobrunner, env, vars, , secretsinputs Egyik sem
jobs.<job_id>.steps.continue-on-error github, needs, strategy, matrix, jobrunner, env, vars, secrets, , stepsinputs hashFiles
jobs.<job_id>.steps.env github, needs, strategy, matrix, jobrunner, env, vars, secrets, , stepsinputs hashFiles
jobs.<job_id>.steps.if github, needs, strategy, matrix, jobrunner, env, vars, , stepsinputs always, canceled, success, failure, , hashFiles
jobs.<job_id>.steps.name github, needs, strategy, matrix, jobrunner, env, vars, secrets, , stepsinputs hashFiles
jobs.<job_id>.steps.run github, needs, strategy, matrix, jobrunner, env, vars, secrets, , stepsinputs hashFiles
jobs.<job_id>.steps.timeout-minutes github, needs, strategy, matrix, jobrunner, env, vars, secrets, , stepsinputs hashFiles
jobs.<job_id>.steps.with github, needs, strategy, matrix, job, runner, env, vars, secrets, , stepsinputs hashFiles
jobs.<job_id>.steps.working-directory github, needs, strategy, matrix, job, runner, env, vars, secrets, , stepsinputs hashFiles
jobs.<job_id>.strategy github, igények, vars, inputs Egyik sem
jobs.<job_id>.timeout-minutes github, needs, strategy, matrixvarsinputs Egyik sem
jobs.<job_id>.with.<with_id> github, needs, strategy, matrixinputsvars Egyik sem
on.workflow_call.inputs.<inputs_id>.default \, \, \ Egyik sem
on.workflow_call.outputs.<output_id>.value github, feladatok, vars, inputs Egyik sem

Egyéni környezeti változók

Az alapértelmezett környezeti változókhoz hasonlóan egyéni környezeti változókat is használhat a munkafolyamat-fájlban. Egyéni változó létrehozásához meg kell határoznia azt a munkafolyamat-fájlban a env környezet használatával. Ha egy futón belüli környezeti változó értékét szeretné használni, használhatja a futó operációs rendszer normál metódusát a környezeti változók olvasásához.

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

Egyéni környezeti változók beállítása munkafolyamatban

A munkafolyamat-fájl legfelső szintjén található környezetváltozókat a teljes munkafolyamatra env kiterjedően definiálhatja. A munkafolyamat feladatainak tartalmát a jobs.<job_id>.env elem használatával határozza meg. A környezeti változókat egy adott lépésben hatókörbe helyezheti egy feladaton belül a használatával jobs.<job_id>.steps[*].env.

Íme egy példa, amely egy munkafolyamat-fájl mindhárom forgatókönyvét mutatja be:

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

Alapértelmezett környezet használata munkafolyamatban

A GitHub platform alapértelmezett környezeti változókat állít be. Ezek nincsenek definiálva egy munkafolyamatban, de egy munkafolyamatban az alapértelmezett környezeti változót a megfelelő környezetben használhatja. A változók többsége, a CI kivételével, GITHUB_* vagy RUNNER_*-val kezdődik. Az utóbbi két típus nem írható felül. Emellett ezek az alapértelmezett változók egy megfelelő és hasonló nevű környezeti tulajdonságot is rendelkeznek. Az alapértelmezett változók sorozatának például RUNNER_* egyező környezeti tulajdonsága runner.*van.

Íme egy példa a munkafolyamat alapértelmezett változóinak elérésére az alábbi módszerek alkalmazásával:

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."

További információ: Alapértelmezett környezeti változók.

Egyéni környezeti változók átadása munkafolyamatnak

Egyéni környezeti változókat a munkafolyamat-feladatok egyik lépésétől a feladat későbbi lépéseiig adhat át. Hozzon létre egy értéket egy feladat egy lépésében, és rendelje hozzá az értéket egy meglévő vagy új környezeti változóhoz. Ezután megírja a változó/érték párot a GITHUB_ENV környezeti fájlba. A környezeti fájlt egy műveletben vagy a munkafolyamat-feladat rendszerhéjparancsából használhatja a run kulcsszó használatával.

A környezeti változót létrehozó vagy frissíteni kívánt lépés nem rendelkezik hozzáféréssel az új értékhez, de a feladat minden további lépése rendelkezik hozzáféréssel.

Íme egy példa:

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'

Környezetvédelem hozzáadása

A GitHub-adattárhoz definiált környezetekhez hozzáadhat védelmi szabályokat.

Környezet hozzáadásához az adattárban:

  1. Válassza a Beállítások lehetőséget.

    Egy webes felület menüsávja olyan lapokkal, mint a Kód, a Problémák és a Wiki; A beállítások ki van emelve.

  2. A bal oldali panelen válassza a Környezet lehetőséget.

    Képernyőkép az Általános beállítások menüről az Access, a Kód és az Automatizálás, a Biztonság és az Integráció szakaszokkal. A Környezetek lehetőség ki van emelve.

  3. Kattintson az Új környezet gombra egy környezet hozzáadásához és konfigurálásához, valamint a védelem hozzáadásához.

    Képernyőkép a GitHub adattár beállításai lapjáról, amelyen a Környezetek szakasz látható, és egy üzenet jelzi, hogy nincsenek környezetek, és ki van emelve egy Új környezet gomb.

Tudnivalók a környezetekről

Környezetek használatával határozhatja meg az általános üzembe helyezési célokat, például az éles üzemet, az előkészítést vagy a fejlesztést. Amikor egy GitHub Actions-munkafolyamat üzembe helyez egy környezetet, a környezet megjelenik az adattár főoldalán. Környezetek használatával jóváhagyást kérhet egy feladat folytatásához, korlátozhatja, hogy mely ágak indíthatnak el munkafolyamatokat, egyéni üzembehelyezési védelmi szabályokkal kapuzhatja az üzembe helyezéseket, vagy korlátozhatja a titkos kulcsokhoz való hozzáférést.

A munkafolyamat minden egyes feladata egy környezetre hivatkozhat. Bármelyik védelmi szabálynak, amit a környezethez beállítasz, át kell mennie, mielőtt a feladatot, ami a környezetre hivatkozik, a futónak küldik. A feladat csak akkor férhet hozzá a környezet titkos kulcsaihoz, ha a feladat el lett küldve egy futónak.

Amikor egy munkafolyamat egy környezetre hivatkozik, a környezet megjelenik az adattár üzemelő példányaiban.

Környezetvédelmi szabályok

A környezettelepítési védelmi szabályoknak meghatározott feltételeknek kell teljesülniük, mielőtt a környezetre hivatkozó feladat folytatódik. Az üzembehelyezési védelmi szabályok segítségével manuális jóváhagyást igényelhet, késleltethet egy feladatot, vagy korlátozhatja a környezetet adott ágakra. A GitHub-alkalmazások által vezérelt egyéni védelmi szabályokat is létrehozhat és bevezethet, amelyek lehetővé teszik, hogy partnerrendszerekkel vezérelje azokat az ütemezéseket, amelyek a GitHubon konfigurált környezetekre hivatkoznak.

Az alábbi védelmi szabályok magyarázata:

  • Kötelező véleményezők védelmi szabályai. Ezzel a szabálysal megkövetelheti, hogy egy adott személy vagy csapat jóváhagyja a környezetre hivatkozó munkafolyamat-feladatokat. Legfeljebb hat felhasználót vagy csapatot sorolhat fel véleményezőként. A véleményezőknek legalább olvasási engedélyekkel kell rendelkezniük az adattárhoz. Csak egy szükséges felülvizsgálónak kell jóváhagynia a feladatot a folytatáshoz.

    Ön azt is megakadályozhatja, hogy a telepítések önellenőrzései történjenek meg a védett környezetbe való telepítéskor. Ha engedélyezi ezt a beállítást, az üzembe helyezést kezdeményező felhasználók nem hagyhatják jóvá az üzembe helyezési feladatot, még akkor sem, ha kötelező véleményezők. Az önálló ellenőrzések engedélyezésével biztosíthatja, hogy több mint egy személy tekintse át a telepítéseket a védett környezetekben.

    Az olyan feladatok felülvizsgálatáról, amelyek a szükséges felülvizsgálókkal rendelkező környezetekre hivatkoznak, lásd az üzembe helyezés felülvizsgálata című cikket.

  • Várakozási időzítő vetítési szabályai. A várakozási időzítő védelmi szabályával késleltethet egy feladatot egy adott ideig, miután a feladat először aktiválódott, mielőtt a környezet üzembe helyezése folytatódik. Az időnek (percben) 1 és 43 200 (30 nap) közötti egész számnak kell lennie. A várakozási idő nem számít bele a számlázható időbe.

  • Ág- és címkevédelmi szabályok. Az üzembehelyezési ág és a címkevédelmi szabályok segítségével korlátozhatja, hogy mely ágakat és címkéket használja a környezetbe való üzembe helyezéshez. Az üzembehelyezési ág és a környezet címkevédelmi szabályaira több lehetőség is rendelkezésre áll.

    • Nincs korlátozás , amely nem korlátozza, hogy melyik ág vagy címke helyezhető üzembe a környezetben.
    • A védett ágak csak azokat az ágakat engedélyezik, amelyeken engedélyezve van az ágvédelmi szabályok telepítése a környezetben. Ha az adattár egyik ágához sem határoznak meg ágvédelmi szabályokat, akkor az összes ág üzembe helyezhető. A Kijelölt ágak és címkék beállítás biztosítja, hogy csak a megadott névmintáknak megfelelő ágak és címkék helyezhetők üzembe a környezetben.
    • Ha üzembehelyezési ágként vagy címkeszabályként adja meg releases/* , csak egy olyan ág vagy címke helyezhető üzembe a környezetben, amelynek a nevével releases/ kezdődik. (Joker karakterek nem egyeznek meg /-val. Ha olyan ágakat vagy címkéket szeretne egyeztetni, amelyek release/-vel kezdődnek és egy másik perjelet tartalmaznak, használja release/*/*.) Ha main-ot ágszabályként ad hozzá, egy main nevű ág is telepíthető a környezetben.
  • Egyéni üzembehelyezési védelmi szabályok. Egyéni védelmi szabályokat hozhat létre az üzembe helyezések futtatásának szabályozására a partnerszolgáltatások használatához. Használhat például megfigyelhető rendszereket, változáskezelési rendszereket, kódminőségi rendszereket vagy más manuális konfigurációkat, amelyekkel felmérheti a készültséget, és automatikus jóváhagyásokat adhat a GitHubon történő üzembe helyezésekhez.

    Miután létrehozta az egyéni üzembehelyezési védelmi szabályokat, és telepítette őket egy adattárban, engedélyezheti az egyéni üzembehelyezési védelmi szabályt az adattár bármely környezetéhez.

    Képernyőkép a Környezet1 konfigurálására szolgáló Beállítások lapról a véleményezők, a várakozási időzítő, az egyéni szabályok és az ágkorlátozások beállításaival.

Megjegyzés:

Ha Ingyenes GitHub-, GitHub Pro- vagy GitHub-csapatcsomaggal rendelkezik, a környezet üzembehelyezési előrejelzési szabályai csak nyilvános tárházakhoz érhetők el; az ág- és címkevédelmi szabályok kivételével. A GitHub Pro- vagy GitHub-csapatcsomagokkal rendelkező felhasználók számára az ág- és címkevédelmi szabályok privát adattárakhoz is elérhetők.

Szkriptek a munkafolyamatban

Az előző munkafolyamat-kódrészletek példáiban a run kulcsszó egy szöveges sztring nyomtatására szolgál. Mivel a run kulcsszó arra utasítja a feladatot, hogy hajtson végre egy parancsot a futón, a run kulcsszóval műveleteket vagy szkripteket futtathat.

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

Ebben a példában az npm használatával telepíti a bats szoftvertesztelési csomagot a run kulcsszó használatával. Egy szkriptet műveletként is futtathat. A szkriptet tárolhatja az adattárban, gyakran egy .github/scripts/ könyvtárban, majd megadhatja az elérési utat és a rendszerhéj típusát a run kulcsszó használatával.

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