Sobes.tech
Junior

O que são webhooks no processo de CI/CD?

sobes.tech IA

Resposta da IA

Webhooks em CI/CD são pedidos HTTP POST automatizados enviados de uma aplicação para outra quando ocorre um evento específico.

No contexto de CI/CD, eles atuam como gatilhos. Por exemplo, num evento push num repositório Git, o webhook envia uma notificação ao sistema CI/CD (Jenkins, GitLab CI, GitHub Actions, etc.). Este sistema, ao receber a notificação, inicia automaticamente um pipeline (compilação, testes, implantação).

Componentes principais:

  • Fonte do evento: Sistema onde o evento ocorre (por exemplo, um repositório Git).
  • URI do webhook: Endereço URL para onde é enviado o pedido HTTP POST. Este endereço pertence ao sistema receptor (CI/CD).
  • Payload: Dados sobre o evento, transmitidos no corpo do pedido HTTP POST (por exemplo, informações sobre o commit, branch).
  • Sistema receptor: Sistema CI/CD que processa o webhook e inicia ações.

Vantagens do uso:

  • Automatização: Elimina a execução manual de processos.
  • Reatividade: O pipeline inicia-se imediatamente após o evento, garantindo um feedback mais rápido.
  • Baixa carga: O sistema receptor não precisa consultar constantemente a fonte (polling).

Exemplo de trabalho com GitHub Actions:

  1. Na configuração do repositório no GitHub, adiciona-se um webhook apontando para o endpoint do GitHub Actions.
  2. O desenvolvedor faz um git push.
  3. O GitHub, ao detectar o evento push, envia uma requisição HTTP POST (webhook) ao endpoint especificado do GitHub Actions.
  4. O GitHub Actions recebe o webhook, analisa o payload e inicia o workflow correspondente.
# Exemplo de workflow no GitHub Actions, acionado por push

name: CI Pipeline

on:
  push:
    branches:
      - main # Executar no push para o branch main

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2 # Clonar o repositório

      - 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