GitHub یکی از پرکاربردترین پلتفرم های توسعه دهندگان برای میزبانی مخازن ذخیره شده در فضای ابری است. یکپارچه سازی پیوسته (IC) روشی است که مستلزم افزودن مکرر کدهای مشترک جدید به مخزن برای شناسایی خطاها در کوتاه ترین زمان ممکن است. به همین دلیل، GitHub پیشنهاد داد که نه تنها کد ما را در مخازن خود میزبانی کند، بلکه مراحل کامپایل و آزمایش پروژه های ما را خودکار کند.
اخیراً GitHub توسط مایکروسافت خریداری شده است و آنها ویژگی ها و عملکردهای جدیدی مانند GitHub Actions را اضافه کرده اند که عملکرد آن تسهیل اجرای کد است. امروزه توسعه دهندگان باید گام های زیادی برای ساخت، اجرا و استقرار پروژه های خود بردارند. و این اغلب شامل نصب بسته ها یا محیط های توسعه است. از اینجا GitHub Actions بوجود می آید.
GitHub چیست؟
GitHub پلتفرمی است که برای میزبانی کد برنامهها و ابزارهای توسعهدهنده برای تسهیل همکاری بین جامعه و امکان دانلود کدهای دیگران ایجاد شده است.
در سال 2018 توسط مایکروسافت خریداری شد و از سیستم کنترل نسخه Git که توسط لینوس توروالدز طراحی شده است استفاده می کند. این یکی از پر استفاده ترین ها در سراسر جهان توسط توسعه دهندگان به دلیل سادگی و ویژگی کراس پلتفرم آن است. برای آشنایی بیشتر با گیت هاب این مقاله را بررسی کنید.
GitHub برای چیست؟
GitHub به توسعه دهندگان اجازه می دهد تا با ایجاد مخازن به صورت رایگان پروژه ها را میزبانی کنند. علاوه بر این، چندین ابزار اختصاصی مانند:
برای هر پروژه یک ویکی ایجاد کنید تا همه تغییرات را در نسخه های مختلف حاشیه نویسی کند.
سیستم ردیابی را صادر کنید تا سایر افراد بتوانند پیشنهادات یا بهبودهایی را ارائه دهند.
انجمن اطراف این حاشیه نویسی برای بهبود کد.
نمودارهایی برای مشاهده نحوه کار توسعه دهندگان روی پروژه های خود.
ویژگی های شبکه های اجتماعی مانند سیستمی برای دنبال کردن سازندگان مورد علاقه شما.
GitHub Actions چیست؟
GitHub Actions یک پلتفرم برای یکپارچه سازی مداوم / تحویل مداوم (CI/CD) است. این به شما امکان می دهد pipeline ساخت، تست و استقرار را خودکار کنید. همچنین به شما این امکان را می دهد که کد دلخواه را در یک مخزن مشخص در هنگام وقوع یک رویداد اجرا کنید. Action از بسته های کد در کانتینرهای Docker استفاده می کند که روی سرورهای GitHub اجرا می شوند. آنها با تمام زبان های برنامه نویسی سازگار هستند تا اطمینان حاصل شود که می توانید آنها را روی ابرهای عمومی و همچنین سرورهای محلی اجرا کنید. این بخشی از یک سری راهنمای گسترده در مورد CI/CD است.
معماری و مفاهیم GitHub Actions
GitHub Actions به شما این امکان را می دهد که گردش کار یا workflow خود را طوری پیکربندی کنید که پس از وقوع یک رویداد خاص در مخزن، راه اندازی شود. به عنوان مثال، زمانی که یک باگ ایجاد می شود یا زمانی که یک درخواست PR باز می شود.
یک گردش کار شامل یک یا چند کار است که به صورت موازی یا متوالی اجرا می شوند. هر کار در داخل یک کانتینر در یک ماشین مجازی (VM) مجزا اجرا می شود. علاوه بر این، هر کار شامل یک یا چند مرحله است که یک اسکریپت از پیش تعریف شده یا یک اقدام را اجرا می کند، یک برنامه افزودنی قابل استفاده مجدد که گردش کار شما را ساده می کند.
گردشهای کاری GitHub Actions
گردش کار GitHub Actions یک فرآیند خودکار است که یک یا چند کار را اجرا می کند. شما می توانید گردش کار را با تعریف یک فایل YAML که در مخزن بررسی می شود، پیکربندی کنید. این فایل زمانی اجرا می شود که:
توسط یک رویداد خاص در مخزن ایجاد می شود
به صورت دستی فعال شد
در یک برنامه از پیش تعریف شده
می توانید تعاریف گردش کار را در فهرست راهنمای github/workflows
هر مخزن بیابید. یک مخزن می تواند شامل چندین گردش کار باشد که هر کدام وظایف متفاوتی را انجام می دهند. برای مثال میتوانید از یک گردش کار برای ساختن و آزمایش درخواستهای PR، گردش کار دیگری برای استقرار برنامه هر زمان که نسخهای ایجاد میشود، و یک گردش کار اضافی برای افزودن برچسب هر زمان که موضوع جدیدی باز میشود، استفاده کنید.
رویدادهای GitHub Actions
یک رویداد یک فعالیت خاص در یک مخزن است که یک جریان کاری را راهاندازی میکند. برای مثال، زمانی که شخصی یک درخواست pull ایجاد میکند، مشکلی را باز میکند یا یک commit را به یک مخزن push می کند، فعالیت میتواند از GitHub سرچشمه بگیرد. همچنین میتوانید یک جریان کاری را که بر اساس یک برنامه زمانبندی اجرا میشود، با پست کردن در REST API یا به صورت دستی فعال کنید.
محرک های گردش کار
تریگر گردش کار رویدادی است که باعث می شود یک گردش کار اجرا شود. در اینجا نمونههای راهانداز گردش کار آمده است:
رویدادهایی که در مخزن گردش کار رخ می دهد
رویدادهایی خارج از GitHub رخ می دهند و یک رویداد repository_dispatch را در GitHub راه اندازی می کنند
کتابچه راهنمای
زمان های برنامه ریزی شده
به عنوان مثال، میتوانید یک گردش کار را طوری پیکربندی کنید که پس از push به یک شاخه مخزن پیشفرض، پس از باز شدن یک باگ و پس از ایجاد نسخه، اجرا شود.
GitHub Actions Jobs
یک جاب در GitHub Actions مجموعه ای از مراحل گردش کار است که روی یک رانر اجرا می شود. این مراحل می تواند شامل اقداماتی برای اجرا یا شل کردن اسکریپت ها برای اجرا باشد. اقدامات هر مرحله را به ترتیب اجرا می کنند، زیرا همه مراحل در یک جاب به یکدیگر وابسته هستند. هر مرحله را روی یک رانر اجرا می کند و امکان اشتراک گذاری داده ها بین مراحل را فراهم می کند. به عنوان مثال، اگر مرحله ای برای ساخت یک برنامه دارید، ممکن است مرحله بعدی برای آزمایش برنامه جدید ساخته شده باشد.
جاب ها به طور پیشفرض وابستگی ندارند، اما میتوانید کارها را طوری پیکربندی کنید که به جاب های دیگر وابسته باشند و به ترتیب اجرا شوند. در غیر این صورت، جاب ها به صورت موازی اجرا می شوند. اگر جابی به جاب دیگری وابستگی دارد، باید قبل از اجرا منتظر بماند تا آن کار تکمیل شود. ممکن است چندین جاب ساخت وجود داشته باشد، هر کدام برای یک معماری متفاوت، بدون هیچ گونه وابستگی، با این حال، یک جاب بسته بندی به این جاب ها وابسته است. کارهای ساخت غیر وابسته به طور همزمان اجرا می شوند، اما کار بسته بندی تنها زمانی می تواند اجرا شود که تمام کارهای ساخت کامل شوند.
ماتریس اقدامات GitHub
شما می توانید از یک استراتژی ماتریسی برای اجرای چندین جاب مرتبط بر اساس تعریف یک جاب استفاده کنید. ترکیب های مختلف متغیرها در تعریف جاب به طور خودکار اجرای کار متفاوتی را ایجاد می کند. به عنوان مثال، یک ماتریس ممکن است برای تست کد در سیستم عامل های مختلف یا در نسخه های مختلف یک زبان برنامه نویسی مفید باشد.
اقدامات یا اکشن ها
Actions برنامه های سفارشی برای GitHub Actions هستند که وظایف پیچیده اما تکراری را انجام می دهند. ممکن است از اقداماتی برای جلوگیری از نوشتن کدهای تکراری بیش از حد در یک گردش کار استفاده کنید. یک اقدام می تواند یک مخزن از GitHub بکشد، اقدامات احراز هویت را برای ارائه دهنده ابر تنظیم کند، یا زنجیره ابزار مناسب را برای محیط توسعه پیکربندی کند.
میتوانید یک اقدام را از ابتدا بنویسید یا از یک اقدام موجود در بازار GitHub در گردش کار خود استفاده کنید.
رانر ها
Runner ها ماشین هایی هستند که برنامه اجرا کننده GitHub Actions را نصب کرده اند. آنها منتظر کارهای موجود برای اجرا هستند. هنگامی که یک دونده یک کار را انتخاب می کند، اقدامات مشخص شده توسط کار را اجرا می کند و نتایج را به Github گزارش می دهد. شما می توانید رانرها را روی سرور یا ماشین خود میزبانی کنید یا از رانرهای میزبانی شده توسط GitHub استفاده کنید.
مزایای GitHub Actions
یکی از ویژگیهای تعیینکننده GitHub Actions انعطافپذیری است که ارائه میکند، که به گشودگی به طیف گستردهای از امکانات تبدیل میشود که در آن توسعهدهندگان میتوانند خلاقیت خود را آزاد کنند.
اینها دیگر مزایای ارائه شده توسط GitHub Actions هستند:
در GitHub توسعه دهید
گزینه Actions به طور کامل در GitHub ادغام شده است، بنابراین نیازی به سایت خارجی ندارد. این بدان معناست که ما می توانیم همه چیز را در همان جایی که توابع مربوط به مخزن را داریم مدیریت کنیم.
طیف گسترده ای از قالب های CI
این پلتفرم الگوهای بسیاری را برای انواع پیکربندیهای CI (ادغام پیوسته) ارائه میکند که شروع کار را بسیار آسان میکند. علاوه بر این، شما همچنین می توانید قالب های خود را ایجاد کنید و سپس آنها را در بازار GitHub منتشر کنید.
تست کانتینرهای متعدد
Actions به شما امکان میدهد پیکربندیهای چند کانتینر را آزمایش کنید، وقتی پشتیبانی Docker و فایل ترکیبی را به گردش کار خود اضافه کردیم.
طرح رایگان جذاب
این قابلیت برای همه مخازن منبع باز رایگان است و شامل 2000 دقیقه در ماه کامپایل رایگان برای مخازن خصوصی است. اگر از طرف دیگر، این برای نیازهای شما کافی نیست، می توانید به راحتی طرح دیگری را انتخاب کنید.
CI/CD با GitHub Actions
GitHub Action از یکپارچه سازی و استقرار مداوم پشتیبانی می کند.
ادغام پیوسته با GitHub Actions
ادغام مداوم یک روش توسعه نرم افزار است که شامل کامیت های مکرر به یک مخزن کد مشترک است. GitHub Actions جریان های کاری یکپارچه سازی پیوسته (CI) را فراهم می کند که می تواند کد را در مخزن بسازد و آزمایش ها را اجرا کند. یک گردش کار می تواند بر روی یک VM میزبان GitHub یا یک ماشین خود میزبان اجرا شود.
شما گردشهای کاری CI را به گونهای پیکربندی میکنید که در پاسخ به رویدادهای خاص GitHub اجرا شوند، به عنوان مثال، زمانی که یک توسعهدهنده کد جدیدی را به مخزن push می کند. همچنین میتوانید از webhook ارسال مخزن برای برنامهریزی گردشهای کاری یا تنظیم محرکها بر اساس رویدادهای خارجی استفاده کنید.
GitHub تستهای CI را اجرا میکند و نتایج همه آزمایشها را در یک درخواست PR ارائه میکند. این به شما امکان می دهد خطاهای وارد شده به شاخه را با هر تغییر مشاهده کنید. هنگامی که یک تغییر تمام تست های CI را در گردش کار گذراند، برای بررسی توسط اعضای تیم آماده است و می توانید آن را در مخزن ادغام کنید. اگر commit در یک آزمایش شکست بخورد، نشان دهنده یک تغییر شکسته است.
هنگام راهاندازی یکپارچهسازی مداوم در مخزن Git، GitHub کد شما را تجزیه و تحلیل میکند و گردشهای کاری خاص CI را بر اساس چارچوب و زبان مخزن شما توصیه میکند. برای مثال، GitHub گردشهای کاری شروعی را پیشنهاد میکند که بستههای مناسب را نصب میکنند و آزمایشها را اجرا میکنند (به عنوان مثال، یک بسته laravel اگر از laravel استفاده میکنید). میتوانید از گردش کار آغازگر توصیهشده توسط GitHub همانطور که هست استفاده کنید، آن را مطابق با نیازهای خود سفارشی کنید یا یک گردش کار سفارشی جدید برای اجرای آزمایشهای یکپارچهسازی مداوم ایجاد کنید.
GitHub Actions به شما کمک می کند یک گردش کار CI برای پروژه توسعه خود تنظیم کنید و می توانید گردش کار را برای کل SDLC ایجاد کنید. می توانید اقداماتی را برای بسته بندی، استقرار و انتشار یک پروژه تنظیم کنید.
استقرار مداوم با اقدامات GitHub
استقرار مستمر گسترش یکپارچه سازی و تحویل مداوم است که فرآیند انتشار و استقرار نسخه های نرم افزاری را خودکار می کند. یک ابزار CI/CD معمولاً کد را قبل از استقرار به عنوان بخشی از فرآیند استقرار مداوم، به طور خودکار می سازد و آزمایش می کند.
میتوانید گردشهای کاری GitHub Actions را برای استقرار محصولات نرمافزاری پیکربندی کنید. یک گردش کار میتواند با ساختن کد در مخزن و اجرای آزمایشها قبل از استقرار، تأیید کند که کد مطابق انتظار عمل میکند.
میتوانید گردشهای کاری سیدی را برای اجرا در پاسخ به رویدادهای خاص GitHub، مانند یک برنامهنویس، برنامهریزی کنید که کد را به شاخه پیشفرض مخزن، مخزن شما push دهد. از طرف دیگر، بارهای کاری می توانند در زمان بندی های تنظیم شده اجرا شوند، زمانی که به صورت دستی فعال شوند یا در پاسخ به رویدادهای خارجی.
GitHub Actions چندین ویژگی برای کمک به شما در کنترل استقرارهای خود ارائه می دهد. محیطها به شما این امکان را میدهند تا جاب ها را تا زمانی که تأییدیه دریافت نکردهاند مسدود کنید، شاخههایی را که میتوانند جریان کار را راهاندازی کنند، یا دسترسی به secrets را محدود کنید. Concurrency به شما امکان می دهد خط لوله CD را به یک مرحله در حال پیشرفت و یک استقرار در حال انتظار در هر زمان محدود کنید.
آموزش شروع سریع GitHub Actions
استفاده از GitHub Actions به یک مخزن GitHub نیاز دارد. کارهای موجود در یک گردش کار می توانند به طور خودکار اقدامات مربوط به مخزن را اجرا کنند و با کد مخزن نیز تعامل داشته باشند.
گردش کار را ایجاد کنید
برای ایجاد گردش کار در GitHub Actions:
یک دایرکتوری جدید در مخزن خود ایجاد کنید و اگر چنین دایرکتوری از قبل وجود نداشته باشد، نام آن را github/workflows
بگذارید.
در پوشه جدید، روی دکمه افزودن فایل در سمت راست بالای پنجره کلیک کنید و گزینه Create new file را انتخاب کنید. نام فایل جدید ایجاد شده را demo-github-actions-workflow.yml
بگذارید.
کد زیر را در demo-github-actions-workflow.yml
قرار دهید:
name: Demo GitHub Actions Workflow
on: [push]
jobs:
Discover-GitHub-Actions-Workflows:
runs-on: ubuntu-latest
steps:
—run: echo "${{ github.event_name }} event automatically triggered this job."
—run: echo " A ${{ runner.os }} server hosted by GitHub has this job running"
—run: echo "Details of your repository: repo-name: ${{ github.repository }} and branch name is${{ github.ref }} and your repository is ${{ github.repository }}."
—name: Checking out the repository’s code
uses: actions/checkout@v3
—run: echo "The runner has cloned your ${{ github.repository }} repository."
—run: echo "The workflow can now test your code with the runner."
—name: List files in the repository
run: |
ls ${{ github.workspace }}
—run: echo " This job has a ${{ job.status }} status."
روی Propose new file کلیک کنید تا یک درخواست PR برای commit کردن این فایل به مخزن ایجاد شود.
به انتهای صفحه رفته و گزینه Create a new branch for this commit و start a pull request را انتخاب کنید.
هنگامی که فایل yml کامیت می شود، رویداد push جریان کاری را که در آن توضیح داده شده است، راه اندازی می کند. نتایج گردش کار در یک گزینه متفاوت نشان داده می شود.
نمایش نتایج گردش کار
برای مشاهده نتایج پس از اجرای یک گردش کاری GitHub Actions:
به صفحه اصلی مخزن بروید و روی Actions در نوار زیر نام مخزن کلیک کنید.
یک نوار کناری در سمت چپ، تمام گردشهای کاری صفحه باز شده را نشان میدهد. روی موردی کلیک کنید که Demo-GitHub-Actions-Workflow را نشان می دهد، نام گردش کار ایجاد شده برای این آموزش.
فهرست موجود در مرکز، گردش کار اجرا شده را نشان می دهد. گزینه ای را که Create demo-github-actions-workflow.yml را نشان می دهد انتخاب کنید تا نتایج مورد ایجاد شده در بخش قبلی یعنی Create Workflow را ببینید.
زیر نوار کناری سمت چپ که Jobs را نمایش می دهد، موردی را انتخاب کنید که Discover-GitHub-Actions-Workflows را نشان می دهد.
گزارشی که باز می شود هر مرحله از گردش کار و خروجی آن را نشان می دهد.
مراحل دستورات اکو در گردش کار نشان می دهد که متغیرها با مقادیر مربوطه جایگزین شده اند. روی مرحله ای کلیک کنید که لیست فایل ها را در مخزن نمایش می دهد و فایل های موجود در مخزن را نشان می دهد.
دقت کنید که GitHub گردش کار از پیش ساخته شده ای را ارائه می دهد که کاربران می توانند از آنها به عنوان الگو استفاده کنند و بر اساس نیازهای خود سفارشی کنند. GitHub بر اساس کتابخانهها، زبانها و چارچوبهایی که در کد مخزن وجود دارد، گردش کار شروع مناسب را پیشنهاد میکند.
بهترین اقدامات GitHub Actions
در اینجا چند نکته برای استفاده از GitHub Actions آورده شده است.
از Minimal Actions استفاده کنید
ماشین مجازی یک اکشن پهنای باند بالایی دارد و نسبتاً سریع است، اما اقدامات پیچیده برای راهاندازی و اجرا طولانیتر طول میکشد و در نتیجه زمان بیشتری صرف انتظار میشود. GitHub Actions برنامههای ماشین مجازی محدودی دارد، طرح رایگان حداکثر 2000 دقیقه رایگان در یک ماه معین دارد.
هنگام تنظیم یک گردش کار یا اقدام، ممکن است احساس نکنید که چند ثانیه تفاوت زیادی ایجاد می کند، با این حال، این ثانیه ها بسته به رویدادهایی که اقدامات و گردش کار را آغاز می کنند، جمع می شوند. بهترین روش مهم هنگام ایجاد اقدامات جدید این است که سعی کنید آنها را تا حد امکان حداقل نگه دارید.
به عنوان مثال، شما باید از ایمیج های Docker سبک برای اقداماتی که در کانتینرها اجرا می شوند استفاده کنید، به عنوان مثال، alpine، alpine-node. نصب ها را به حداقل برسانید تا زمان اجرای عملیات از بوت تا تکمیل کاهش یابد.
روشن نگه داشتن اقدامات مهم است صرف نظر از اینکه آیا یک اکشن مستقل ایجاد می کنید یا یک گردش کار کامل CI/CD. GitHub Actions هر اکشن را در یک محیط تمیز برای هر اجرا تنظیم و اجرا می کند، بنابراین باید هر بار تمام وابستگی ها را دانلود و نصب کند.
از دانلودهای وابستگی غیر ضروری خودداری کنید
یکی دیگر از راههای کاهش زمان اجرا این است که از نصب یا دانلود وابستگیها تا حد امکان اجتناب کنید. شما می توانید از چندین روش برای به حداقل رساندن دانلودهای وابستگی استفاده کنید، اگرچه همه اینها بر اساس دو استراتژی اصلی هستند.
اولین رویکرد انتشار کل پوشه ماژول گره است. این استراتژی برای انتشار اقدامات مستقل در پروژه های مبتنی بر Node مناسب است. روش دوم استفاده از مکانیسم کش در GitHub تا جایی که ممکن است است. این استراتژی برای اقدامات مستقل و همچنین اقداماتی که در یک گردش کار CI انجام می شود مناسب است.
از secrets کدگذاری سخت خودداری کنید
یکی از ویژگی های مهم GitHub Actions مدیریت مخفی است. شما secrets رمزگذاری شده را در تنظیمات مخزن ذخیره می کنید و هر زمان که بخواهید آنها را به عنوان متغیرهای محیطی یا ورودی اقدامات خود ارائه می دهید. GitHub Actions به طور خودکار secrets ثبت شده به طور تصادفی یا عمدی را حذف می کند. با این حال، اسناد GitHub همچنین توصیه می کند که از ثبت secrets اجتناب کنید زیرا این قابلیت ویرایش خودکار به طور کامل مؤثر نیست، به خصوص برای secrets حاوی داده های ساختاریافته.
نکته کلیدی این رویکرد این است که از کدگذاری دستی هر گونه secrets در جریان های کاری عمومی یا خصوصی اجتناب شود. شما باید secrets را به صورت دستی در تنظیمات مخزن خود تنظیم کنید و از ورودی های مرحله یا متغیرهای محیطی برای دسترسی به آنها استفاده کنید.
جزئیات نویسندگی را در متا دیتا Action ذخیره کنید
میتوانید نویسندگان اکشن ها را تشویق کنید که مالکیت کدشان را با مشخص کردن نویسنده اکشن در متا دیتا در دست بگیرند، این دادهها در یک فایل YML قرار میگیرند که عمل را تعریف میکند. این متا دیتا میتواند شامل جزئیات زیادی درباره هر اقدام، از جمله ورودیهای مورد نیاز، نام تجاری، نقطه ورودی، خروجیها و نویسنده آن باشد.
دو مورد استفاده اصلی برای گنجاندن نویسنده اشکن در فایل متا دیتا وجود دارد. اول، زمانی که شما اقدامات عمومی دارید، مهم است که هر عمل را به نویسنده صحیح نسبت دهید. علاوه بر اعتبار بخشیدن به نویسندگان برای کارشان، به دیگرانی که از این اقدامات استفاده میکنند اجازه میدهد نویسنده را با هر سؤالی شناسایی کرده و به او مراجعه کنند.
مورد دوم برای اقدامات خصوصی با یک سازمان اعمال می شود. موضوع اعتبار کمتر مرتبط است زیرا هیچ کس خارج از شرکت آن را نمی بیند. با این حال، تیم داخلی هنوز باید بداند که چه کسی مسئول هر عمل است، نویسنده به سؤالات مربوط به عمل پاسخ می دهد.
نتیجه
به طور کلی، GitHub Actions ابزار قدرتمندی است که میتواند برای خودکارسازی بسیاری از جنبههای توسعه نرمافزار، از آزمایش و استقرار تا مدیریت انتشار و فراتر از آن، استفاده شود و زندگی ما را بسیار آسان کند.