Cum utilizez acțiuni GitHub pentru a crea fluxuri de lucru pentru CI?

Finalizat

Rețineți că obiectivul dvs. este să automatizați procesul de generare și publicare a codului, astfel încât caracteristicile să fie actualizate de fiecare dată când un dezvoltator adaugă o modificare la baza de cod.

Pentru a implementa acest proces, veți afla cum să:

  • Creați un flux de lucru dintr-un șablon.
  • Evitați dublarea utilizând fluxuri de lucru reutilizabile.
  • Test în raport cu mai multe ținte.
  • Separați lucrările de construire și testare.

Crearea unui flux de lucru dintr-un șablon

Pentru a crea un flux de lucru, este obișnuit să începeți utilizând un șablon. Un șablon are activități comune și pași preconfigurați pentru tipul specific de automatizare pe care îl implementați. Dacă nu sunteți familiarizat cu fluxurile de lucru, lucrările și pașii, consultați Automatizarea activităților de dezvoltare utilizând modulul acțiuni GitHub.

Pe pagina principală a depozitului GitHub, selectați Acțiuni, apoi selectați Flux de lucru nou.

Pe pagina Alegeți un flux de lucru , puteți alege dintre mai multe tipuri de șabloane. Un exemplu este șablonul Node.js. ȘablonulNode.js instalează Node.js și toate dependențele, creează codul sursă și rulează teste pentru diferite versiuni de Node.js. Un alt exemplu este șablonul pachet Python , care instalează Python și dependențele sale, apoi rulează teste, inclusiv scame, în mai multe versiuni de Python.

Pentru a începe cu șablonul de flux de lucru Node.js, în caseta de căutare, introduceți Node.js.

Captură de ecran care afișează fila Acțiuni GitHub cu caseta de căutare evidențiată și cu textul Node.js.

În rezultatele căutării, în panoul Node.js , selectați Configurare.

Captură de ecran care afișează fila Acțiuni GitHub cu panoul Node.js evidențiat și butonul Configurare selectat.

Un node.js.yml fișier pentru proiectul dvs. este creat din șablon:

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

Așa cum se vede în on atribut, acest exemplu de flux de lucru rulează ca răspuns la un împingere către depozit sau atunci când se creează o solicitare de tragere în raport cu ramura principală.

Acest flux de lucru rulează o activitate, indicată job de atribut.

Atributul runs-on specifică faptul că, pentru sistemul de operare, fluxul de lucru rulează pe ubuntu-latest. Atributul node-version specifică faptul că există trei compilări, câte una pentru Node.js versiunea 14.x, 16.x și 18.x. Atributul matrix este descris în detaliu mai târziu în modul.

jobs În atribut, pașii utilizează acțiunile acțiuni GitHub/checkout@v3 acțiune pentru a obține codul din depozit într-o mașină virtuală (VM) și acțiuni/setup-node@v3 pentru a configura versiunea corectă de Node.js. Specificați că doriți să testați trei versiuni de Node.js utilizând atributul ${{ matrix.node-version }} . Acest atribut face referire la matricea definită anterior. Atributul cache specifică un manager de pachete pentru memorarea în cache în directorul implicit.

Ultima parte a acestui pas execută comenzile pe care le utilizează Node.js proiecte. Comanda npm ci instalează dependențe din package-lock.json fișier. npm run build --if-present rulează un script de compilare dacă există. npm test rulează cadrul de testare. Acest șablon include atât pașii de compilare, cât și pașii de testare din aceeași activitate.

Pentru a afla mai multe despre npm, consultați documentația npm:

O echipă de dezvoltatori poate beneficia de utilizarea fluxurilor de lucru reutilizabile pentru a simplifica și a standardiza pașii de automatizare repetați. Prin utilizarea fluxurilor de lucru reutilizabile, puteți să reduceți redundanța, să îmbunătățiți întreținerea și să asigurați consistența în fluxurile de integrare continuă/implementare continuă (CI/CD).

Evitați dublarea utilizând fluxuri de lucru reutilizabile

Pe măsură ce echipele se scalezează și se dezvoltă proiectele, este obișnuit să vedeți aceiași pași repetați în mai multe fișiere de flux de lucru. Acești pași pot include validarea codului, instalarea dependenței, testarea și implementarea. Acest tip de duplicare nu doar aglomerează baza de cod, ci crește și timpul de întreținere atunci când sunt necesare modificări de cod. Fluxurile de lucru reutilizabile rezolvă această problemă, permițându-vă să definiți logica de automatizare o dată, apoi să apelați logica din alte fluxuri de lucru.

Fluxurile de lucru reutilizabile sunt fluxuri de lucru GitHub speciale pe care alte fluxuri de lucru le pot apela, similare funcțiilor din programare. Le creați pentru a partaja logică repetată, cum ar fi pașii de construire, procedurile de testare sau strategiile de implementare. După ce creați un flux de lucru reutilizabil, îl puteți face referire din orice alt flux de lucru din același depozit sau chiar din depozite diferite.

Diagramă care afișează conceptul de fluxuri de lucru reutilizabile în Acțiuni GitHub. Mai multe depozite sau fluxuri de lucru pot face referire la un flux de lucru central.

