Munkafolyamatok kezelése és hibakeresése a GitHub Actionsben
Ne feledje, hogy a cél a kód összeállítási és közzétételi folyamatának automatizálása, hogy a funkciók minden alkalommal frissüljenek, amikor egy fejlesztő módosítja a kódbázist.
Ennek a folyamatnak a végrehajtásához elsajátíthatja a következő lépéseket:
- Azonosítsa a munkafolyamatot kiváltó eseményt.
- Használja a GitHub Actions munkafolyamat-naplóit.
- Build-artifaktumok mentése és elérése.
- A véleményezést követően automatizálhatja a címke hozzáadását egy lekéréses kérelemhez.
A munkafolyamatot kiváltó esemény azonosítása
A GitHub Actions-munkafolyamatok működésének megértése kulcsfontosságú a CI/CD-folyamatok hibakereséséhez, naplózásához és fejlesztéséhez. Az eseményindítók típusa lehet például egy leküldés egy ágba, egy létrehozott vagy frissített lekéréses kérelem, egy ütemezett feladat vagy egy manuális küldés. Az eseményindító esemény azonosításához vizsgálja meg a munkafolyamat futtatását, az adattár módosításait, valamint a kapcsolódó GitHub-problémát vagy lekéréses kérelmet.
Mi az a munkafolyamat-eseményindító?
A munkafolyamat-eseményindító olyan esemény, amely egy munkafolyamat futtatását okozza. A GitHub különböző típusú eseményindítókat támogat, például:
-
pushvagypull_request(kódmódosítások alapján) -
workflow_dispatch(manuális eseményindító) -
schedule(cron-feladatok) -
repository_dispatch(külső rendszerek) - Hibák, viták és pull request események (például
issues.opened,pull_request.closed)
Az eseményindító esemény azonosítása
A munkafolyamat-eseményindítók eseményét többféleképpen is azonosíthatja:
Használja a GitHub Actions felhasználói felületét:
- Az adattárban válassza a Műveletek lapot.
- Válasszon ki egy munkafolyamat-futtatási lehetőséget.
A munkafolyamat-futtatási összegzés tetején megjelenik egy eseménytípus, például
pushpull_request, vagyworkflow_dispatch.Használja
github.event_namea naplókban vagy munkafolyamatokban.A GitHub környezeti adatokat tesz elérhetővé egy munkafolyamat futtatása során. A
github.event_nameváltozó azt jelzi, hogy melyik esemény váltotta ki a munkafolyamatot.A hibakereséshez egy lépésben kinyomtathatja az információkat:
-name: Show event trigger run: echo "Triggered by ${{ github.event_name }}"
A munkafolyamat futtatási részleteinek használata:
- Ha programozott módon( például API használatával) vizsgálja meg a munkafolyamat-futtatásokat, a futtatási objektum tartalmaz egy
eventtulajdonságot, amely meghatározza az eseményindítót. - Megtalálhatja a véglegesítési biztonságos kivonatoló algoritmust (SHA), az aktort és az időbélyeget az eseményindító okának nyomon követéséhez.
- Ha programozott módon( például API használatával) vizsgálja meg a munkafolyamat-futtatásokat, a futtatási objektum tartalmaz egy
Az eseményindító következtetése az adattár effektusaiból
Előfordulhat, hogy nem rendelkezik közvetlen hozzáféréssel a munkafolyamat-futtatáshoz, de továbbra is azt szeretné kikövetkeztetni, hogy mi váltotta ki a munkafolyamat futtatását az adattártevékenység alapján:
| Megfigyelt viselkedés | Eseményindító |
|---|---|
A rendszer leküldött egy új véglegesítést, main és a munkafolyamat lefutott. |
push esemény |
| A rendszer megnyitott vagy frissített egy lekéréses kérelmet. |
pull_request esemény |
| Egy közreműködő manuálisan futtatott egy munkafolyamatot. | workflow_dispatch |
| A munkafolyamat naponta, adott időpontban fut. |
schedule (cron) |
| A munkafolyamat egy külső szolgáltatáshívás után futott. | repository_dispatch |
| A munkafolyamat akkor futott le, amikor címkét vagy megjegyzést adtak hozzá egy problémához. |
issues.* esemény |
A timestampok, a pull requestek aktivitásának és a commit történetének áttekintésével gyakran megállapíthatja, hogy melyik művelet indította el a munkafolyamatot.
A munkafolyamatot kiváltó folyamat azonosításának összegzése:
- Ellenőrizze a munkafolyamat-futtatás összegzését a Műveletek lapon.
- Nyomtassa ki vagy jelentkezzen be
github.event_namea munkafolyamatba a láthatóság érdekében. - Hasonlítsa össze az időbélyegeket és az adattár aktivitását (commit-eket, lekéréses kérelmeket, problémákat), hogy következtetést vonjon le az indító okról.
- A részletesebb vizsgálathoz használja a teljes
eventkontextust.
Ezek a gyakorlatok segítenek a munkafolyamatok megbízhatóságának hibakeresésében, naplózásában és javításában a fejlesztési és üzembehelyezési folyamatokban.
Munkafolyamat-effektus megismerése a konfigurációs fájl olvasásával
A munkafolyamat konfigurációs fájljának olvasásából származó hatásainak megértéséhez elemezze a fájl .ymlstruktúráját és tartalmát..github/workflows/
A munkafolyamat konfigurációs fájlja a következő információkat adja meg a munkafolyamatról:
- Amikor fut (a
onszakaszban). - Mit csinál (
jobséssteps). - Hol fut (a
runs-onszakasz). - Miért fut (a célja, például tesztelés, üzembe helyezés vagy linting).
- Hogyan viselkedik adott körülmények között (környezet, szűrők, logika).
Munkafolyamat-effektus értelmezése
Azonosítsa az eseményindítót.
A munkafolyamatot kezdeményező művelet azonosításához tekintse meg a
onmunkafolyamat szakaszát.Például:
on: push: branches: [main] pull_request: types: [opened, synchronize] workflow_dispatch:Ez a példa munkafolyamat:
- A kód fő ágba (
push) való leküldésekor automatikusan lefut. - Lekéréses kérelem létrehozásakor vagy frissítésekor (
pull_request) fut. - A felhasználó (
workflow_dispatch) manuálisan aktiválhatja.
- A kód fő ágba (
Azonosítsa a munkafolyamat-feladatokat és lépéseket.
A munkafolyamat feladatának meghatározásához tekintse meg a
jobsmunkafolyamat szakaszait ésstepsszakaszait.Például:
jobs: test: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Install dependencies run: npm install - name: Run tests run: npm testEz a példa munkafolyamat:
- Linux rendszerű virtuális környezetet (
runs-on) használ. - Ellenőrzi az adattár kódját (
steps>name). - Telepíti a projektfüggőségeket (
steps>name). - Automatizált teszteket futtat (
steps>name).
- Linux rendszerű virtuális környezetet (
Értékelje ki a munkafolyamat célját és eredményét.
A konfigurációs fájl elolvasásával leírhatja a munkafolyamat kívánt eredményét:
"Ez a munkafolyamat egy folyamatos integrációs (CI) folyamat. Biztosítja, hogy a rendszer automatikusan tesztelje az adattárba leküldött vagy lekéréses kérelemmel elküldött új kódot. Ha a tesztek sikertelenek, a GitHub munkafolyamat felhasználói felülete megjeleníti ezt az eredményt a kódminőség fenntartása érdekében."
A munkafolyamat működését befolyásoló választható funkciók azonosítása vagy beállítása:
-
envkörnyezeti változókat állít be. -
ifFeltételes logikát ad hozzá, hogy csak feltételek teljesülése esetén futtasson bizonyos lépéseket. -
timeout-minutesvagycontinue-on-errorállítsa be a munkafolyamat-végrehajtást és a hibakezelést.
-
Sikertelen munkafolyamat-futtatás diagnosztizálása
Az adattárban lépjen a Műveletek lapra .
Keresse meg a sikertelen futtatást, amelyet általában egy piros X jelöl.
Válassza ki a sikertelen munkafolyamatot a futtatási összegzés megnyitásához.
A munkafolyamat-naplókban tekintse át a hibát.
A futtatási összegzésben bontsa ki az egyes feladatokat és lépéseket, amíg meg nem találja a hibát jelzőt.
Válassza ki a feladatot vagy a lépést a naplóinak megtekintéséhez.
Keresse a következőt:
- Hibaüzenetek
- Veremnyomok
- Kilépési kódok
Előfordulhat például, hogy egy sikertelen teszt jelenik meg
npm ERR! Test failedvagyexit code 1.Ellenőrizze a munkafolyamat konfigurációs fájlját.
Használja a
.ymlfájlt annak meghatározására:- Minden egyes lépés mit próbált elérni?
- Ha vannak olyan környezeti változók (
env) vagy feltételes (if), amelyek befolyásolják a végrehajtást. - Ha a hiba oka egy hiányzó függőség, szintaktikai hiba vagy helytelenül konfigurált lépés.
Ha egy lépés meghiúsul, ellenőrizze a következő okokat:
- Sikeresen telepítettek függőségeket az előző lépésben?
- Léteznek tesztfájlok, és helyileg sikeresen futnak?
Gyakori hibaforgatókönyvek
Az alábbi táblázat a munkafolyamatok gyakori meghibásodási forgatókönyveit ismerteti:
| Tünet | Valószínű ok |
|---|---|
Egy lépés sikertelen, és visszaadja az command not foundl értéket |
Hiányzó függőség vagy helytelen beállítás |
npm install Megbukik. |
Sérült package-lock.json fájl vagy hálózati probléma |
| A tesztelési lépés meghiúsul | Egységtesztelési problémák, hiányzó konfigurációs fájl vagy érvénytelen tesztszintaxis |
Permission denied Jelenik meg. |
Helytelen fájlengedélyek vagy hiányzó titkos kódok |
Munkafolyamat-naplók elérése a GitHubon
Az adattárban lépjen a Műveletek lapra .
A munkafolyamatok listájában válassza ki a megfelelő munkafolyamatot.
Ha például a
.ymlfájl a következő kóddal rendelkezik, megjelenik egy CI-munkafolyamat nevű hivatkozás a listában:name: CI WorkflowVálasszon ki egy adott futtatási lehetőséget.
Az állapotot megjelenítő futtatások listájában válassza ki az ellenőrizni kívánt futtatás időbélyegét vagy véglegesítési üzenetét.
Bontsa ki az egyes feladatokat és lépéseket.
A futtatási összefoglaló lapon a munkafolyamat-fájlban meghatározott feladatok jelennek meg, például építés vagy tesztelés.
- Jelöljön ki egy feladatot a kibontásához.
- A feladaton belül bontsa ki az egyes lépéseket, például a "Függőségek telepítése" vagy a "Tesztek futtatása" elemet.
Naplókimenet megtekintése.
A teljes naplókimenet megtekintéséhez, beleértve a konzolnaplókat, a hibaüzeneteket és a hibakeresési információkat, válasszon egy munkafolyamat-lépést. A naplókat másolhatja, keresheti és letöltheti.
Az alábbi táblázat összefoglalja a munkafolyamat-naplók elérésének lépéseit:
| Tevékenység | Cél |
|---|---|
| Műveletek lap | Az összes munkafolyamat-futtatás megtekintése. |
| Válassza ki a munkafolyamat nevét | A szűrés munkafolyamatok szerint fut. |
| Válasszon egy futtatást | Adott feladat és lépés eredményeinek megtekintése. |
| Lépések kibontása | Részletes naplók megtekintése. |
| Naplók letöltése | Töltse le a naplókat offline vagy csapatszintű hibaelhárításhoz. |
A build műveleti naplói
Amikor egy munkafolyamat fut, létrehoz egy naplót, amely tartalmazza a történtek részleteit, valamint az esetleges hibákat vagy tesztelési hibákat.
Ha hiba történik, vagy ha egy teszt sikertelen, a naplókban zöld pipa helyett piros X jelenik meg. Megvizsgálhatja a hibát vagy a kudarc részleteit, hogy kiderítse, mi történt.
Műtárgyak kezelése
Ha egy munkafolyamat nem naplóbejegyzést hoz létre, a terméket összetevőnek nevezzük. A Node.js build például üzembe helyezhető Docker-tárolót hoz létre. A konténer egy artifaktum, amelyet a műveletek/upload-artifact művelet használatával feltölthet a tárhelyre. A műveletek/download-artifact használatával később letöltheti az artefaktumot a tárhelyről.
A megőrzött artefaktum segít a feladatok között. Minden feladat egy virtuális gép friss példányát használja, így nem használhatja újra az összetevőt a virtuális gépre való mentéssel. Ha az összetevőre egy másik feladatban van szüksége, feltöltheti az összetevőt a tárolóba az egyik feladatban, és letöltheti a másik feladathoz.
Műtárgy-tároló
Az összetevők a GitHub tárhelyén vannak tárolva. A nyilvános adattárak számára a tárhely ingyenes, a fióktól függően pedig a privát tárházak számára is ingyenes. A GitHub 90 napig tárolja az összetevőket.
A következő munkafolyamat-kódrészletben figyelje meg, hogy a actions/upload-artifact@main műveletben van egy path attribútum. Ennek az attribútumnak az értéke az artefaktum tárolásának elérési útja. Ebben a példában a public/ könyvtárba ad meg mindent feltöltésre. Ha csak egyetlen fájlt szeretne feltölteni, használjon nyilvános vagymytext.txt.
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: npm install and build webpack
run: |
npm install
npm run build
- uses: actions/upload-artifact@main
with:
name: webpack artifacts
path: public/
Az összetevő teszteléshez való letöltéséhez a buildnek sikeresen le kell fejeződnie, és fel kell töltenie az összetevőt. Az alábbi kódban adja meg, hogy a tesztfeladat a buildelési feladattól függ.
test:
needs: build
runs-on: ubuntu-latest
A következő munkafolyamat-kódrészletben letölti az összetevőt. A tesztfeladat most már használhatja az összetevőt tesztelésre.
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@main
with:
name: webpack artifacts
path: public
Az összetevők munkafolyamatokban való használatával kapcsolatos további információkért tekintse meg a munkafolyamat-adatok összetevőként való tárolását ismertető témakört.
Felülvizsgálatok automatizálása a GitHubon munkafolyamatok használatával
Amellett, hogy elindít egy munkafolyamatot a GitHub-eseményeken keresztül, például push és pull-request, egy munkafolyamatot ütemezés szerint vagy egy GitHubon kívüli esemény után is futtathat.
Előfordulhat, hogy azt szeretné, hogy egy munkafolyamat csak akkor fusson, ha egy felhasználó végrehajt egy adott műveletet, például miután egy felülvizsgáló jóváhagy egy lekéréses kérelmet. Ebben a forgatókönyvben aktiválhatja a következőt pull-request-review: .
Egy másik művelet, amelyet elvégezhet, ha címkét ad hozzá a lekéréses kérelemhez. Ebben az esetben használja a pullreminders/label-when-approved-action műveletet.
Például:
steps:
- name: Label when approved
uses: pullreminders/label-when-approved-action@main
env:
APPROVALS: "1"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ADD_LABEL: "approved"
A blokkban env beállítja a művelet környezeti változóit. Beállíthatja például a munkafolyamat futtatásához szükséges jóváhagyók számát. Ebben a példában ez az egyik. A secrets.GITHUB_TOKEN hitelesítési változóra azért van szükség, mert a műveletnek címkével kell módosítania az adattárat. Végül adja meg a hozzáadni kívánt címke nevét.
A címke hozzáadása olyan esemény lehet, amely egy másik munkafolyamatot, például egyesítést indít el. Ezt az eseményt a következő modulban ismertetjük, amely a GitHub Actions folyamatos kézbesítését ismerteti.