اتوماسیون ابر یه اصطلاح گسترده‌ست و به فرآیندها و ابزارهایی اشاره داره که یک سازمان برای کاهش تلاش‌‌های دستی مرتبط با تأمین و مدیریت حجم کار محاسبات ابری استفاده می‌کنه. تیم‌های IT می‌تونن اتوماسیون ابر رو به محیط‌های ابر خصوصی، عمومی و هیبرید اعمال کنن.

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

اگرچه هر کدوم از این فرآیندهای تکراری و دستی مؤثر هستن، اما تقریباً ناکارآمد هستن و اغلب دچار اشتباه می‌شن و خطاهایی رو به وجود میارن که باید برطرف بشن و این مسأله باعث می‌شه دسترسی پذیری برنامه پایین بیاد. همچنین ممکنه مسائل امنیتی رو در معرض خطر قرار بدن و باعث ایجاد مشکل برای شرکت بشن.

با Cloud automation، این فرآیندهای تکراری و دستی از بین می‌رن. برای دستیابی به اتوماسیون ابر، یک تیم IT باید از ابزارهای هماهنگ سازی (Orchestration) و خودکارسازی (automation) که در محیط های مجازی کاربرد دارن، استفاده کنه.

در تعریف کامل‌تر، automation به معنای ایجاد فناوریست و کاربردش برای کنترل و نظارت بر تولید و ارائه کالا و خدمات مختلف هست که این وظایف قبلاً توسط انسان انجام میشد.

 Orchestration یعنی استفاده از فناوری برنامه‌نویسی برای مدیریت ارتباطات و تعامل ها بین حجم کاری در زیرساخت‌های دولتی و خصوصی، که وظایف خودکار را با توجه به یک سری مجوزها و سیاست‌ها  به یک جریان کاری منسجم متصل می‌کنه و معمولاً برای تهیه، استقرار یا راه اندازی سرورها استفاده میشه، ظرفیت ذخیره‌سازی را پیدا میکنه و آن را تخصیص میده، همچنین وظیفه مدیریت شبکه دسترسی به نرم افزارخاص در سرویس‌های ابری را بر عهده داره و این کار از طریق سه ویژگی اصلی Orchestration انجام میشه: سرویس، حجم کار و هماهنگ سازی منابع.

با توجه به بخش‌های متحرک زیادی که در ابر وجود دارد، Orchestration  بسیاری از وظایف و ویژگی‌ها از قبیل در دسترس بودن، مقیاس‌گذاری، جبران اشکالات و مدیریت وابستگی‌ها را در یک فرآیند واحد قرار میده که میتونه تلاش کارکنان را به شدت کاهش بده. همچنین چشم انداز و دیدی را نسبت به منابع و فرآیندها فراهم می‌کند که اتوماسیون ساده ابری فاقد آن است.

Orchestration به یک مدیر این توانایی رو میده که مراحل و فرآیندهای مختلف درگیر با گسترش حجم کاری و مدیریت رو تدوین کنه، در حالی که automation این امکان رو ایجاد میکنه که این گام‌ها بدون مداخله انسان انجام بشه.

خوشبختانه، بسیاری از ابزارهای اتوماسیون ابر برای کمک به سرعت بخشیدن به این فرآیند وجود داره. ما توی این پست دو ابزار ansible و jenkins رو بررسی می‌کنیم.

جنکینز:

جنکینز یک ابزار اوپن سورس برای  Continuous Integration یا ادغام مداوم هست که به زبان جاوا نوشته شده. Continuous Integration که با نام CI هم نام برده می‌شه، یک بخش مهم برای توسعه خودکار نرم افزارهای مدرنه.

Continuous Integration یک روش توسعه هست که به توسعه‌دهندگانی نیاز داره  تا چندین بار در روز کدها رو در یک مخزن مشترک ادغام کنن. هر بررسی ای که صورت میگیره  با یک عمل build  خودکار، تأیید میشه و به تیم های برنامه‌نویسی این امکان را می ده که زودتر مشکلات را تشخیص بدن. یک زیرساخت خوبِ CI می‌تونه فرآیند توسعه رو از طریق استقرار، بهینه سازی کنه و کمک کنه تا خطاها و باگ‌ها زودتر شناسایی بشن، یک داشبورد پروژه مفید برای توسعه دهندگان و غیر توسعه دهندگان فراهم کنه و در نهایت به تیم‌ها کمک کنه تا ارزش بیشتری به کاربر نهایی ارائه بده. 

خلاصه اینکه جنکینز، سرویس‌های CI را برای توسعه‌ی نرم‌افزارها ارائه می‌ده. سیستم کنترل نسخه‌های مختلف برنامه شما رو مدیریت می‌کنه. هر زمان که یک تغییر شناسایی می‌شه، به طور خودکار برنامه، کامپایل شده و ایجاد می‌شه . اگر مشکلی پیش بیاد، فوراً برنامه‌نویسان رو مطلع می‌کنه تا اون‌ها بتونن فوراً موضوع رو حل کنن.

بیاین یه سناریو رو تصور کنیم که توی اون سورس کد کامل یه برنامه آزمایشی روی یه سرور آزمایشی ایجاد و مستقر شده:

ابتدا توسعه دهنده، سورس‌کد برنامه رو توی مخزن مورد نظرش کامیت می‌کنه.

