چطور از GitLab CI/CD برای اتوماسیون استفاده کنیم؟
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 9 دقیقه

چطور از GitLab CI/CD برای اتوماسیون استفاده کنیم؟

اتوماسیون در توسعه نرم‌افزار دیگر یک گزینه نیست، بلکه یک ضرورت است. در پروژه‌هایی که به‌صورت تیمی و با کدهای پیچیده توسعه داده می‌شوند، هماهنگ‌سازی فرایندهای تست، بیلد، و استقرار، بدون ابزارهای خودکار، تقریباً غیرممکن است. یکی از راه‌حل‌های محبوب و قدرتمند برای این منظور، استفاده از GitLab CI/CD است؛ سیستمی که در دل GitLab ساخته شده و امکان تعریف، اجرا و نظارت بر پایپ‌لاین‌های CI/CD را با انعطاف بالا فراهم می‌کند.

در این مطلب، به‌صورت گام‌به‌گام با مفاهیم، اجزای کلیدی، ساختار فایل پیکربندی .gitlab-ci.yml، و شیوه‌های پیاده‌سازی پایپ‌لاین‌های CI/CD در GitLab آشنا می‌شویم. همچنین مثال‌هایی از استفاده واقعی و بهترین شیوه‌ها برای به‌کارگیری GitLab CI/CD را بررسی می‌کنیم.

GitLab CI/CD چیست و چه کاری انجام می‌دهد؟

GitLab CI/CD مجموعه‌ای از ابزارها و قابلیت‌هاست که برای یکپارچه‌سازی مداوم (Continuous Integration) و تحویل/استقرار مداوم (Continuous Delivery/Deployment) طراحی شده است. این سیستم به تیم‌ها کمک می‌کند تا تغییرات کد را به‌صورت خودکار تست، بیلد، و در محیط‌های مختلف مستقر کنند.

در گیت‌لب، CI/CD به‌صورت یکپارچه در مخزن پروژه شما تعبیه شده است. به‌محض این‌که تغییراتی در کد (مثلاً از طریق Merge Request یا Push) ایجاد شود، GitLab با استفاده از فایل پیکربندی .gitlab-ci.yml می‌تواند مجموعه‌ای از مراحل (stages) و وظایف (jobs) را اجرا کند. این وظایف می‌توانند شامل اجرا شدن تست‌های خودکار، ساختن پروژه، تحلیل استاتیک کد، بسته‌بندی (build)، و استقرار در محیط‌های staging یا production باشند.

مزیت اصلی GitLab CI/CD در سادگی و یکپارچگی آن است. شما نیازی به استفاده از ابزار جانبی یا سرویس خارجی ندارید؛ همه‌چیز از داخل GitLab قابل مدیریت است، از تعریف وظایف گرفته تا مانیتورینگ و گزارش‌گیری.

در ادامه مطلب قصد داریم با بررسی موارد زیر به‌صورت عمیق‌تری با این ابزار آشنا شویم:

  • GitLab Runner
  • فایل .gitlab-ci.yml
  • مراحل (Stages) و وظایف (Jobs)
  • متغیرها و آرتیفکت‌ها
  • مثال کامل از یک پایپ‌لاین واقعی

GitLab Runner چیست و چه نقشی در اجرای CI/CD دارد؟

GitLab Runner قلب تپنده اجرای وظایف CI/CD در GitLab است. زمانی که شما یک پایپ‌لاین تعریف می‌کنید، این Runnerها هستند که دستورها و اسکریپت‌های شما را اجرا می‌کنند. GitLab Runner یک اپلیکیشن متن‌باز است که می‌تواند روی ماشین‌های مختلف (لینوکس، ویندوز، مک یا حتی کانتینرهای داکر) نصب شود و وظایف تعریف‌شده در فایل .gitlab-ci.yml را اجرا کند. این وظایف ممکن است شامل تست، بیلد، آنالیز کد، یا استقرار باشند.

انواع GitLab Runner:

Shared Runner
این نوع توسط ادمین GitLab ارائه می‌شود و بین چند پروژه به اشتراک گذاشته می‌شود. برای پروژه‌های عمومی یا کوچک، گزینه مناسبی است.

Specific Runner
فقط برای پروژه خاصی تنظیم شده و معمولاً در سازمان‌ها برای کنترل بیشتر روی محیط اجرا، مورد استفاده قرار می‌گیرد.

نحوه کار:

