آشنایی با trigger ها در Gitlab

در فرآیندهای DevOps و توسعه نرم‌افزار، اتوماسیون فرآیندهای تست، استقرار و انتشار نرم‌افزار اهمیت زیادی دارد. GitLab CI/CD یکی از ابزارهای قدرتمند برای این منظور است. شما می‌توانید از GitLab CI/CD برای ساختن پایپ‌لاین‌هایی که به صورت خودکار کدهایتان را تست و منتشر می‌کنند استفاده کنید. در کنار این قابلیت‌ها، ویژگی دیگری به نام trigger وجود دارد که به شما امکان می‌دهد اجرای پایپ‌لاین‌ها یا jobها را از طریق API کنترل کنید. در این مقاله ابتدا با یک مثال ساده از GitLab CI/CD آشنا می‌شویم و سپس به سراغ مفهوم trigger و کاربردهای آن خواهیم رفت.

یک مثال ساده از GitLab CI/CD

بیایید با یک مثال ساده از GitLab CI/CD شروع کنیم.

فرض کنید شما یک پروژه دارید و می‌خواهید هر بار که کدهای خود را push می‌کنید، به صورت خودکار مراحل build و test اجرا شوند. این کار با استفاده از یک فایل به نام .gitlab-ci.yml انجام می‌شود.

فایل .gitlab-ci.yml:

stages:
  - build
  - test

build_job:
  stage: build
  script:
    - echo "Building the project..."
    - make build

test_job:
  stage: test
  script:
    - echo "Running tests..."
    - make test

stages: لیستی از مراحل (مثل build و test) که در pipeline اجرا می‌شوند.

build_job: اولین job که کد شما را build می‌کند.

test_job: که job دوم بعد از build اجرا می‌شود و کد شما را تست می‌کند.

این یک پایپ‌لاین ساده است که به محض push کردن کد، GitLab آن را اجرا می‌کند و خروجی هر مرحله را به شما نشان می‌دهد.

GitLab Trigger چیست؟

گاهی نیاز دارید که کنترل بیشتری بر اجرای jobها و pipelineها داشته باشید. ممکن است بخواهید از یک پروژه دیگر pipeline اجرا کنید یا نیاز داشته باشید pipelineها را از طریق API مدیریت کنید. اینجاست که trigger وارد می‌شود.

Trigger به شما این امکان را می‌دهد که یک pipeline یا job را به صورت خودکار از طریق API اجرا کنید. این ویژگی زمانی مفید است که:

بخواهید از پروژه‌ای دیگر یک pipeline یا job را اجرا کنید.

نیاز داشته باشید pipelineها را از طریق API مدیریت کنید.

کاربردهای Trigger

Triggerها در GitLab در موارد زیر کاربرد دارند:

اجرای pipeline پروژه‌های دیگر: با استفاده از trigger می‌توانید pipeline یک پروژه دیگر را از داخل pipeline پروژه فعلی اجرا کنید.

API Trigger: شما می‌توانید از طریق API درخواست اجرای یک pipeline را ارسال کنید.

۱. اجرای Pipeline پروژه‌های دیگر با استفاده از Trigger

گاهی اوقات شما نیاز دارید که یک پروژه، pipeline یک پروژه دیگر را اجرا کند. GitLab این امکان را به شما می‌دهد که pipeline پروژه دیگری را از داخل pipeline پروژه فعلی اجرا کنید.

مثال اجرای pipeline پروژه دیگر: فرض کنید شما دو پروژه دارید:

پروژه A

پروژه B

شما می‌خواهید زمانی که pipeline پروژه A به اتمام می‌رسد، pipeline پروژه B نیز به طور خودکار اجرا شود.

فایل .gitlab-ci.yml برای پروژه A:

stages:
  - build
  - deploy

build_job:
  stage: build
  script:
    - echo "Building Project A..."

trigger_job:
  stage: deploy
  trigger:
    project: your-group/project-b  # نام پروژه B
    strategy: depend

در این مثال، build_job در مرحله build پروژه A اجرا می‌شود.

سپس، در مرحله deploy، با استفاده از trigger، pipeline پروژه B اجرا می‌شود. با تنظیم strategy: depend، pipeline پروژه A منتظر می‌ماند تا pipeline پروژه B به اتمام برسد.

