مقدمه
GitHub Actions یک ویژگی قدرتمند در پلتفرم گیتهاب (GitHub) است که به شما امکان میدهد جریانهای کار (Workflows) اتوماتیک را مستقیماً در ریپازیتوری خود ایجاد، سفارشیسازی و اجرا کنید. این ابزار به توسعهدهندگان کمک میکند تا چرخهی عمر توسعهی نرمافزار (SDLC) را به شکل قابل توجهی تسریع و خودکار سازند، که شامل مواردی مانند یکپارچهسازی مداوم (Continuous Integration یا CI) و تحویل مداوم (Continuous Delivery یا CD) است.
⚙️ اجزای اصلی GitHub Actions
GitHub Actions بر اساس چند مفهوم کلیدی کار میکند:
- ۱. گردش کار (Workflow):
- این یک فرآیند قابل تنظیم و خودکار است که شامل یک یا چند کار (Job) است.
- گردشهای کار در قالب فایلهای YAML تعریف میشوند و در دایرکتوری .github/workflows در ریپازیتوری شما ذخیره میشوند.
- یک گردش کار مشخص میکند که در پاسخ به چه رویدادی (مثلاً یک Push جدید، Pull Request باز شده یا یک زمانبندی خاص) باید اجرا شود.
- ۲. رویداد (Event):
- یک رویداد، یک فعالیت خاص در ریپازیتوری شماست که باعث فعال شدن گردش کار میشود.
- مثالها عبارتند از:
- push: هرگاه کدی به یک شاخه (Branch) Push شود.
- pull_request: هنگام ایجاد، باز کردن، یا همگامسازی یک Pull Request.
- schedule: اجرای گردش کار در زمانهای مشخص (مشابه Cron jobs).
- workflow_dispatch: اجازه اجرای دستی گردش کار.
- ۳. کار (Job):
- یک کار مجموعهای از گامها (Steps) است که در یک محیط مجازی اجرا میشود.
- هر کار به طور پیشفرض به صورت موازی اجرا میشود، اما میتوانید برای اجرای متوالی آنها وابستگی تعریف کنید.
- شما مشخص میکنید که هر کار باید بر روی چه Runnerای اجرا شود (مثلاً سیستمعاملهای ubuntu-latest, windows-latest, یا macos-latest).
- ۴. گام (Step):
- یک گام، کوچکترین واحد اجرایی در یک کار است.
- میتواند یک دستور (Command) ساده (مانند npm install یا make) یا یک اکشن (Action) باشد.
- گامها به ترتیب تعریف شده اجرا میشوند و میتوانند دادهها را به یکدیگر ارسال کنند.
- ۵. اکشن (Action):
- اکشنها توابع از پیش تعریف شدهای هستند که کارهای تکراری را انجام میدهند، مانند بررسی کد، راهاندازی محیط و احراز هویت.
- آنها میتوانند اکشنهایی باشند که توسط گیتهاب، یک جامعه کاربری یا خودتان ایجاد شدهاند.
- استفاده از اکشنها باعث میشود که نیازی به نوشتن اسکریپتهای طولانی برای کارهای معمول نباشد.
🚀 کاربردهای کلیدی GitHub Actions (CI/CD)
مهمترین استفاده از GitHub Actions پیادهسازی CI/CD است که فرآیند توسعه را متحول میکند:
- یکپارچهسازی مداوم (CI):
- ساخت و تست: به محض Push شدن کد جدید، گردش کار به طور خودکار کد را ساخته (Build) و تستهای واحد (Unit Tests) را اجرا میکند.
- بازخورد سریع: توسعهدهندگان به سرعت از شکستهای تست مطلع میشوند و میتوانند مشکلات را زودتر برطرف کنند.
- تحویل/استقرار مداوم (CD):
- استقرار خودکار: پس از موفقیتآمیز بودن تستها، گردش کار میتواند به طور خودکار برنامه را بر روی محیطهای مختلف (مانند سرورهای توسعه، مرحلهبندی یا تولید) مستقر (Deploy) کند.
- انتشار (Releasing): مدیریت خودکار انتشارها، برچسبگذاری (Tagging) و ایجاد نسخههای جدید (Releases) در گیتهاب.
🛡️ مزایای استفاده از GitHub Actions
| مزیت | توضیح |
|---|---|
| یکپارچگی عمیق | به دلیل بومی بودن در گیتهاب، دسترسی مستقیم به API گیتهاب، رویدادها و اطلاعات ریپازیتوری دارد. |
| جامعه قوی | هزاران اکشن در Marketplace گیتهاب موجود است که میتوان از آنها برای هر کاربری استفاده کرد. |
| محیطهای مختلف | پشتیبانی از Runnerهای لینوکس، ویندوز و macOS (Runnerهای هاست شده توسط گیتهاب) و همچنین امکان استفاده از Self-hosted Runners. |
| رایگان برای پروژههای عمومی | برای ریپازیتوریهای عمومی، استفاده از GitHub Actions به طور کلی رایگان است و برای ریپازیتوریهای خصوصی نیز دارای سهمیه رایگان است. |
📝 نمونه کد ساده (مثال: اجرای تستها)
این یک مثال ساده از یک فایل YAML برای یک گردش کار است که هنگام Push شدن کد به شاخه main اجرا میشود و تستهای Node.js را اجرا میکند.
# .github/workflows/ci.yml
name: CI - Run Tests
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build-and-test:
runs-on: ubuntu-latest # محیطی که Job روی آن اجرا می شود
steps:
- uses: actions/checkout@v4 # Action: کد ریپازیتوری را Checkout می کند
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20' # از نسخه 20 نود استفاده می کند
- name: Install dependencies
run: npm install # دستور نصب وابستگی ها
- name: Run tests
run: npm test # دستور اجرای تست ها
GitHub Actions به توسعهدهندگان این امکان را میدهد که تمرکز خود را بر روی نوشتن کد با کیفیت بگذارند، در حالی که ابزارهای اتوماسیون کارهای تکراری و زمانبر را مدیریت میکنند و استانداردهای کیفی را در طول فرآیند توسعه حفظ میکنند.