هر وقت تغییری در مخزن ایجاد شود که یک پایپ‌لاین را فعال کند (مثلاً Push یا Merge Request)، GitLab یک یا چند Job را طبق فایل .gitlab-ci.yml ایجاد می‌کند. Runner یکی از این وظایف را دریافت کرده، در محیطی امن اجرا می‌کند و نتیجه را به GitLab بازمی‌گرداند.

مزیت اصلی Runnerها:

  • امکان اجرای موازی وظایف
  • اجرای وظایف در محیط‌های مختلف (Docker ،Shell ،Kubernetes ،SSH و...)
  • مقیاس‌پذیری بالا
  • کنترل دقیق‌تر روی محیط اجرا (در صورت Self-hosted بودن)

فایل .gitlab-ci.yml: ساختار، قواعد و مثال اولیه

فایل .gitlab-ci.yml ستون فقرات GitLab CI/CD است. این فایل در ریشه مخزن پروژه قرار می‌گیرد و شامل تعریف مراحل، وظایف و تنظیمات پایپ‌لاین است. GitLab با خواندن این فایل، تصمیم می‌گیرد که چه کاری، در چه زمانی، و چگونه انجام شود.

ساختار کلی فایل .gitlab-ci.yml

یک فایل ساده ممکن است ساختاری شبیه زیر داشته باشد:

stages:
  - build
  - test
  - deploy

build-job:
  stage: build
  script:
    - echo "Building the app..."

test-job:
  stage: test
  script:
    - echo "Running tests..."

deploy-job:
  stage: deploy
  script:
    - echo "Deploying to production..."

اجزای اصلی فایل:

stages
لیستی از مراحل (مانند build ،test ،deploy) که ترتیب اجرای Jobها را مشخص می‌کند.

jobs
هر Job یک وظیفه مستقل است که در یک Stage اجرا می‌شود. هر Job شامل دستورات زیر است:

  • stage: تعیین مرحله اجرا
  • script: لیستی از دستوراتی که باید اجرا شوند
  • only یا rules: مشخص می‌کند چه زمانی Job اجرا شود
  • artifacts: فایل‌هایی که باید بین مراحل حفظ شوند
  • variables: تعریف متغیرهای محلی

یک مثال کاربردی:

stages:
  - test
  - deploy

unit-tests:
  stage: test
  script:
    - npm install
    - npm test

deploy-to-staging:
  stage: deploy
  script:
    - ./deploy.sh staging
  only:
    - main

در این مثال، ابتدا تست‌ها اجرا می‌شوند. اگر موفق باشند، در صورتی که برنچ main باشد، کار استقرار انجام می‌شود.

متغیرهای GitLab CI/CD

متغیرها در GitLab CI/CD به شما اجازه می‌دهند تنظیمات حساس، پارامترهای تکراری، و مقادیر قابل پیکربندی را به‌شکل امن و قابل کنترل مدیریت کنید. استفاده درست از متغیرها باعث ساده‌تر شدن فایل‌های CI و افزایش امنیت می‌شود.

انواع متغیرها در GitLab

1. متغیرهای تعریف‌شده در فایل .gitlab-ci.yml:

شما می‌توانید متغیرها را مستقیماً درون فایل تعریف کنید:

variables:
  NODE_ENV: production
  DEPLOY_DIR: /var/www/app

2. متغیرهای محیطی در GitLab UI:

از طریق تنظیمات پروژه (Project > Settings > CI/CD > Variables) می‌توانید متغیرهای محرمانه مثل Token یا Password را تعریف کنید. این متغیرها در فایل قابل مشاهده نیستند و امن باقی می‌مانند.

3. متغیرهای پیش‌فرض GitLab:

GitLab خودش مجموعه‌ای از متغیرهای از پیش تعریف‌شده را فراهم می‌کند مثل:

  • CI_COMMIT_BRANCH
  • CI_PIPELINE_ID
  • CI_JOB_STAGE
  • CI_PROJECT_NAME
  • و ده‌ها متغیر دیگر...

مثال استفاده:

variables:
  APP_ENV: staging

deploy:
  stage: deploy
  script:
    - echo "Deploying to $APP_ENV environment"
    - ./deploy.sh $APP_ENV

نکته امنیتی:

برای مدیریت رمزها و توکن‌ها هرگز آن‌ها را درون فایل .gitlab-ci.yml ننویسید. همیشه از متغیرهای امن (Protected Environment Variables) در GitLab UI استفاده کنید.

آرتیفکت‌های GitLab CI/CD

در جریان اجرای یک پایپ‌لاین، گاهی لازم است خروجی یک مرحله (Stage) به مرحله بعدی منتقل شود. برای این منظور، GitLab از قابلیتی به نام Artifacts (آرتیفکت‌ها) استفاده می‌کند. آرتیفکت‌ها فایل‌ها یا پوشه‌هایی هستند که پس از پایان یک Job ذخیره می‌شوند و در Jobهای بعدی یا برای دانلود توسط کاربران در دسترس قرار می‌گیرند.

چرا به آرتیفکت نیاز داریم؟

مثال‌ها:

  • خروجی بیلد (مثلاً فایل اجرایی یا فایل‌های فشرده) باید به مرحله استقرار منتقل شود.
  • نتایج تست یا گزارش پوشش کد باید برای بررسی در GitLab ذخیره شود.
  • فایل‌های لاگ یا تحلیل استاتیک کد باید قابل دانلود باشند.

نحوه تعریف آرتیفکت:

build-job:
  stage: build
  script:
    - npm run build
  artifacts:
    paths:
      - dist/

در این مثال، محتوای پوشه dist/ پس از اجرای Job ذخیره می‌شود و در مراحل بعدی قابل استفاده یا دانلود است.

گزینه‌های مفید برای پیکربندی آرتیفکت‌ها:

  • paths: مسیر فایل‌ها یا پوشه‌هایی که باید ذخیره شوند
  • expire_in: مدت زمانی که آرتیفکت‌ها در GitLab باقی می‌مانند (مثلاً 1 week)
  • when: تعیین زمان ذخیره آرتیفکت (مثلاً always یا on_success)

مثال پیشرفته:

test-job:
  stage: test
  script:
    - npm test --coverage
  artifacts:
    paths:
      - coverage/
    expire_in: 2 days
    when: always

آرتیفکت‌ها ابزار کلیدی برای ساخت پایپ‌لاین‌های حرفه‌ای و منعطف هستند؛ بدون آن‌ها، اطلاعات بین مراحل گم می‌شود.

اتوماسیون استقرار (Automated Deployment) با GitLab CI/CD

یکی از مهم‌ترین و کاربردی‌ترین قابلیت‌های CI/CD، استقرار خودکار (Deployment Automation) است؛ یعنی اینکه پس از تست موفق کد، برنامه به‌طور خودکار به محیط‌های staging یا production بدون دخالت انسان منتقل شود.

GitLab CI/CD این قابلیت را به‌شکلی ساده اما قدرتمند در اختیار شما می‌گذارد.

اجزای کلیدی برای استقرار خودکار

  1. مرحله‌ی deploy در فایل .gitlab-ci.yml
  2. متغیرهایی برای تعیین محیط و تنظیمات محرمانه (مثل SSH key یا Token)
  3. اسکریپت مناسب برای کپی فایل‌ها یا فراخوانی سرویس استقرار

مثال ساده: استقرار در سرور از طریق SSH