De ce se utilizează fluxurile de lucru reutilizabile?

Acestea sunt avantajele utilizării fluxurilor de lucru reutilizabile:

  • Consistență. Teams poate respecta aceleași standarde de automatizare în toate proiectele.
  • Eficiență. În loc să copiați și să lipiți pașii, indicați spre un flux de lucru reutilizabil.
  • Actualizări mai simple. Atunci când un proces se modifică, cum ar fi prin adăugarea unui pas de test, îl actualizați într-o singură locație. Apoi, toate fluxurile de lucru care utilizează automat beneficiul fluxului de lucru.
  • Scalabilitate. Fluxurile de lucru reutilizabile sunt ideale pentru echipele Platform sau DevOps care gestionează mai multe servicii.

În continuare, explorați modul de utilizare a fluxurilor de lucru reutilizabile pentru a vă îmbunătăți proiectele.

Implementați fluxuri de lucru reutilizabile

Pentru a utiliza fluxuri de lucru reutilizabile:

  1. În folderul depozitului, creați un flux de lucru reutilizabil. Fișierul include pașii de automatizare pe care doriți să-i partajați, cum ar fi pașii comuni implicați în testarea, construirea și implementarea.
  2. Permiteți în mod explicit ca un flux de lucru să fie reutilizabil configurându-l cu workflow_call evenimentul.
  3. În fluxurile de lucru principale (fluxurile de lucru apelante), faceți referire la acest fișier reutilizabil și furnizați orice intrări sau secrete necesare.

Pentru a ilustra avantajele fluxurilor de lucru reutilizabile, luați în considerare următorul scenariu din lumea reală.

Exemplu

Imaginați-vă că organizația dvs. are 10 microservicii. Toate cele 10 microservicii au nevoie de aceiași pași pentru:

  • Rulați teste
  • Cod scame
  • Implementarea într-un anumit mediu

Fără fluxuri de lucru reutilizabile, fiecare depozit ajunge să dubleze aceeași logică în mai multe fișiere de flux de lucru, conducând la pași și întreținere mai dificilă.

Dacă utilizați fluxuri de lucru reutilizabile:

  • Definiți procesul o dată într-un fișier central (de exemplu, în ci-standard.yml).
  • Apelați acest fișier din fluxul de lucru al fiecărui microservice, trecând în variabile precum mediul sau numele aplicației.

Dacă este adăugat un nou pas de securitate sau un instrument, de exemplu, pentru a scana după vulnerabilități, îl adăugați o singură dată în fluxul de lucru reutilizabil. Toate cele 10 microservicii încep imediat să utilizeze procesul actualizat. Nu trebuie să modificați cele 10 microservicii.

Prin înțelegerea modului în care funcționează fluxurile de lucru reutilizabile și avantajele lor, puteți să adoptați cele mai bune practici pentru a maximiza eficiența acestora și a asigura integrarea fără sincope cu ductele CI/CD.

Cele mai bune practici

  • Centralizați fluxurile de lucru reutilizabile într-un singur depozit dacă intenționați să le partajați în cadrul echipelor.
  • Utilizați ramuri sau etichete pentru a vă versiunea fluxurilor de lucru (de exemplu, utilizați @v1), astfel încât să puteți readuce cu ușurință modificările dacă este necesar.
  • Intrările și secretele documentului sunt clar. Fluxurile de lucru reutilizabile se bazează adesea pe intrări și secrete. Teams trebuie să știe ce informații să utilizeze.
  • Dacă trebuie să reutilizați doar câțiva pași, combinați fluxurile de lucru reutilizabile cu acțiuni compuse în loc să creați un flux de lucru complet.

Fluxurile de lucru reutilizabile sunt o modalitate puternică de a impune consistența, a reduce dublarea și a scala practicile DevOps în orice echipă de inginerie. Indiferent dacă gestionați un singur depozit, microservicii sau biblioteci open-source, fluxurile de lucru reutilizabile pot simplifica automatizarea, astfel încât CI/CD-ul să fie mai rapid, mai curat și mai ușor de gestionat.

Particularizarea șabloanelor de flux de lucru

La începutul acestui modul, ați considerat un scenariu în care trebuie să configurați CI pentru echipa dvs. de dezvoltatori. Șablonul Node.js este un început excelent, dar doriți să-l particularizați pentru a se potrivi mai bine cerințelor echipei dvs. Doriți să vizați versiuni diferite de Node.js și sisteme de operare diferite. De asemenea, doriți ca pașii de construire și testare să fie separați de locuri de muncă.

Iată un exemplu de flux de lucru particularizat:

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

În acest exemplu, configurați o matrice de compilare pentru testare în mai multe sisteme de operare și versiuni lingvistice. Această matrice produce patru compilări, una pentru fiecare sistem de operare asociat cu fiecare versiune de Node.js.

Patru compilări și testele lor produc o cantitate mare de date jurnal. Ar putea fi dificil să le sortați pe toate. În exemplul următor, mutați pasul testului la o activitate de testare dedicată. Această lucrare testează în raport cu mai multe ținte. Separarea versiunii și a pașilor de testare vă ajută să lucrați mai ușor cu datele jurnalului.

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