۳۰ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

GitHub Actions چیست؟ CI/CD خودکار برای GitHub

GitHub Actions یک پلت فرم خودکار CI/CD است که با GitHub ادغام می شود تا خطوط لوله CI/CD یکپارچه و همه کاره ایجاد کند. در اینجا نحوه کار آن آمده است.

GitHub Actions یک پلت فرم خودکار CI/CD است که با GitHub ادغام می شود تا خطوط لوله CI/CD یکپارچه و همه کاره ایجاد کند. در اینجا نحوه کار آن آمده است.

GitHub Actions یک پلتفرم ساخته شده در GitHub است که ساخت، آزمایش و استقرار نرم افزار را خودکار می کند. GitHub، متعلق به مایکروسافت، یک سرویس میزبانی برای توسعه نرم افزار با استفاده از Git، یک برنامه کنترل نسخه منبع باز و همکاری است که توسط لینوس توروالدز توسعه یافته است. Git و GitHub قبلاً توسط بسیاری از برنامه‌نویسان و فروشگاه‌های نرم‌افزار به‌عنوان پایه‌ای برای شیوه‌های توسعه استفاده می‌شوند، از جمله یکپارچه‌سازی مداوم و خطوط لوله تحویل مداوم خودکار که پروژه‌ها را از طریق چرخه ساخت، آزمایش و استقرار انجام می‌دهند. GitHub Actions به کاربران GitHub چیزی را ارائه می دهد که GitHub آن را “API برای علت و معلول.” می‌توانید از این پلتفرم برای خودکارسازی انواع رفتارها بر اساس محرک‌های مختلف استفاده کنید.

GitHub GitHub Actions را در سال ۲۰۱۸ معرفی کرد. به دلیل ماهیت باز GitHub، این تنها ابزاری نیست که می توانید برای پیاده سازی اتوماسیون CI/CD برای پروژه های مبتنی بر GitHub استفاده کنید. برخی دیگر، مانند Azure Pipelines و Jenkins، ممکن است در برخی شرایط ارجح باشند. اما از آنجایی که GitHub Actions به طور کلی با پلتفرم GitHub ادغام شده است، کاربران نیازی به نگرانی در مورد زیرساخت اصلی ندارند. گردش کار کلی آن نیز با در نظر گرفتن GitHub طراحی شده است که آن را به گزینه ای جذاب برای بسیاری تبدیل می کند.

نحوه عملکرد GitHub Actions

یکی از بهترین راه‌ها برای درک نحوه عملکرد GitHub Actions، در نظر گرفتن اصطلاحاتی است که اجزای جداگانه آن را توصیف می‌کند. ما با نام “GitHub Actions” شروع می کنیم. ما از GitHub در برخورد با آن به عنوان یک اسم مفرد پیروی می کنیم (“GitHub Actions…”)، که پلتفرم را به عنوان یک کل نام می برد. همچنین یک جزء از پلتفرم به نام “عمل” (کوچک “a”) وجود دارد که به زودی درباره آن بحث خواهیم کرد.

