Sobes.tech
Junior

Ce sunt webhook-urile în procesul CI/CD?

sobes.tech AI

Răspuns de la AI

Webhook-urile în CI/CD sunt solicitări HTTP POST automatizate trimise dintr-o aplicație în alta atunci când apare un anumit eveniment.

În contextul CI/CD, acestea acționează ca trigger-e. De exemplu, la un eveniment push într-un repository Git, webhook-ul trimite o notificare sistemului CI/CD (Jenkins, GitLab CI, GitHub Actions etc.). Acest sistem, primind notificarea, pornește automat un pipeline (build, testare, deployment).

Componente principale:

  • Sursa evenimentului: Sistemul unde are loc evenimentul (de exemplu, repository Git).
  • URI-ul webhook-ului: Adresa URL către care se trimite solicitarea HTTP POST. Această adresă aparține sistemului receptor (CI/CD).
  • Payload: Date despre eveniment, transmise în corpul solicitării HTTP POST (de exemplu, informații despre commit, branch).
  • Sistemul receptor: Sistemul CI/CD care procesează webhook-ul și inițiază acțiuni.

Avantaje ale utilizării:

  • Automatizare: Elimină pornirea manuală a proceselor.
  • Reactivitate: Pipeline-ul pornește imediat după eveniment, asigurând un feedback mai rapid.
  • Încărcare redusă: Sistemul receptor nu are nevoie să interogheze constant sursa (polling).

Exemplu de lucru cu GitHub Actions:

  1. În setările repository-ului pe GitHub se adaugă un webhook care indică către endpoint-ul GitHub Actions.
  2. Dezvoltatorul face un git push.
  3. GitHub, detectând evenimentul push, trimite o solicitare HTTP POST (webhook) către endpoint-ul specificat al GitHub Actions.
  4. GitHub Actions primește webhook-ul, analizează payload-ul și pornește workflow-ul corespunzător.
# Exemplu de workflow în GitHub Actions, declanșat de push

name: CI Pipeline

on:
  push:
    branches:
      - main # Se declanșează la push pe branch-ul main

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2 # Clonarea repository-ului

      - name: Setup Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '14'

      - name: Install dependencies
        run: npm ci

      - name: Run tests
        run: npm test