بر طبق استراتژی من در تمامی مقالات این وبلاگ، سعی می کنم که هر موضوعی را به ساده ترین طریق ممکن توضیح دهم. بنابراین، بگذارید با یک مثال شروع کنیم. شما در ارتباط با سیستم های اتوماسیون در کارخانه ها، زیاد شنیده اید. برای مثال یک کارخانه تولید آبمیوه که روزانه ده ها یا صدها میلیون آبمیوه مختلف تولید می کند، نمی تواند که چند هزار نفر را استخدام کند تا فرآیند آبمیوه گیری و بسته بندی و … را انجام دهند. مسلما چنین کارخانه ای، نیاز به یک سیستم اتوماسیون دارد که کارهای تکراری روزانه را انجام دهد.
حال، تصور کنید که شما یک نرم افزاری را ایجاد می کنید که تعداد کاربران آن چند صد نفر یا چند هزار نفر باشند. برای این منظور، شاید چند توسعه دهنده با همکاری یکدیگر، بتوانند این نرم افزار را ایجاد کنند. اما فرض کنید شما یک نرم افزاری تولید می کنید که کاربران آن چندین میلیون و گاهی چند میلیارد نفر در سراسر دنیا باشند (مانند مایکروسافت آفیس یا ادوبی فوتوشاپ یا حتی سیستم عامل ها مانند ویندوز و …) و همچنین چند صد توسعه دهنده بر روی این پروژه تولید نرم افزار مشغول به کار هستند. آیا روش های سنتی گذشته برای این پروژه نرم افزاری عظیم جواب می دهند؟؟!! شاید بلی، اما به کندترین و کم دقت ترین وجه ممکن.
بیاید به عنوان این مقاله باز گردیم. “DevOps” مخفف دو کلمه توسعه و عملیات است (Development و Operation). خود DevOps یک نرم افزار یا یک ابزار نیست بلکه به نوعی یک مفهوم یا متدولوژی تلقی می شود. تعداد زیادی نرم افزار و ابزار هستند که به عنوان ابزارهای DevOps در نظر گرفته می شوند، مانند: Git، Jenkins، Docker، Kafka، Kubernetes، Puppet، Nagios، Chef، Cassandra و …
وقتی شما بر روی یک پروژه بزرگ نرم افزاری بزرگ کار می کنید، معنای آن اینست که تعداد زیادی توسعه دهنده و برنامه نویس بر روی یک پروژه مشغول به کار هستند. ایده کنترل منبع و کنترل ورژن برای اینگونه پروژه ها ایجاد گردیدند. در ابزارهای کنترل منبع مانند گیت (git)، یک مخزن مشترک برای نرم افزار موجود است که هر توسعه دهنده و برنامه نویسی (که مجوز دسترسی داشته باشد)، می تواند همزمان بر روی کدها و بخش های مختلف این پروژه کار کند و تغییرات خود را اعمال کند.
به میزانی که نرم افزار شما بزرگ باشد، خطاهای بیشتری احتمال وقوع دارند و شما باید در آپدیت های جدید و نسخه های جدید این خطاها را بر طرف کنید و یا اینکه ویژگی جدیدی به ویژگی های گذشته نرم افزار اضافه کنید و یا بخشی از آن را تغییر دهید. بنایراین مفاهیمی مانند “تجمیع مداوم” و “تحویل مداوم” به وجود می آیند (“Continuous Delivery” و “Continuous Integration”). این بدان معناست که شما باید به صورت مداوم، تغییرات در نرم افزار خود را تجمیع کنید و در نسخه ها و آپدیت های جدید، به مشتری در سراسر دنیا، تحویل بدهید. یک از ابزارهای معروف DevOps برای “تجمیع مداوم” و “تحویل مداوم” یا (CI & CD)، جنکینز (Jenkins) است.
ابزارهای DevOps فراوانی وجود دارند که هر کدام مسئول بخشی از وظایف در پروژه هستند. اگر پروژه شما به اندازه کافی بزرگ نیست، استفاده از DevOps و کنار آمدن با پیچیدگی های ذاتی آن، ممکن است شما را به درد سر بزرگی بیاندازد. اما هر روزه، کمپانی های بزرگ نرم افزاری زیادی در سراسر دنیا، به جامعه توسعه دهندگان DevOps می پیوندند تا از سرعت و دقت زیادی که DevOps برای توسعه نرم افزار به ارمغان می آورد، لذت ببرند.