اکنون، اجازه دهید برخی از اجزای پلتفرم را بررسی کنیم:

  • رویداد: یک رویداد چیزی است که یک خط لوله خودکار GitHub Actions را به جریان می‌اندازد. این رویداد می‌تواند چیزی خاص باشد که در یک مخزن اتفاق می‌افتد – برای مثال یک درخواست کشش یا commit تحت فشار قرار می‌گیرد – یا یک راه‌انداز برنامه‌ریزی‌شده، یک پست در یک REST API یا حتی فقط یک دستور دستی.
  • Workflow: هر یک از این رویدادها می‌تواند یک جریان کاری را راه‌اندازی کند، که اصطلاح فراگیر برای فرآیند خودکاری است که از GitHub Actions برای جمع‌آوری آن استفاده می‌کنید. به عنوان مثال، زمانی که نسخه جدیدی آماده است، از یک گردش کار برای استقرار برنامه خود استفاده کنید، یا زمانی که شخصی موضوع جدیدی را باز می کند، برچسب های مناسب را اضافه کنید.

    یک گردش کار در یک فایل YAML ذخیره شده در فهرست .github/workflows مخزن شما تعریف شده است: اسناد GitHub برای نحو. این فایل رویدادهایی را که می‌توانند گردش کار را راه‌اندازی کنند، به همراه کارهای واقعی که می‌خواهید گردش کار انجام دهد، تعریف می‌کند.

  • شغل‌ها: کارهایی که می‌خواهید گردش کار انجام دهد در یک یا چند شغل گروه‌بندی می‌شوند. هر کار مجموعه ای از مراحل است که به ترتیبی که شما تعریف می کنید اتفاق می افتد. گردش کار شما ممکن است شامل چندین کار باشد که به صورت موازی اجرا می شوند، یا در یک توالی از پیش تعریف شده به دنبال یکدیگر می آیند، یا ترکیبی از این دو. همچنین می توانید بین مشاغل وابستگی ایجاد کنید. به عنوان مثال، ممکن است چندین کار ساخت به صورت موازی برای معماری های مختلف تراشه داشته باشید. پس از تکمیل تمام این کارها، یک کار دیگر ساخت ها را بسته بندی می کند.
  • عملکردها: یک مرحله جداگانه در یک کار ممکن است از یک اسکریپت پوسته ساده تشکیل شده باشد، اما اگر به چیز پیچیده‌تری نیاز دارید، می‌توانید از یک عمل نیز استفاده کنید (توجه داشته باشید a کوچک). یک عمل شامل کدهایی است که شما می نویسید و با مخزن GitHub شما تعامل دارد. برای این کار می‌توانید از API GitHub یا هر API شخص ثالث موجود استفاده کنید. اقدامات انجام شده می تواند از استقرار کد در زمانی که برای تولید آماده است تا ارسال یک هشدار پیامکی به توسعه دهندگان در حال تماس برای مقابله با مسائل فوری باشد. اکشن‌ها را می‌توان برای اجرا در داخل یک ظرف Docker نوشت، اگرچه این مورد نیاز نیست.

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

  • Runners: runner سروری است که یک کار روی آن اجرا می شود. هر کار در یک گردش کار، دونده خاص خود را دارد. همانطور که ممکن است انتظار داشته باشید، اینها عموما ماشین های مجازی هستند و به تازگی برای کار شما تهیه شده اند. GitHub ماشین‌های مجازی میزبانی شده را برای این منظور فراهم می‌کند – لینوکس اوبونتو، مایکروسافت ویندوز، یا macOS را اجرا می‌کند، اما اگر نیاز دارید که کارتان روی یک پیکربندی سخت‌افزاری یا سیستم‌عامل خاص اجرا شود، می‌توانید خودتان یک رانر را میزبانی کنید.

نمونه‌هایی از اقدامات GitHub

اسناد GitHub شامل مثال‌هایی است که به شما در درک نحوه عملکرد GitHub Actions کمک می‌کند. برای شروع، می‌توانید کد خود را روی runner تست کنید. مثال دیگری نحوه کار با GitHub Actions را نشان می‌دهد از رابط خط فرمان GitHub.

نمونه‌ای که فراتر می‌رود – و ممکن است برای کشف قدرت GitHub Actions از علاقه خاصی برخوردار باشد – شامل چیزی است که GitHub استراتژی ماتریسی می‌نامد. در این نوع گردش کار، هنگام تعریف یک کار، از متغیرها استفاده می کنید تا چندین کار اجرا کنید که بر اساس مقادیر متغیرها متفاوت است. همانطور که نمونه عمیق GitHub نشان می‌دهد، این یک راه خوب برای آزمایش خودکار کد شما در برابر زبان های مختلف یا نسخه های سیستم عامل است. می توانید مقادیر متغیرها را برای انتخاب محیط های آزمایشی جدید تغییر دهید.

