Hogyan hozhatok létre munkafolyamatokat a GitHub Actions használatával a CI-hez?

Befejezett

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:

  • Munkafolyamat létrehozása sablonból.
  • Az újrahasználható munkafolyamatok használatával elkerülheti a duplikációt.
  • Teszt több célon.
  • Build és teszt feladatok elkülönítése.

Munkafolyamat létrehozása sablonból

Munkafolyamat létrehozásához gyakran sablont használunk. A sablonban gyakori feladatok és lépések vannak előre konfigurálva a implementálható automatizálás adott típusához. Ha nem ismeri a munkafolyamatokat, a feladatokat és a lépéseket, tekintse meg a fejlesztési feladatok automatizálását a GitHub Actions modul használatával .

A GitHub-adattár főoldalán válassza a Műveletek, majd az Új munkafolyamat lehetőséget.

A Munkafolyamat kiválasztása lapon számos sablontípus közül választhat. Ilyen például a Node.js sablon. A Node.js sablon telepíti Node.js és minden függőséget, létrehozza a forráskódot, és teszteket futtat a Node.jskülönböző verzióihoz. Egy másik példa a Python-csomagsablon , amely telepíti a Pythont és annak függőségeit, majd teszteket futtat, beleértve a lintet is a Python több verziójában.

A Node.js munkafolyamat-sablonnal való kezdéshez írja be a keresőmezőbe a Node.js.

Képernyőkép a GitHub Actions lapról, kiemelve a keresőmezővel és a Node.jsszöveggel.

A keresési eredményekben a Node.js panelen válassza a Konfigurálás lehetőséget.

Képernyőkép a GitHub Actions lapról, amelyen a Node.js ablaktábla van kiemelve, és a Konfigurálás gomb ki van jelölve.

A program létrehoz egy node.js.yml fájlt a projekthez a sablonból:

name: Node.js CI

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [14.x, 16.x, 18.x]

    steps:
    - uses: actions/checkout@v3
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'
    - run: npm ci
    - run: npm run build --if-present
    - run: npm test

Ahogy az attribútumban látható, ez a on példa-munkafolyamat az adattárba irányuló leküldésre vagy a főágon létrehozott lekéréses kérelemre válaszul fut.

Ez a munkafolyamat egy feladatot futtat, amelyet az job attribútum jelez.

A runs-on attribútum azt határozza meg, hogy az operációs rendszer esetében a munkafolyamat ubuntu-latestfut. Az node-version attribútum három buildet határoz meg, egyet a Node.js 14.x, 16.x és 18.x verzióhoz. Az matrix attribútumot a modul későbbi részében részletesen ismertetjük.

Az attribútumban a jobs lépések a GitHub Actions actions/checkout@v3 művelettel lekérik a kódot az adattáradból egy virtuális gépre, és actions/setup-node@v3 segítségével a Node.jsmegfelelő verzióját állítják be. Az attribútum használatával ${{ matrix.node-version }} megadhatja, hogy a Node.js három verzióját szeretné tesztelni. Ez az attribútum a korábban definiált mátrixra hivatkozik. A cache attribútum megad egy csomagkezelőt az alapértelmezett könyvtárban való gyorsítótárazás céljából.

A lépés utolsó része olyan parancsokat hajt végre, amelyeket Node.js projektek használnak. A npm ci parancs telepíti a fájlból származó package-lock.json függőségeket. npm run build --if-present Futtat egy build scriptet, ha létezik. npm test futtatja a tesztelési keretrendszert. Ez a sablon a buildelési és tesztelési lépéseket is tartalmazza ugyanabban a feladatban.

Ha többet szeretne megtudni az npm-ről, tekintse meg az npm dokumentációját:

A fejlesztők csapata élvezheti az újrafelhasználható munkafolyamatok használatát az ismétlődő automatizálási lépések egyszerűsítése és szabványosítása érdekében. Az újrafelhasználható munkafolyamatok használatával csökkentheti a redundanciát, javíthatja a karbantarthatóságot, és konzisztenciát biztosíthat a folyamatos integrációs/folyamatos üzembe helyezési (CI/CD) folyamatokban.

