برای اینکه بدانیم DevOps در اصل چیست ، بهتر است ابتدا با معنی و شرحی که در ویکی پدیا در ذیل این کلمه آمده است ، شروع کنیم.
هاست ، خرید هاست ، هاست وردپرس
" DevOps یک فرایند تحویل نرم افزار است که بر ارتباط و همکاری از مرحله ی طرح ایده تا بازار ، شامل مدیریت تولید ، ساخت نرم افزار و عملیات تخصصی مربوط به آن ، تأکید دارد. DevOps همچنین فرایندهای تکمیل و جمع آوری نرم افزار ، آزمایش ، تنظیم و تغییر زیرساخت های آن را به صورت خودکار انجام می دهد. هدف این فرایند ایجاد فضا و شرایطی است که در آن بتوان ساخت ، آزمایش و ارائه ی نرم افزار را با سرعت ، اطمینان و اعتماد بیشتر و به دفعات مکرر انجام داد."
این تعریف ، تعریف خوبی است ، اما به نظر می رسد که نکته ای در آن مورد توجه قرار نگرفته است . بین این که یک برنامه به صورت جداگانه ( در خلاء) قابل اجرا باشد و این که بتوان همان برنامه را در یک محصول تولید شده نیز اجرا کرد ، تفاوت زیادی وجود دارد. متأسفانه در بیشتر مواقع، این تفاوت در زمان بررسی و تعیین مواردی که برای تولید یک محصول موفق لازم است ، نادیده گرفته می شود.
بیایید برای درک بهتر آنچه که مهندسین DevOps انجام می دهند ، نگاهی به چرخه ی تولید یک نرم افزار بیندازیم. این چرخه پنج بخش اصلی دارد که عبارتند از : طراحی و برنامه ریزی، ساخت ، آزمایش ، تنظیم و حفظ و نگهداری ، البته تجربه نشان داده است که بیشتر وقت مهندسین DevOps صرف دو مرحله ی طراحی و برنامه ریزی و حفظ و نگهداری می شود. البته به خاطر داشته باشید که مراحل بالا دقیقاً به همین ترتیب اجرا نمی شوند و گاهی با یکدیگر ترکیب شده و گاه هم زمان با هم انجام می شوند.
در این مرحله اعضای تیم ( ایده پردازان ، مدیران تولید ...) اهداف انجام پروژه را شرح می دهند . آنها در این مرحله باید در خصوص طرح کلی نرم افزار تصمیم بگیرند.
بخش مهمی که در این مرحله باید یک مهندس DevOps انجام دهد ، این است که از دانش فنی خود در مورد ویژگی های ساخت یک پلت فرم استفاده کند و مشخص کند که چطور می توان این ویژگیهای پراکنده را کنار هم جمع کرد و به صورت یک سیستم منسجم و مجزا در آورد. پس از اینکه سیستم اولیه طراحی و تکمیل شد ، به این می پردازند که چگونه می توان یک فن آوری جدید را به سیستم موجود اضافه کرد.
این امر می تواند به صورت برنامه ریزی و طراحی برای یکی از موارد زیر باشد: چطور می توان یک لایه ی هماهنگ کننده ساخت ، چطور می توان یک database جدید تنظیم کرد ، چطور می توان از زیر ساخت های ارائه ی خدمات ظریف جدید پشتیبانی کرد. این مهندسین همچنین باید به این موضوع نیز بیندیشند که چگونه می توان این سیستم و فن آوری همراه آن را حفظ کرد و به صورت خودکار درآورد. در واقع مهندسین DevOps همیشه باید در جستجوی راهی برای انجام خودکار کارها و خلاصی از انجام دستی آنها باشند.
در این مرحله بیشتر ویزگیهای کار مشخص شده و بخش اعظم کار انجام می شود. طراحان با یکدیگر صحبت کرده ، قهوه می خورند ، برنامه های لازم را می نویسند و در نهایت محصول ساخته شده را ارائه می کنند .
هدف اصلی یک مهندس DevOps در این مرحله ، سرعت بخشیدن به کار برای گذر از این مرحله است. بدین معنی که این مهندسین باید شرایطی ایجاد کنند که طراحان با بیشترین سرعت ممکن و به بهترین و مناسب ترین شکل ممکن ، به نتیجه ی نهایی که همان تولید سیستم است ، دست پیدا کنند.
در این مرحله است که وجود برخی ابزارها اهمیت پیدا می کند. بهتر است بگوییم مهندس DevOps وقتش را صرف آن می کند که این زیرساختهای جالب و جذاب را که ممکن است قابلیت ترمیم خود بخود و خود ارزیابی و ....را داشته باشند، در کنار یکدیگر قرار دهند؛ اما اگر این نرم افزار که توسط طراحان ساخته شده است ، در شرایط دیگری ساخته می شد ، بیشتر شکوه و زیباییش را ازدست می داد.
بدیهی است که ما نمی توانیم اطمینان داشته باشیم که شرایط و موقعیت طراحان هنگام ساخت ، دقیقاً مانند شرایط تولید محصول باشد _ این امر بطور کامل عملی نیست ، اما می توان تا حد امکان این دو موقعیت را به یکدیگر شبیه کرد. وجود container نشانه ی آن است که امروزه امکان شبیه کردن این شرایط فراهم شده است ، البته پیش از این هم با وجود دستگاه ها و ماشین های مجازی ، می توانستند تا حدی این شرایط مشابه را ایجاد کنند.
طراحان ، QA و هر کس دیگری این سیستم را آزمایش می کند .
آنها تمام وسایل و فرمانها را به گونه ای تنظیم می کنند که این سیستم به صورت خودکار اجرا شود ، اما در نهایت در پایان روز ، هنوز هم لازم است که سیستم را به صورت دستی بر روی دستگاههای خود اجرا کنند. اگر بخواهیم این سیستم را در شرایط تولید یا شبه تولید آزمایش کنیم ، چه؟ اگر برنامه ی آزمایشی بیش از حد کند عمل کند یا برای داشتن عملکرد قابل قبول ، کنترل دستگاه هاست را به دست بگیرد، چه؟ اینگونه آزمایشها را نمی توان در شرایط محدود انجام داد ، بلکه باید در شرایظی پایدار و به صورت اتوماتیک انجام شوند. DevOps راه حل این مشکل است.
مهندسین DevOps نقش اصلی را در تشخیص و تنظیم و ایجاد زیر ساختهایی دارند که امکان انجام این آزمایشات را به صورت مکرر و به دفعات فراهم می کنند. آنها زیرساخت هایی را ایجاد می کنند که می توانیم به Jenkins ، Bamboo و یا Drone به عنوان نمونه هایی از این زیرساختها اشاره کنیم. این زیرساختها ابزارهای Continuous Integration) CI) هستند که بخش اصلی تنظیمات پیچیده ی سیستمهای آزمایش کننده را بر عهده دارند.
سوالهای این مرحله :
برنامه ی نوشته شده را به محیطی که در این مقاله به عنوان محیط تولید فرض می شود ، بیاورید.
چه مقدار از ویژگیها و امکانات برنامه ی ساخته شده به محیط تولید منتقل شده و در نهایت به دست کاربران نهایی می رسد؟ مرحله ی تنظیم به پاسخ این سوال می پردازد. مهندسین DevOps معمولاً از ابزاری شبیه به ابزارهای CI که قبلاً نام برده شد، برای یافتن پاسخ این پرسش استفاده می کنند.
یافتن پاسخ پرسشهایی همچون:
بخش زیادی از وقت مهندسین DevOps به این مرحله اختصاص داده می شود. در واقع Google بخشی دارد که کاملاً به همکاری با این افراد اختصاص داده شده است . این بخش SRE نامیده میشود.
این مرحله در حقیقت مرحله ای است که با کارها و ابزار خود ، یک سیستم را تبدیل به چیزی می کند که قابل اجرا و قابل دسترس برای بسیاری از کاربران است.