Munkafolyamat testreszabása környezeti változókkal
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:
Válassza a Beállítások lehetőséget.
A bal oldali panelen válassza a Környezet lehetőséget.
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.
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évelreleases/kezdődik. (Joker karakterek nem egyeznek meg/-val. Ha olyan ágakat vagy címkéket szeretne egyeztetni, amelyekrelease/-vel kezdődnek és egy másik perjelet tartalmaznak, használjarelease/*/*.) Hamain-ot ágszabályként ad hozzá, egymainnevű á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.
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