Az újrahasználható munkafolyamatok használatával elkerülheti a duplikációt

Ahogy a csapatok méreteznek és a projektek növekednek, gyakori, hogy ugyanazok a lépések ismétlődnek több munkafolyamat-fájlban. Ezek a lépések magukban foglalhatják a kód kivételét, a függőségek telepítését, a tesztelést és az üzembe helyezést. Az ilyen típusú duplikációk nem csak a kódbázist zavarják, hanem növelik a karbantartási időt is, amikor kódmódosításra van szükség. Az újrahasználható munkafolyamatok úgy oldják meg ezt a problémát, hogy lehetővé teszik az automatizálási logika egyszer történő definiálását, majd meghívják a logikát más munkafolyamatokból.

Az újrahasználható munkafolyamatok speciális GitHub Actions-munkafolyamatok, amelyeket más munkafolyamatok is meghívhatnak, hasonlóan a programozás funkcióihoz. Ezeket ismétlődő logikák, például buildelési lépések, tesztelési eljárások vagy üzembehelyezési stratégiák megosztására hozhatja létre. Miután létrehozott egy újrafelhasználható munkafolyamatot, hivatkozhat rá bármely más munkafolyamatból ugyanabban az adattárban vagy akár különböző adattárakban is.

A GitHub Actionsben az újrahasználható munkafolyamatok fogalmát bemutató ábra. Egy központi munkafolyamatra több adattár vagy munkafolyamat is hivatkozhat.

Miért érdemes újrahasználható munkafolyamatokat használni?

Az újrafelhasználható munkafolyamatok használatának előnyei:

  • Konzisztencia. A Teams minden projektben ugyanazokat az automatizálási szabványokat tudja követni.
  • Hatékonyság. A lépések másolása és beillesztése helyett csak egy újrafelhasználható munkafolyamatra mutat.
  • Egyszerűbb frissítések. Amikor egy folyamat megváltozik, például egy tesztlépés hozzáadásával, azt egy helyen frissítheti. Ezután a munkafolyamatot használó összes munkafolyamat automatikusan előnyöket élvez.
  • Skálázhatóság. Az újrahasználható munkafolyamatok ideálisak több szolgáltatást kezelő platform- vagy DevOps-csapatok számára.

A következő lépésben megtudhatja, hogyan használhat újrahasználható munkafolyamatokat a projektek fejlesztéséhez.

Újrafelhasználható munkafolyamatok implementálása

Újrafelhasználható munkafolyamatok használata:

  1. Az adattár mappájában hozzon létre egy újrafelhasználható munkafolyamatot. A fájl tartalmazza a megosztani kívánt automatizálási lépéseket, például a tesztelés, az építés és az üzembe helyezés gyakori lépéseit.
  2. Explicit módon engedélyezheti a munkafolyamatok újrafelhasználását az workflow_call esemény konfigurálásával.
  3. A fő munkafolyamatokban (hívó munkafolyamatokban) hivatkozzon erre az újrafelhasználható fájlra, és adja meg a szükséges bemeneteket vagy titkos kulcsokat.

Az újrafelhasználható munkafolyamatok előnyeinek szemléltetéséhez vegye figyelembe a következő valós forgatókönyvet.

példa

Tegyük fel, hogy a szervezetnek 10 mikroszolgáltatása van. Mind a 10 mikroszolgáltatásnak ugyanazokat a lépéseket kell elvégeznie:

  • Tesztek futtatása
  • Lint-kód
  • Üzembe helyezés egy adott környezetben

Az újrafelhasználható munkafolyamatok nélkül minden adattár ugyanazt a logikát duplikálja több munkafolyamatfájlban, ami ismétlődő lépésekhez és nehezebb karbantartáshoz vezet.

