Github Actions یا Jenkins - انتخاب مناسب برای شما کدام است؟

آفلاین
user-avatar
عرفان حشمتی
18 شهریور 1400, خواندن در 7 دقیقه

طی چند سال گذشته DevOps به بخشی مهم از چرخه عمر نرم‌افزار تبدیل شده است. این امر به رشد بسیاری از ابزارها و روش‌های پیش روی DevOps دامن زده است. می‌توانید طیف وسیعی از ابزارها را برای پشتیبانی از فرآیند CI/CD پیدا کنید. Jenkins و GitHub Actions هم به طرز چشمگیری در میان آنها قرار دارند.

در این مقاله قصد داریم GitHub Actions را با Jenkins مقایسه کنیم تا بتوانید انتخاب مناسبی را بین آنها داشته باشید.

مقدمه‌ای بر Jenkins و GitHub Actions

بیایید با Jenkins شروع کنیم. در اینجا یک توضیح مختصر وجود دارد:

"Jenkins یک سرور اتوماسیون متن باز و رایگان است. این کمک می‌کند تا بخش‌های مختلف توسعه نرم‌افزار اعم از ساخت، تست، استقرار، ادغام و تحویل مداوم تسهیل گردیده و اتوماسیون سازی شود." - به نقل از ویکی پدیا

به همین ترتیب GitHub Actions آخرین موردی است که GitHub به عنوان یک پیشنهاد SaaS ارائه می‌دهد.

GitHub Actions اکنون اتوماسیون نحوه ساخت، تست و استقرار پروژه‌های خود را در هر پلتفرمی از جمله لینوکس، مک و ویندوز آسان‌تر می کند. همچنین گردش کار خود را در یک کانتینر یا ماشین مجازی اجرا می‌کند." - به نقل از وبلاگ گیت هاب

قبل از تصمیم گیری در مورد اینکه آیا ارزش استفاده را دارد، بگذارید بفهمیم چه کسی حتی در وهله اول باید این مسئله را در نظر بگیرد.

آیا باید مهاجرت از Jenkins را در نظر بگیرید؟

اگر همه چیز با Jenkins برای شما انجام می‌گیرد و از کار خود اطمینان کامل دارید و همچنین کنترل و هزینه برایتان مسئله‌ای نیست، توصیه می‌کنم با Jenkins پیش بروید.

برای کسانی که از گیت هاب به عنوان پلتفرم کنترل منبع استفاده می‌کنند و احساس می‌کنند که تنظیمات Jenkins برایشان کافی نیست و به دنبال جایگزین بهتری هستند، GitHub Actions گزینه اصلی برای استفاده خواهد بود.

از آنجا که GitHub Actions یک سرویس کاملا مدیریت شده توسط گیت هاب است، نیازی نیست بدانید که چگونه زیرساخت‌ها را برای اجرای آن مقیاس بندی کنید.

این دلیل اصلی است که من تصمیم گرفتم از Jenkins جایی که کنترل کامل آنچه در خطوط لوله CI/CD اتفاق افتاده بود، خارج نشوم.

برخی از چالش‌هایی که باید با آنها کنار می‌آمدم:

  • به روز نگه داشتن پلاگین‌ها
  • هزینه بالای ساخت سرور Jenkins حتی در صورت عدم اجرای بیلد
  • ناهمزمان بودن بیلدها
  • وابستگی به چندین پلاگین همراه با به روزرسانی‌هایی که باید مداوم صورت گیرد

من می‌دانم که با Jenkins راه حل‌هایی برای حل برخی از این مسائل وجود دارد، اما به اندازه کافی زمان داشتم و به سمت یک پلتفرم مدیریت شده حرکت کردم.

بیایید ویژگی‌هایی را که GitHub Actions برای اثبات این تصمیم ارائه می‌دهد بررسی کنیم. 

سهولت نصب – همه چیز توسط GitHub مدیریت می‌شود

به نظر من اولین و مهمترین نکته مثبت GitHub Actions نسبت به Jenkins سهولت نصب در آن است. این پلتفرم cloud-base است یعنی در فضای ابری کار می‌کند. شما می‌توانید آن را به صورت لوکال یا محلی اجرا کنید که به آن runner گفته می‌شود. برعکس آن Jenkins قابلیت ارائه سرویس‌های رسمی مدیریت شده ندارد.

ممکن است به سراغ پیشنهادات مدیریت شده شخص ثالث برای Jenkins نروم. من احساس می‌کنم که تحویل دسترسی به کد منبع و اطلاعات حساس به ارائه دهنده شخص ثالث بسیار خطرناک است.

به همین دلیل سرور Jenkins به نصب نیاز دارد، در حالی که GitHub Actions اینگونه نیست. در نتیجه فرایند تنظیم در GitHub Actions بسیار راحت است. علاوه بر این مجموعه‌ای از برنامه‌های داکر را دارد. این کار اجرا و دیباگ کردن را بسیار آسان می‌کند.

ادغام فشرده با GitHub - تجربه یکپارچه

در ابتدا Jenkins انعطاف پذیرتر از GitHub Actions به نظر می‌رسید. Jenkins عمدتا بر اساس اکانت‌ها و تریگرها ساخته می‌شود. این موارد با رویدادهای GitHub مطابقت ندارند. در مقابل GitHub Actions طیف گسترده‌ای را پوشش می‌دهد. بنابراین برای هر رویداد گیت هاب یک GitHub Action وجود دارد.

GitHub Actions از بسیاری از زبان‌ها و فریمورک‌ها پشتیبانی می‌کند و همچنین با YAML نوشته شده است. بنابراین می‌تواند دقیقا مانند کد ویرایش شود، مورد استفاده مجدد قرار گیرد، به اشتراک گذاشته شود و فورک گردد.