در همین حال، سرور جنکینز مخزن را در فواصل زمانی منظم برای تغییرات چک می‌کنه. اگر هر تغییر یا اشکالی رخ داده باشه، سرور جنکینز اون رو شناسایی می‌کنه.

جنکینز تغییرات رو پیدا میکنه و برنامه ی جدیدی رو بر اساس این تغییرات ایجاد می‌کنه.

اگر ساخت برنامه با شکست روبرو بشه، به اعضای تیم اطلاع رسانی می‌کنه. اما اگر ساخت برنامه موفقیت آمیز باشه، جنکینز برنامه رو روی سرور مستقر می‌کنه.

جنکینز این کار رو مرتباً انجام می‌ده و مخزن رو پی در پی برای شناسایی تغییرات بررسی می‌کنه.

چرا از جنکینز استفاده کنیم؟

چون جنکینز یک ابزار متن بازه و علاوه بر اون خیلی کاربر پسند یا همون user-friendly هست. خیلی ساده نصب میشه و به کامپوننت‌های اضافی برای نصب احتیاج نداره.

پیکربندی، تغییر و توسعه‌ی جنکینز خیلی راحته. 

جنکینز وابستگی به پلتفرم خاصی نداره و بر روی انواع سیستم‌های عامل قابل دسترسی هست.

با توجه به اینکه جنکینز اوپن سورسه و افراد زیادی از اون استفاده میکنن، در نتیجه پشتیبانی گروه زیادی از افراد رو در اختیار داره.

به وسیله جنکینز بیشتر کارها با کمترین خطا به صورت خودکار انجام میشه و این موجب صرفه‌جویی در وقت و هزینه و همچنین افزایش طول عمر پروژه هست.

Ansible چیست؟

Ansible یه موتور خودکارسازی متن بازه که می‌تونه اضافه کاری‌ها رو از زمان کاری شما حذف کنه، همچنین به طور قابل توجهی باعث بهبود اطمینان و سازگاری و مقیاس‌پذیری محیط IT شما می‌شه. در واقع یه پلتفرم اتوماسیون کاملاً ساده IT هست که باعث میشه برنامه‌ها و سیستم‌های شما امکان استقرار راحتتری داشته باشن.

از ansible برای خودکار کردن ۳ نوع task استفاده می‌شه:

1-Provisioning:

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

2-مدیریت پیکربندی:

پیکربندی یک برنامه، os (سیتم عامل) یا یک دستگاه رو تغییر بدین؛ سرویس‌ها رو شروع کنین و یا اون‌ها رو متوقف کنین، برنامه‌ها رو نصب و به‌روزرسانی کنین، راه‌کارهای امنیتی پیاده سازی کنین و….

3- Application deployment:

با استفاده از خودکارسازی توی مراحل تولید و توسعه‌ی نرم‌افزار‌هاتون، می‌تونین Develops رو آسون‌تر کنین.

Ansible می‌تونه انواع محیط‌های IT، از سرورهای سنتی گرفته تا فضای ابری رو به صورت خودکار سازماندهی کنه. همچنین می‌تونه پیکربندی طیف گسترده‌ای از سیستم‌ها و دستگاه‌هایی مثل دیتابیس‌ها، دستگاه‌های ذخیره‌سازی، شبکه‌ها، فایروال‌ها رو به صورت خودکار انجام بده.

بهترین قسمت این موضوع اینه که شما حتی نیاز ندارین دستورات استفاده شده برای انجام یک task خاص رو داشته باشین. فقط کافیه مشخص کنین که میخواین سیستم شما در چه حالتی باشه؛  ansible اون حالت رو حفظ میکنه و ازش مراقبت می‌کنه.

چرا ansible؟

ابزارهای زیادی برای خودکارسازی IT وجود داره مثل: Puppet و Chef، پس چرا ansible رو انتخاب می‌کنیم؟ دلیل اصلیش، سادگی اونه.  Michael DeHaan خالق ansible که قبل از این تجربه‌ی استفاده از بسیاری از ابزارهای مدیریت پیکربندی  رو داشت، وقتی تصمیم گرفت این سیستم جدید رو بسازه گفت : "این ابزار اونقدر ساده است که اگر ۶ ماه ازش استفاده نکنین و بعد از ۶ ماه تصمیم بگیرین که دوباره اون رو مورد استفاده قرار بدین، نحوه استفاده از اون رو کاملاً به خاطر میارین."

 DeHaan اون رو به وسیله ی YAML یک زبان پیکربندی ساده ایجاد کرد. ولی Puppet  و Chef،  از Ruby استفاده می‌کنن که یادگیری اون خیلی سخته و همین باعث میشه ansible مخصوصا برای مدیرها جذاب باشه.  

YAML ، نسبت به XML  یا JSON  پیچیدگی کم‌تری داره اما قابلیت‌های مشابهی را ارائه می ده. در اصل به شما این امکان  رو میده که بدون نیاز به یادگیری یک نوع کد پیچیده‌تر مانند JavaScript،CSS یا PHP  تنظیمات پیکربندی قدرتمند را ارائه بدین.

علاوه براین ansible یک ابزار agentless هست، بنابراین نیازی نیست که یه  agent روی هر کدوم از سیستم‌هایی که میخواین مدیریت کنین نصب کنین، فقط لازمه اون سیستم‌ها پایتون یا PowerShell (در سرور های ویندوز) و SSH (پروتکلی برای ورود ایمن از راه دور از یک کامپیوتر به کامپیوتر دیگر) داشته باشن.