استفاده از GitHub Actions برای CI/CD در پروژه‌های پایتون

استفاده از GitHub Actions برای CI/CD در پروژه‌های پایتون

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

مقدمه‌ای بر CI/CD

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

GitHub Actions چیست؟

GitHub Actions یک پلتفرم CI/CD است که به شما امکان می‌دهد گردش‌کارهای خودکار را مستقیماً در مخزن GitHub خود ایجاد کنید. این گردش‌کارها می‌توانند به رویدادهای مختلفی در مخزن شما واکنش نشان دهند، مانند push کد، pull request، یا زمان‌بندی شده. GitHub Actions از یک زبان YAML برای تعریف گردش‌کارها استفاده می‌کند که به راحتی قابل خواندن و ویرایش است. یکی از مزایای اصلی GitHub Actions، ادغام عمیق آن با GitHub است. این بدان معناست که شما می‌توانید به راحتی به مخزن خود، issues، pull requests و سایر منابع GitHub دسترسی داشته باشید.

ساختار یک گردش‌کار GitHub Actions

یک گردش‌کار GitHub Actions از یک یا چند job تشکیل شده است. هر job در یک runner اجرا می‌شود که می‌تواند یک ماشین مجازی لینوکس، ویندوز یا macOS باشد. هر job شامل یک یا چند step است که دستوراتی هستند که باید اجرا شوند. هر step می‌تواند یک اسکریپت shell، یک دستور پایتون یا یک action باشد. Actions قطعات کد قابل استفاده مجدد هستند که می‌توانند برای انجام وظایف رایج مانند ساخت، تست و استقرار استفاده شوند. فایل تعریف گردش‌کار (workflow) معمولاً در دایرکتوری .github/workflows در مخزن شما قرار می‌گیرد.

ایجاد یک گردش‌کار CI برای پروژه پایتون

بیایید یک گردش‌کار CI ساده برای یک پروژه پایتون ایجاد کنیم. این گردش‌کار کد را بررسی می‌کند، وابستگی‌ها را نصب می‌کند، تست‌ها را اجرا می‌کند و گزارش‌های تست را منتشر می‌کند. فایل .github/workflows/ci.yml را با محتوای زیر ایجاد کنید:

name: CI

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

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Set up Python 3.x
      uses: actions/setup-python@v4
      with:
        python-version: '3.x'
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
    - name: Run tests
      run: |
        python -m unittest discover
    - name: Publish test results
      uses: EnricoMi/publish-unit-test-result-action@v1
      with:
        files: test-reports/*.xml

در این گردش‌کار:

  • name: CI نام گردش‌کار را مشخص می‌کند.
  • on: مشخص می‌کند که این گردش‌کار در چه رویدادهایی اجرا شود. در این مورد، زمانی که کدی به شاخه main push می‌شود یا یک pull request به شاخه main ارسال می‌شود.
  • jobs: یک یا چند job را تعریف می‌کند. در این مورد، یک job به نام build تعریف شده است.
  • runs-on: ubuntu-latest مشخص می‌کند که این job در یک ماشین مجازی Ubuntu اجرا شود.
  • steps: یک یا چند step را تعریف می‌کند.
  • uses: actions/checkout@v3 کد را از مخزن GitHub بررسی می‌کند.
  • uses: actions/setup-python@v4 پایتون را نصب می‌کند.
  • run: pip install -r requirements.txt وابستگی‌های پروژه را نصب می‌کند.
  • run: python -m unittest discover تست‌های پروژه را اجرا می‌کند.
  • uses: EnricoMi/publish-unit-test-result-action@v1 نتایج تست را منتشر می‌کند.

ایجاد یک گردش‌کار CD برای پروژه پایتون

حالا بیایید یک گردش‌کار CD ساده برای استقرار پروژه پایتون خود ایجاد کنیم. این گردش‌کار کد را استقرار می‌دهد. فایل .github/workflows/cd.yml را با محتوای زیر ایجاد کنید (این مثال فرض می‌کند شما از یک سرور برای استقرار استفاده می‌کنید و دسترسی SSH دارید):

name: CD

on:
  push:
    branches: [ "main" ]

jobs:
  deploy:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: SSH into server and deploy
      uses: appleboy/ssh-action@master
      with:
        host: your_server_ip
        username: your_username
        key: ${{ secrets.SSH_PRIVATE_KEY }}
        script: |
          cd /path/to/your/project
          git pull origin main
          # Add any deployment commands here, e.g.,
          # python manage.py migrate
          # python manage.py collectstatic
          # systemctl restart your_service

در این گردش‌کار:

  • name: CD نام گردش‌کار را مشخص می‌کند.
  • on: مشخص می‌کند که این گردش‌کار در چه رویدادهایی اجرا شود. در این مورد، زمانی که کدی به شاخه main push می‌شود.
  • jobs: یک job به نام deploy تعریف شده است.
  • runs-on: ubuntu-latest مشخص می‌کند که این job در یک ماشین مجازی Ubuntu اجرا شود.
  • uses: appleboy/ssh-action@master از یک action برای اتصال به سرور از طریق SSH استفاده می‌کند.
  • with: پارامترهای اتصال SSH را مشخص می‌کند.
  • secrets.SSH_PRIVATE_KEY یک secret است که باید در تنظیمات GitHub مخزن شما تعریف شود. این secret حاوی کلید خصوصی SSH شما است.
  • script: اسکریپتی است که در سرور اجرا می‌شود.

مدیریت Secrets

Secrets اطلاعات حساسی هستند که نباید در کد منبع شما ذخیره شوند، مانند کلیدهای API، رمزهای عبور و کلیدهای SSH. GitHub Actions به شما امکان می‌دهد secrets را به صورت ایمن ذخیره کنید و در گردش‌کارهای خود به آنها دسترسی داشته باشید. برای ذخیره یک secret، به تنظیمات مخزن خود بروید، Secrets را انتخاب کنید و یک secret جدید اضافه کنید. سپس می‌توانید در گردش‌کار خود با استفاده از سینتکس ${{ secrets.SECRET_NAME }} به secret دسترسی داشته باشید.

نکات پیشرفته

GitHub Actions قابلیت‌های پیشرفته بسیاری را ارائه می‌دهد که می‌توانید از آنها برای بهبود فرآیندهای CI/CD خود استفاده کنید. برخی از این قابلیت‌ها عبارتند از:

  • Caching: می‌توانید وابستگی‌ها و سایر فایل‌های بزرگ را کش کنید تا زمان ساخت را کاهش دهید.
  • Matrix Builds: می‌توانید گردش‌کار خود را برای اجرا در چندین محیط مختلف (مانند نسخه‌های مختلف پایتون یا سیستم‌عامل‌ها) پیکربندی کنید.
  • Workflows Reusable: می‌توانید گردش‌کارهای قابل استفاده مجدد ایجاد کنید که می‌توانید در چندین مخزن استفاده کنید.
  • Custom Actions: می‌توانید actions سفارشی خود را ایجاد کنید تا وظایف خاصی را انجام دهید.

نتیجه‌گیری

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

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *