How-To Guides

تسلط بر GitHub Actions: راهنمای کامل پیکربندی جریان‌های کاری

GitHub Actions به‌طور بنیادین نحوه مدیریت یکپارچه‌سازی مداوم و استقرار مداوم (CI/CD) توسط تیم‌های توسعه‌دهنده مدرن را دگرگون کرده است. با بهره‌گیری از اتوماسیون بومی مستقیماً درون مخزن خود، می‌توانید فرآیندهای ساخت، تست و انتشار را ساده‌سازی کنید و پیکربندی زیرساخت خود را در قالب کد نگه دارید. برای توسعه‌دهندگان سطح متوسط تا پیشرفته، درک ظرایف پیکربندی جریان‌های کاری برای ساخت خط لوله‌های مقیاس‌پذیر، ایمن و کارآمد ضروری است.

درک ساختار اصلی

در هسته اصلی، یک جریان کاری GitHub Actions در یک فایل YAML قرار دارد که در پوشه .github/workflows مخزن شما قرار گرفته است. این فایل‌ها با نام‌های *.yml یا *.yaml شناخته می‌شوند. ساختار آن از یک الگوی سلسله‌مراتبی پیروی می‌کند: یک جریان کاری شامل چندین شغل (Job) است، هر شغل شامل چندین گام (Step) است، و هر گام یک عملیات یا دستور خاص را اجرا می‌کند.

هنگامی که یک فایل جریان کاری جدید ایجاد می‌کنید، با مشخص کردن نام جریان کاری و رویدادهایی که اجرای آن را فعال می‌کنند، شروع می‌کنید. محرک‌های رایج شامل Push کردن به یک شاخه، ایجاد یک درخواست کشش (Pull Request) یا ارسال دستی است.

name: CI Pipeline

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: Run tests
      run: npm test

تعریف شغل‌ها و اجراکننده‌ها (Runners)

کلید runs-on تعیین می‌کند که شغل در کجا اجرا خواهد شد. می‌توانید از اجراکننده‌های میزبان استاندارد GitHub (مانند ubuntu-latest، macos-latest یا windows-latest) انتخاب کنید یا برچسب یک اجراکننده خودمیزبان (Self-hosted) را برای زیرساخت خود مشخص کنید. شغل‌ها می‌توانند به صورت متوالی یا موازی اجرا شوند. به طور پیش‌فرض، شغل‌ها به صورت موازی اجرا می‌شوند. اگر به ترتیب خاصی نیاز دارید، از کلید needs برای تعریف وابستگی‌ها استفاده می‌کنید.

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm run lint

  test:
    needs: lint # This job runs only if 'lint' succeeds
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm test

مدیریت بافت‌ها (Contexts) و عبارات

GitHub Actions چندین بافت (Context) ارائه می‌دهد که به شما امکان می‌دهد به اطلاعاتی درباره جریان کاری، شغل، گام‌ها و مخزن دسترسی پیدا کنید. رایج‌ترین بافت‌ها شامل github، job، steps، secrets و env هستند. می‌توانید از عبارات درون آکولاد ${{ }} برای تنظیم پویا مقادیر بر اساس این بافت‌ها استفاده کنید.

برای مثال، ممکن است بخواهید یک برنامه را فقط زمانی استقرار دهید که تغییراتی در شاخه main ایجاد شده باشد. می‌توانید با استفاده از خاصیت if، گام‌ها را به صورت شرطی اجرا کنید:

- name: Deploy to Production
  if: github.ref == 'refs/heads/main'
  run: ./deploy.sh

مدیریت رازها (Secrets) و متغیرهای محیطی

امنیت در خط لوله‌های CI/CD از اهمیت بالایی برخوردار است. هرگز نباید اطلاعات احراز هویت را به صورت ثابت (Hardcode) در فایل‌های جریان کاری خود قرار دهید. به جای آن، از بافت secrets برای تزریق ایمن داده‌های حساس استفاده کنید. رازها را در تنظیمات مخزن خود زیر Settings > Secrets and variables > Actions تعریف کنید. سپس می‌توانید به آن‌ها در جریان کاری خود به این صورت ارجاع دهید:

- name: Publish to NPM
  env:
    NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
  run: npm publish

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

بهترین روش‌ها برای جریان‌های کاری مقیاس‌پذیر

با رشد پروژه شما، پیچیدگی جریان کاری نیز افزایش می‌یابد. برای حفظ قابلیت نگهداری، به بهترین روش‌های زیر توجه کنید:

  • استفاده از عملیات ترکیبی (Composite Actions): گام‌های تکراری را به عملیات ترکیبی انتزاعی کنید که در .github/actions ذخیره می‌شوند تا از تکرار کد جلوگیری شود.
  • بهره‌گیری از کشینگ: از actions/cache برای کش کردن وابستگی‌ها (مانند node_modules) استفاده کنید تا اجرای‌های بعدی سریع‌تر انجام شوند.
  • ساخت ماتریسی (Matrix Builds): از قابلیت strategy.matrix برای تست کد خود در برابر چندین نسخه سیستم عامل یا نسخه‌های مختلف وابستگی‌ها در یک تعریف شغل استفاده کنید.
strategy:
  matrix:
    node-version: [14.x, 16.x, 18.x]
    os: [ubuntu-latest, windows-latest]
  runs-on: ${{ matrix.os }}
  steps:
    - uses: actions/setup-node@v4
      with:
        node-version: ${{ matrix.node-version }}

نتیجه‌گیری

پیکربندی GitHub Actions فراتر از نوشتن YAML است؛ این موضوع درباره طراحی یک خط لوله استقرار مقاوم و کارآمد است. با تسلط بر محرک‌ها، وابستگی‌های شغل‌ها، استفاده از بافت‌ها و روش‌های امنیتی، می‌توانید چرخه حیات توسعه خود را به طور مؤثر اتوماتیک کنید. با جریان‌های کاری ساده شروع کنید و به تدریج با تکامل نیازهای پروژه، ساخت ماتریسی، کشینگ و عملیات ترکیبی را گنجانده کنید. قدرت GitHub Actions در گسترش‌پذیری آن نهفته است که آن را به ابزاری ضروری برای استراتژی‌های مدرن DevOps تبدیل کرده است.

Share: