تفاوت Ansible و Jenkins
۱۷ مرداد ۱۳۹۹
یکی از چالشهایی که در حوزه DevOps با آن روبرو میشوید، نقطه شروع است. ابزارهای زیادی وجود دارد، در حالی که یکی از اهداف DevOps، بهبود عملیات شما است، آشنایی با این ابزارها، به جهت اینکه شاید به شما کمک کنند، اهمیت مییابد. همچنین شما به دنبال کارایی و عملکردی عالی هستید و نمیخواهید از ابزاری استفاده کنید که در عین حال ابزار دیگر، چنین کاری را برای شما انجام میدهد، به عبارتی چندین ابزار مشابه دارید. حتی از ابزارهایی استفاده میکنید که منابع و هزینه بیشتری نسبت به سایر ابزارهای مشابه، مصرف میکند. هرچه بیشتر مطالعه کنید، به سوالهای بیشتری برخورد خواهید کرد. آیا باید از Docker استفاده کنید؟ Chef؟ چگونه باید از Ansible یا Jenkins و یا Capistrano استفاده کنید؟
در این مقاله، تفاوت موجود میان دو تکنولوژی موجود در حوزه DevOps، یعنی Ansible و Jenkins، به همراه مزایا و کارایی آنها را بررسی خواهیم کرد. در انتها نیز موارد استفاده مناسب برای هر کدام و حتی نحوه کار این دو با یکدیگر را بیان خواهیم کرد.
Jenkins چیست؟
یکی از ابزارهای پایهای و قدیمی DevOps است. همانند سایر ابزارهای اساسی در این حوزه، Jenkins ابزاری برای اجرای چندین اسکریپت، در یک زمان است. اگر یک اسکریپت با موفقیت اجرا شود، نوبت به اجرای اسکریپت بعدی میرسد و این روند تا پایان اجرای تمام اسکریپتها ادامه پیدا میکند. اگر یک اسکریپت با شکست مواجه شود، یک اعلان به ادمین ارسال میکند و فرایند در همین جا متوقف میشود. چیزی که Jenkins را قدرتمند میکند، قابلیت تنظیم و پیکربندی کردن آن به صورت نامحدود است و تا حدودی نسبت به سایر ابزارها بهتر است. از آنجا که ابزاری قدیمی است، میتوانید اسکریپتی را پیدا کنید که به شما این امکان را میدهد تا هر کاری را انجام دهید.
استفاده از Jenkins میتواند یک گام بزرگ باشد. توسط آن میتوان کارهای مربوط به ایجاد نرمافزار و یا اجرای تست به هنگام pushکردن کد توسط شخصی در گیتهاب را انجام داد. چالش کارکردن با Jenkins، خطی بودن این ابزار است. به عبارتی ابتدا مرحله اول، سپس دوم، سوم و … را اجرا میکنید. نیاز است تا هر کدام از اسکریپتهایتان نسبت به محیط اجرایی آگاهی داشته باشند و بدانند که چطور به هنگام مواجه شدن با یک موضوع غیرمنتظره، به خوبی این موضوع یا خطا را مدیریت کنند. Jenkins یک ابزار برای انتقال ترافیک است که اگر سرورهایتان توسط مدیران سیستمی که اسکریپتهای زیادی برای اجرا بر روی سرورها نوشتهاند، مانیتور میشوند، گزینه مناسبی است. به هر حال اکثر تیمهای DevOps، به دنبال ابزاری قدرتمند برای مدیریت فرایند توسعهشان هستند. معمولا این کار را انجام میدهند زیرا مدیریت استقرارها از طریق Jenkins بسیار پیچیده است.
Ansible چیست؟
Ansible ابزاری است که توسط RedHat توسعه داده شده و ابزاری برای مدیریت استقرار سرویسها است. مزیت اصلی Ansible هنگامی خود را نشان میدهد که برنامهتان بر روی چندین سرویس در یک سرویسدهنده ابری، نظیر AWS یا RedHat OpenShift اجرا میشود. ابتدا محیطتان را برای Ansible تعریف میکنید، سپس Ansible با دقت و ظرافت، با توجه به تنظیمات موجود، پیکربندی محیط و سرویسها را انجام میدهد. Ansible یکی از پرچمداران Infrastructure As Code و اولین ابزارهایی است که تیمها در حوزه DevOps به آن برخورد خواهند کرد و نیاز خواهند داشت.
برای بسیاری از مهندسان امنیت و پایداری وبسایتها، Ansible یک ابزار مهم و حیاتی است. آنها از ابزارهایی همچون Ansible استفاده میکنند تا مطمئن شوند سرویسهایشان همیشه در حال ارائه خدمات هستند. به احتمال زیاد با خطایابی در یک استقرار اشتباه آشنا هستید و آن را تجربه کردهاید. به هنگام استقرار نسخه جدیدی از برنامه، مشکلی رخ میدهد و شما اصلا نمیدانید که این خطا از کجا نشأت گرفته است. در نهایت، میتوانید این موضوع و خطا را در لاگهای مبهم برنامه، دنبال کنید. مثال: خطا برای عدم اتصال به سرور بر روی پورتی که اطمینان داشتید این پورت را باز کرده بودید.
این مثالها، مشکلهایی هستند که Ansible برای حل آنها ساخته شده است و این اطمینان را به شما میدهد که پورتی که نیاز داشتید باز باشد، همیشه باز است. اگر پورت مدنظرتان باز نباشد، Ansible استقرار را تا رفع مشکل پورت، متوقف میکند. این قضیه باعث افزایش سرعت توسعه و آسانتر شدن کار شما میشود.
Ansible Tower چیست؟
به هنگام انتشار اولین نسخه Ansible، یکی از کاستیها، تنها قابلیت استفاده از آن به عنوان سیستم توسعه یا deployment system بود. مشکلی نیست، اما مانند Jenkins، اکثر تیمهای DevOps از ابزارهایی استفاده میکنند که اکثر مشکلهایشان را حل کند. به همین دلیل RedHat، سیستم Ansible Tower را توسعه داد تا از طریق آن بتوان کارهای تکراری را به صورت خودکار اجرا و مدیریت کرد. Ansible Tower این امکان را به شما میدهد تا کاملا بر روی وضعیت جریان کار نظارت داشته باشید و به خوبی با سایر قسمتهای Ansible کار میکند.
Ansible Tower ابزارهایی که برای مدیریت استقرارهایی که بر اساس یک سری شروط بنا شدهاند را ارائه میکند. برای مثال، اگر نمیخواهید که یک محیط، تا قبل از موفق شدن تمام تستها، به کار افتد، Ansible Tower ابزاری مناسب برای شما است.
Jenkins یا Ansible Tower؟
در بعضی از موارد، این سوال به محیط و نیازهای شما بستگی دارد. آیا اسکریپتهای زیادی دارید که به خوبی با یکدیگر کار میکنند؟ آیا همه آنها ساده هستند؟ احتمالا Jenkins ابزاری مناسب برای شما خواهد بود.
بااینحال اگر به دنبال چیزی قدرتمندتر هستید، که مشکلهای بزرگتر را برطرف کند، ممکن است Ansible و Ansible Tower برای شما مفید باشند. همانطور که اشاره شد، این موارد، گزینههای مختلفی را به شما ارائه میدهد و اجزای آن به گونهای ساخته شدهاند که به خوبی با یکدیگر کار میکنند. Jenkins به صورت داخلی، فاقد ابزاری برای توسعه است، اگرچه میتوانید آن را به هر ابزار استقرار دیگر، متصل کنید. Ansible و Ansible Tower به خوبی با یکدیگر کار میکنند و به صورت کامل از CI/CD پشتیبانی میکنند.
علاوه بر این، Ansible و Ansible Tower، رابطهای کاربری قدرتمندی دارند. آنها در درک فرایند DevOps به خوبی به شما کمک میکنند. با یک نگاه میتوانید نسبت به وضعیت سرویسهایتان آگاه شوید. این روش باعث میشود که مشکلها را حل کرده و up-time را به ۱۰۰٪ نزدیکتر کنید.
برای مدتها، اتصال توسعههای Ansible به CI در Jenkins، بسیار متداول بود و به خوبی کار میکرد. به هر حال، درک و نگاهی که توسط Ansible و Ansible Tower ارائه شده است، شما را از خودکارسازی فرایندها به پیشگیری از مشکلها، قبل از وقوع آنها، سوق میدهند. این نگاه تاثیر بسزایی در بلوغ تیم DevOps شما خواهد گذاشت.
جمعبندی
در پایان، همچنان سوال “Ansible یا Jenkins؟” است. Jenkins ابزاری قدرتمند است و با هر ابزار دیگری کار میکند. اما گاهی اوقات این کار کردن و سازگاری با سایر ابزارها به معنی انجام بسیاری از کارهای دیگر، به صورتی دستی است. اگر چیزی با مشکل روبرو شود، تشخیص و رفع آن به عهده شما خواهد بود. Ansible و Ansible Tower، دنیای جدیدی از سازگاری برای فرایند توسعه شما، ارائه میکنند. همچنین این کمک را میدهند که از یک فرایند واکنشی و مرحلهای، به سمت فرایندی پیش روید که قبل از ایجاد مشکل برای کسی، آنها را پیشبینی و پیشگیری کنند. این موضوع یکی از اهداف بلند مدت برای اکثر تیمهای DevOps است. با همه این تفاسیر برای حل مشکلها، به جای این که به هنگام وقوع آنها، راه حلی پیدا کنید، از ابزارهایی استفاده کنید که این موضوعها را برای شما پیشگیری کنند.
اما شاید این قدرت، تنها شما را از هدفتان دور کند. بله، Ansible درک خوبی از وضعیت محیط اجرا و توسعهتان میدهد و آن را به آسانی و ملایمت اجرا میکند. محیط شما تنها سرورها یا اتصالهای شبکه نیست. محیط شما کد نوشته شده به همراه کاربرانتان که به سرویسهای شما نیاز دارند، است. Ansible این اطمینان را به شما میدهد که تمامی سرویسها به درستی اجرا شدهاند، اما به هیچ وجه نمیتواند کد شما را بررسی کند.
از هر ابزاری که استفاده میکنید، هدف DevOps، بهبود مستمر برنامه و سرویسهایتان است. این بدان معنی است که استفاده از این ابزارها باعث محکمتر شدن محیط اجرایی و سرویسهایتان میشود.