۲. استفاده از API Trigger

یکی از قوی‌ترین قابلیت‌های GitLab، اجرای pipelineها از طریق API است. شما می‌توانید از طریق یک درخواست HTTP به GitLab، pipeline یا jobهای پروژه‌های خود را اجرا کنید.

مراحل تنظیم API Trigger:

وارد پروژه‌ای که می‌خواهید از طریق API اجرا کنید، شوید.

به بخش Settings > CI/CD > Pipeline triggers بروید.

یک trigger جدید ایجاد کنید. GitLab به شما یک trigger token می‌دهد.

مثال استفاده از API Trigger:

بعد از دریافت token، می‌توانید با یک درخواست API، pipeline پروژه را اجرا کنید:

curl -X POST \
  -F token=YOUR_TRIGGER_TOKEN \
  -F ref=main \
  https://gitlab.com/api/v4/projects/YOUR_PROJECT_ID/trigger/pipeline

token: توکن دریافت‌شده از GitLab.

ref: نام برنچی که می‌خواهید pipeline آن اجرا شود (مانند main).

YOUR_PROJECT_ID: شناسه پروژه.

اضافه کردن API Trigger به pipeline پروژه دیگر:

شما می‌توانید درخواست API را از طریق اسکریپت در pipeline پروژه دیگری ارسال کنید:

stages:
  - trigger

trigger_job:
  stage: trigger
  script:
    - curl -X POST -F token=YOUR_TRIGGER_TOKEN -F ref=main https://gitlab.com/api/v4/projects/YOUR_PROJECT_ID/trigger/pipeline

استراتژی‌های مختلف Trigger

در GitLab CI/CD، گزینه‌های مختلفی برای strategy وجود دارد که به شما این امکان را می‌دهد تا نحوه اجرا و وابستگی‌های jobها و pipelineها را کنترل کنید. در اینجا به بررسی استراتژی‌ها می‌پردازیم:

Strategy: depend

توضیحات: با استفاده از این استراتژی، pipeline فعلی منتظر می‌ماند تا pipeline وابسته به آن (پروژه دیگر) به پایان برسد. اگر pipeline وابسته موفقیت‌آمیز باشد، pipeline فعلی ادامه می‌یابد و اگر وابسته شکست بخورد، pipeline فعلی نیز متوقف می‌شود. کاربرد: مناسب برای مواردی که نیاز به هماهنگی بین پروژه‌ها وجود دارد.

Strategy: continue

در این حالت، pipeline فعلی پس از آغاز pipeline وابسته به کار خود ادامه می‌دهد، بدون اینکه منتظر اتمام آن باشد. نتیجه pipeline وابسته تأثیری بر اجرای pipeline فعلی نخواهد داشت.

کاربرد: زمانی که پروژه‌ها مستقل از هم کار می‌کنند.

Strategy: await

با استفاده از این استراتژی، pipeline فعلی منتظر می‌ماند تا pipeline وابسته به آن شروع شود، اما به محض شروع pipeline وابسته، بلافاصله ادامه می‌یابد.

کاربرد: زمانی که می‌خواهید اجرای pipeline فعلی متوقف شود تا pipeline وابسته آغاز شود.

Strategy: manual

در این حالت، pipeline وابسته به صورت دستی اجرا می‌شود. اجرای آن بستگی به دستورات دستی دارد.

کاربرد: برای مواردی که نیاز به تأیید انسانی برای اجرای pipeline وجود دارد.

جمع‌بندی

در این مقاله با مفهوم GitLab Trigger و نحوه استفاده از آن در پروژه‌ها آشنا شدید. GitLab با ارائه triggerها به شما امکان می‌دهد که اجرای jobها و pipelineها را هوشمندانه و انعطاف‌پذیرتر کنید. چه بخواهید از یک پروژه دیگر pipeline اجرا کنید یا از API برای اجرای خودکار استفاده کنید، triggerها ابزاری قدرتمند برای مدیریت و کنترل فرآیندهای CI/CD شما هستند. با انتخاب استراتژی مناسب برای trigger، می‌توانید هماهنگی و کنترل بیشتری بر روی پروژه‌های خود داشته باشید و فرآیندهای توسعه را بهینه‌تر کنید.

منابع :

https://krew.sigs.k8s.io https://krew.sigs.k8s.io