Ha újrahasználható munkafolyamatokat használ:

  • A folyamatot egyszer egy központi fájlban (például a következőben) határozhatja meg ci-standard.yml.
  • Ezt a fájlt minden mikroszolgáltatás saját munkafolyamatából hívhatja meg, és változókat, például környezetet vagy alkalmazásnevet ad át.

Ha új biztonsági lépést vagy eszközt ad hozzá, például biztonsági réseket keres, csak egyszer adja hozzá az újrahasználható munkafolyamathoz. Mind a 10 mikroszolgáltatás azonnal megkezdi a frissített folyamat használatát. Nem kell módosítania a 10 mikroszolgáltatást.

Az újrafelhasználható munkafolyamatok működésének és előnyeinek megismerésével ajánlott eljárásokat alkalmazhat a hatékonyság maximalizálása és a CI/CD-folyamatok zökkenőmentes integrációjának biztosítása érdekében.

Ajánlott eljárások

  • Az újrafelhasználható munkafolyamatokat egyetlen adattárban központosíthatja, ha csapatonként szeretné megosztani őket.
  • Ágak vagy címkék használatával verziószámozhatja a munkafolyamatokat (például használhatja @v1), így szükség esetén egyszerűen visszaállíthatja a módosításokat.
  • Dokumentumbemenetek és titkos kódok egyértelműen. Az újrahasználható munkafolyamatok gyakran bemenetekre és titkos kódokra támaszkodnak. A csapatoknak tudniuk kell, hogy milyen információkat kell használniuk.
  • Ha csak néhány lépést kell újra felhasználnia, kombinálja az újrafelhasználható munkafolyamatokat összetett műveletekkel ahelyett, hogy teljes munkafolyamatot hoz létre.

Az újrahasználható munkafolyamatok hatékony módszert jelentenek a konzisztencia kikényszerítésére, a duplikációk csökkentésére és a DevOps-eljárások skálázására bármely mérnöki csapatban. Akár egyetlen adattárat, mikroszolgáltatást vagy nyílt forráskódú tárat kezel, az újrafelhasználható munkafolyamatok egyszerűsíthetik az automatizálást, így a CI/CD gyorsabb, tisztább és könnyebben kezelhető.

Munkafolyamat-sablonok testreszabása

A modul elején egy olyan forgatókönyvet tekintett át, amelyben be kell állítania a CI-t a fejlesztői csapat számára. A Node.js sablon nagyszerű kiindulópont, de testre szeretné szabni, hogy jobban megfeleljen a csapat követelményeinek. A Node.js és a különböző operációs rendszerek különböző verzióit szeretné megcélzni. Azt is szeretné, hogy a buildelési és tesztelési lépések külön feladatok legyenek.

Íme egy példa egy testre szabott munkafolyamatra:

strategy:
  matrix:
    os: [ubuntu-latest, windows-latest]
    node-version: [16.x, 18.x]

Ebben a példában egy buildmátrixot konfigurál több operációs rendszer és nyelvi verzió teszteléséhez. Ez a mátrix négy buildet hoz létre, egyet minden operációs rendszerhez, és párosítja az Node.jsminden egyes verziójával.

Négy build és a tesztek nagy mennyiségű naplóadatot hoznak létre. Lehet, hogy nehéz rendezni az egészet. Az alábbi példában a tesztlépést egy dedikált tesztfeladatra helyezi át. Ez a feladat több célon is tesztel. A buildelési és tesztelési lépések elkülönítése megkönnyíti a naplóadatok kezelését.

test:
  runs-on: ${{ matrix.os }}
  strategy:
    matrix:
      os: [ubuntu-latest, windows-latest]
      node-version: [16.x, 18.x]
  steps:
  - uses: actions/checkout@v3
  - name: Use Node.js ${{ matrix.node-version }}
    uses: actions/setup-node@v3
    with:
      node-version: ${{ matrix.node-version }}
  - name: npm install, and test
    run: |
      npm install
      npm test
    env:
      CI: true