استفاده از گیت هاب ساده است، چرا که وقتی یک ریپازیتوری را فورک می‌کنید، actionها به طور خودکار فورک می‌شوند.

این به شما امکان می‌دهد پروژه‌ها را به صورت کارآمد تست کرده، ایجاد کنید و حتی آنها را نزدیکتر با توسعه دهنده اجرا کنید. همچنین به آسانی به GitHub API دسترسی دارید و باعث محبوبیت بیشتر آن در بین توسعه دهندگان می‌شوید.

هنگام استفاده از Bit (Github) می‌توان یکی از موارد محبوب این چنین ادغام فشرده را مشاهده کرد. Bit یک ابزار و پلتفرم است که به اشتراک گذاری کامپوننت‌های JS (Node ، React ، Vue ، Angular و ...) را از هر ریپازیتوری به سرویس ابری Bit و از آنجا به ریپازیتوری‌های دیگر آسان می‌کند.

سرویس ابری Bit می‌تواند به طور خودکار درخواست‌های pull را برای همه ریپازیتوری‌های گیت هاب ایجاد کند که تحت تأثیر تغییر در یک کامپوننت مشترک قرار دارند. این روابط تولید خودکار می‌تواند به عنوان محرک‌های Github Actions عمل کند.

به این معنی که تغییر ایجاد شده در یک کامپوننت منفرد (مشترک) می‌تواند در تمام ریپازیتوری‌ها با استفاده از آن گسترش یابد و موجب راه اندازی CIهایی شود که تأیید می‌کند هیچ چیزی در پروژه‌ها باقی نمانده است.

کامپوننت‌های مشترک در Bit.dev

اطلاعات بیشتر در مورد آن را اینجا بخوانید.

ویژگی جالب دیگر Github Actions این است که می‌توان آنها را از طریق GitHub Marketplace در میان یکدیگر به اشتراک گذاشت. شما می‌توانید از اکشن‌هایی که سایر توسعه دهندگان نوشته‌اند، استفاده مجدد کنید که می‌تواند در زمان صرفه جویی کرده و از بازنویسی کد موجود جلوگیری کند.

گره‌های بیلد - ساخته شده برای مقیاس بندی

Github Actions به طور پیش فرض از الگوی master-slave (هماهنگ کننده و گره‌های بیلد) پیروی می‌کند، بر خلاف خط لوله ترتیبی که Jenkins به ما پیشنهاد می‌دهد.

با این حال توجه به این نکته مهم است که پیکربندی مشابهی با Jenkins امکان پذیر است اما برای راه اندازی آن به تلاش و دانش بیشتری نیاز است.

چندین کامپوننت Github Actions که برای اجرای فرایندها با هم کار می‌کنند

اگر از Jenkins استفاده کنید، تنظیمات پیش فرض هر مرحله از خط لوله استقرار را به طور همزمان انجام می‌دهد. به عنوان مثال اگر نیاز به انجام تست‌های Unit ، تست‌های Integration و برخی تأییدهای Sonar دارید، آنها باید در یک محیط سرور اجرا شوند. این ممکن است اجرا را بر اساس منابع موجود در سرور شما به تأخیر بیندازد. علاوه بر این دیگر مجبور نیستید تلاش بیشتری برای بالا بردن قابلیت اطمینان خطوط لوله کنید.

با استفاده از Github Actions همانطور که در تصویر بالا نشان داده شده می‌توان فرایندها را موازی سازی کرد. به عنوان مثال Job 1 می‌تواند تست‌های Unit و تست‌های Integrations باشد، Job 2 هم می‌تواند تأییدهای Sonar باشد.

جمع‌بندی

ما به طور انتقادی به چند ویژگی Github Actions و Jenkins اشاره کردیم. با توجه به این نکته که Github Actions سریعتر از Jenkins رشد می‌کند، جامعه پیرامون در مواردی که ریپازیتوری‌های اختصاصی برای Github Actions وجود دارد نیز در حال بهبود است.

بیایید خلاصه‌ای از مقایسه را بررسی کنیم.

با این حال، اینکه از کدام یک در پروژه خود استفاده کنید، به نیازهایتان بستگی دارد. در حال حاضر Github Actions برای ریپازیتوری‌های عمومی رایگان است، اما برای ریپازیتوری‌های خصوصی مکانیزم پرداخت به عنوان هزینه بر عهده شماست.

امیدوارم فهمیده باشید که GitHub Actions عمدتا به دلیل انعطاف پذیری، انتخاب مناسب‌تری نسبت به Jenkins است. اما برای کسانی که یک پروژه جدید شروع کرده یا از گیت هاب به عنوان پلتفرم کنترل منبع استفاده می‌کنند، حرکت به سمت آن کار ساده‌ای نیست.

برای مبتدیان مستندات گیت هاب مراحل دقیق دستیابی به این هدف را ارائه می‌دهد. می‌توانید توضیحات روند کاری Github Actions را در اینجا پیدا کنید.

امیدوارم از این مقاله لذت برده باشید. فراموش نکنید که نظرات خود را حتما در بخش زیر برای ما ارسال کنید.

منبع

چه امتیازی به این مقاله می دید؟
خیلی بد
بد
متوسط
خوب
عالی

دیدگاه‌ها و پرسش‌ها

برای ارسال دیدگاه لازم است، ابتدا وارد سایت شوید.

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

آفلاین
user-avatar
عرفان حشمتی @heshmati74
مهندس معماری سیستم های کامپیوتری، طراح و توسعه دهنده وب سایت
دنبال کردن

گفتگو‌ برنامه نویسان

بخشی برای حل مشکلات برنامه‌نویسی و مباحث پیرامون آن وارد شو