Sobes.tech
Junior

Cosa sono i webhook nel processo CI/CD?

sobes.tech AI

Risposta dell'AI

Gli webhook in CI/CD sono richieste HTTP POST automatizzate inviate da un'applicazione a un'altra in presenza di un evento specifico.

Nel contesto di CI/CD, fungono da trigger. Ad esempio, in un evento push in un repository Git, il webhook invia una notifica al sistema CI/CD (Jenkins, GitLab CI, GitHub Actions, ecc.). Questo sistema, ricevendo la notifica, avvia automaticamente una pipeline (build, test, deploy).

Componenti principali:

  • Fonte dell'evento: Sistema in cui si verifica l'evento (ad esempio, un repository Git).
  • URI del webhook: Indirizzo URL a cui viene inviato il richiesta HTTP POST. Questo indirizzo appartiene al sistema ricevente (CI/CD).
  • Payload: Dati sull'evento, trasmessi nel corpo della richiesta HTTP POST (ad esempio, informazioni sul commit, branch).
  • Sistema ricevente: Sistema CI/CD che elabora il webhook e avvia le azioni.

Vantaggi dell'uso:

  • Automazione: Elimina l'esecuzione manuale dei processi.
  • Reattività: Il pipeline si avvia immediatamente dopo l'evento, garantendo un feedback più rapido.
  • Bassa carica: Il sistema ricevente non necessita di interrogare costantemente la fonte (polling).

Esempio di lavoro con GitHub Actions:

  1. Nel repository su GitHub si aggiunge un webhook che punta all'endpoint di GitHub Actions.
  2. Lo sviluppatore effettua un git push.
  3. GitHub, rilevando l'evento push, invia una richiesta HTTP POST (webhook) all'endpoint specificato di GitHub Actions.
  4. GitHub Actions riceve il webhook, analizza il payload e avvia il workflow corrispondente.
# Esempio di workflow in GitHub Actions, triggerato da push

name: CI Pipeline

on:
  push:
    branches:
      - main # Esegue al push sul branch main

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

      - 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