Sobes.tech
Junior

CI/CD prosesində webhook-lər nədir?

sobes.tech Süni İntellekt

AI-dan cavab

CI/CD-də vebhooklar müəyyən hadisə baş verdikdə bir tətbiqdən digərinə göndərilən avtomatlaşdırılmış HTTP POST sorğularıdır.

CI/CD kontekstində onlar tetikleyici rolunu oynayır. Məsələn, Git deposunda push hadisəsi baş verdikdə, webhook CI/CD sisteminə (Jenkins, GitLab CI, GitHub Actions və s.) bildiriş göndərir. Bu sistem, bildirişi aldıqdan sonra avtomatik olaraq pipeline-ı (yığma, test, yerləşdirmə) işə salır.

Əsas komponentlər:

  • Hadisənin mənbəyi: Hadəənin baş verdiyi sistem (məsələn, Git deposu).
  • Webhook URI: HTTP POST sorğusunun göndərildiyi URL ünvanı. Bu ünvan qəbul edən sistemə (CI/CD) aiddir.
  • Payload: Hadisə haqqında məlumatlar, HTTP POST sorğusunun gövəsində ötürülür (məsələn, commit, branch haqqında məlumatlar).
  • Qəbul edən sistem: Webhook-u işləyən və əməliyyatları başlatan CI/CD sistemi.

İstifadə üstünlükləri:

  • Avtomatlaşdırma: Əl ilə işləri aradan qaldırır.
  • Reaktivlik: Hadəədən dərhal sonra pipeline işə düşür, bu da daha sürətli geribildirim təmin edir.
  • Aşağı yük: Qəbul edən sistem, mənbəni davamlı sorğulamağa ehtiyac duymur (polling).

GitHub Actions ilə işləmə nümunəsi:

  1. GitHub-da repository ayarlarında webhook əlavə edilir və bu, GitHub Actions endpoint-inə işarə edir.
  2. İnkişafçı git push edir.
  3. GitHub, push hadisəsini aşkar etdikdə, göstərilən endpoint-ə HTTP POST (webhook) göndərir.
  4. GitHub Actions webhook-u qəbul edir, payload-u analiz edir və müvafiq workflow-u işə salır.
# Push ilə tetiklenen GitHub Actions workflow nümunəsi

name: CI Pipeline

on:
  push:
    branches:
      - main # main branch-ə push edildikdə tetiklenir

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
      - name: Kodları yoxla
        uses: actions/checkout@v2 # repository-nu klonlayır

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

      - name: Asılılıqları quraşdır
        run: npm ci

      - name: Testləri işə sal
        run: npm test