Fireship.io دارای نمونه‌های مفیدتر GitHub Actions برای شما را مطالعه کنید، از جمله نمایش هایی درباره نحوه انتشار یک بسته در NPM هنگام ایجاد نسخه جدید. نحوه ارسال خودکار پیام‌های ایمیل، Slack یا Discord برای به‌روزرسانی کاربران در مورد پیشرفت کار؛ یا نحوه برنامه ریزی یک کار پس زمینه در یک زمان خاص یا در فواصل زمانی خاص.

بهترین شیوه های امنیتی برای GitHub Actions

اگر GitHub Actions را روی کد موجود در یک مخزن GitHub اجرا می‌کنید، تقریباً مطمئناً با یک پایگاه کد توزیع شده کار می‌کنید و این باعث ایجاد عوارض امنیتی می‌شود. GitHub این بهترین روش‌ها را برای اطمینان از ایمن بودن گردش‌های کاری شما توصیه می‌کند:

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

برای اطلاعات امنیتی عمیق‌تر، راهنمای سخت‌سازی امنیتی برای اقدامات GitHub.

ادغام اکشن های GitHub با دیگر پلتفرم ها

از آنجایی که GitHub یک پلتفرم نسبتا باز است و گردش‌های کاری GitHub Actions در YAML توضیحی توضیح داده شده است، چند راه وجود دارد که می‌توانید کد GitHub Actions خود را با سایر پلتفرم‌ها ادغام کنید:

  • AWS: می‌توانید از اقدامات خود در CodeCatalyst، سرویس توسعه نرم‌افزار مدیریت‌شده AWS، با استفاده از یک پوشش برای تبدیل آنها به مفهومی مشابه اقدامات CodeCatalyst.
  • Azure: مایکروسافت (که والد شرکتی نهایی GitHub است، گرچه نگرش نسبتاً ساده ای دارد) نوشتن یک گردش کاری GitHub Actions را امکان پذیر می کند که کد را در پلتفرم میزبانی Azure App Service مستقر می کند a>.
  • Visual Studio: صحبت از مایکروسافت، Visual Studio محترم IDE این شرکت دارای یک افزونه که به شما امکان می‌دهد بدون خروج از ویرایشگر، گردش‌های کاری GitHub Actions را ایجاد و مدیریت کنید.
  • Google Cloud: Google تعدادی از اقدامات را در دسترس قرار داده است. که به شما کمک می کند کدهای ذخیره شده در یک مخزن GitHub را با سرویس Google Cloud خود ادغام کنید، از جمله یکی که به شما امکان می دهد از Cloud Deploy استفاده کنید تا کد را در مرحله تولید قرار دهید.

آیا باید برای GitHub Actions هزینه پرداخت کنم؟

اگر کارهای شما بر روی رانرهای استاندارد میزبانی شده توسط GitHub در مخازن عمومی اجرا شوند، یا اگر خودتان میزبان رانرهای خود باشید، GitHub Actions رایگان است. اگر از مخزن خصوصی استفاده می‌کنید، مقدار مشخصی فضای ذخیره‌سازی و محاسبه زمان را به صورت رایگان دریافت می‌کنید، اما زمانی که از این محدودیت‌ها فراتر رفتید، باید پرداخت کنید. همچنین محدودیت‌های کلی برای تعداد کارهای همزمانی که می‌توانید با استفاده از رانرهای مجهز به GitHub اجرا کنید، و همچنین در درخواست‌های API در ساعت و زمان اجرای گردش کار وجود دارد. برای جزئیات بیشتر به اسناد GitHub مراجعه کنید.

جایگزین‌های GitHub Actions

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

به طور کلی، بزرگترین نقطه قوت GitHub Actions یکپارچگی دقیق آن با GitHub است. سایر خدمات میزبانی مشابه خود را دارند. به عنوان مثال GitLab دارای GitLab CI است، و همچنین اقدامات AWS CodeCataylst نیز وجود دارد. اگر از GitHub استفاده می‌کنید و قبلاً روی ابزاری مانند جنکینز سرمایه‌گذاری نکرده‌اید، GitHub Actions یک انتخاب منطقی برای نیازهای خودکار CI/CD شما است.