deploy-job:
  stage: deploy
  script:
    - scp -r ./dist/* user@your-server:/var/www/app/
  only:
    - main

در این مثال، پس از Push روی برنچ main، فایل‌های ساخته‌شده در پوشه dist/ از طریق scp به سرور منتقل می‌شوند.

استقرار در محیط‌های مختلف (staging / production)

deploy-to-staging:
  stage: deploy
  script:
    - ./deploy.sh staging
  only:
    - develop

deploy-to-production:
  stage: deploy
  script:
    - ./deploy.sh production
  only:
    - main

اینجا، بسته به اینکه در کدام برنچ Push صورت گیرد، استقرار به محیط مربوط انجام می‌شود.

استفاده از محیط‌ها (Environments) در GitLab

GitLab این امکان را می‌دهد که محیط‌های مختلف تعریف کرده و وضعیت هر یک را در UI مشاهده کنید:

deploy-to-production:
  stage: deploy
  script:
    - ./deploy.sh production
  environment:
    name: production

اتوماسیون استقرار باعث کاهش خطای انسانی، افزایش سرعت انتشار و حفظ ثبات در فرایند توسعه می‌شود.

بهترین شیوه‌های استفاده از GitLab CI/CD

داشتن یک پایپ‌لاین CI/CD صرفاً کافی نیست؛ آنچه مهم است پایدار بودن، سریع بودن، امن بودن و مقیاس‌پذیر بودن پایپ‌لاین‌هاست. در این بخش، مجموعه‌ای از Best Practices یا بهترین شیوه‌ها برای استفاده مؤثر از GitLab CI/CD را معرفی می‌کنیم.

۱. فایل .gitlab-ci.yml را ماژولار و قابل نگهداری نگه دارید

از include استفاده کنید تا فایل‌های CI را تقسیم و سازماندهی کنید:

include:
  - local: 'ci/test.yml'
  - remote: 'https://example.com/ci/deploy.yml'

به‌جای تکرار اسکریپت‌ها، آن‌ها را در فایل‌های شل (bash) ذخیره کنید و فراخوانی نمایید.

۲. از کش (cache) استفاده کنید تا سرعت پایپ‌لاین افزایش یابد

cache:
  paths:
    - node_modules/

با کش کردن پکیج‌ها یا بیلدهای میانی، سرعت اجرای مراحل بعدی به‌طور چشمگیری افزایش می‌یابد.

۳. Jobهای سنگین را موازی کنید

به‌جای یک Job طولانی، آن را به چند Job کوچکتر تقسیم کرده و هم‌زمان اجرا کنید. این کار باعث کاهش زمان کلی پایپ‌لاین می‌شود.

۴. خطاهای تست را در پایپ‌لاین early fail کنید

هرچه زودتر بفهمید کدی خراب است، بهتر است. بنابراین:

  • مرحله تست را جلوتر از بقیه قرار دهید.
  • از دستور exit 1 در اسکریپت‌ها استفاده کنید تا روی اولین خطا متوقف شوند.

۵. از متغیرهای محیطی امن استفاده کنید

هیچ توکنی، پسوردی یا کلید SSH نباید در فایل .gitlab-ci.yml ذخیره شود. به‌جای آن، از رابط GitLab UI برای تعریف متغیرهای امن استفاده کنید (Settings > CI/CD > Variables).

۶. از قابلیت environments و deployments به‌درستی بهره بگیرید

با تعریف محیط‌ها و ردیابی نسخه‌های مستقرشده، می‌توانید وضعیت و تاریخچه‌ی هر محیط را از داشبورد GitLab مشاهده و مدیریت کنید.

۷. مستند کنید و لاگ‌ها را جدی بگیرید

لاگ اجرای Jobها را بررسی و تحلیل کنید. اسامی واضح برای Jobها، مراحل و فایل‌ها انتخاب کنید و ساختار پیام‌های Commit و Merge را با قواعد مشخص حفظ کنید.

در پایان

GitLab CI/CD ابزاری توانمند و انعطاف‌پذیر برای خودکارسازی فرایندهای توسعه، تست، و استقرار نرم‌افزار است. با استفاده از فایل .gitlab-ci.yml، تعریف مراحل و وظایف دقیق، بهره‌گیری از GitLab Runner، و به‌کارگیری متغیرها و آرتیفکت‌ها، می‌توان چرخه توسعه را سریع‌تر، دقیق‌تر و قابل اعتمادتر کرد.

شما میتوانید برای مطالعات بیشتر به مستندات خود GitLab مراجعه کنید.

اتوماسیون استقرار و پیاده‌سازی بهترین شیوه‌ها در طراحی پایپ‌لاین نه‌تنها کیفیت کد را بالا می‌برد، بلکه همکاری تیمی را بهبود می‌دهد و امکان تحویل مداوم (CD) را برای تیم‌های حرفه‌ای فراهم می‌سازد. اگر به‌دنبال سرعت، ثبات، و مقیاس‌پذیری در پروژه‌های خود هستید، تسلط بر GitLab CI/CD یکی از مهم‌ترین گام‌ها در مسیر DevOps خواهد بود.

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
در انتظار ثبت رای

/@arastoo
ارسطو عباسی
کارشناس تولید و بهینه‌سازی محتوا

کارشناس ارشد تولید و بهینه‌سازی محتوا و تکنیکال رایتینگ - https://arastoo.net

دیدگاه و پرسش

برای ارسال دیدگاه لازم است وارد شده یا ثبت‌نام کنید ورود یا ثبت‌نام

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

ارسطو عباسی

کارشناس تولید و بهینه‌سازی محتوا

مقالات برگزیده

مقالات برگزیده را از این قسمت میتوانید ببینید

مشاهده همه مقالات