
کلمه DevOps از ترکیب دو واژه توسعه (Development) و عملیات (Operations) ایجاد شده است. قبل از مطرح شدن مفهوم دواپس، تیمهای توسعه و عملیات به صورت مجزا در سازمانها فعالیت میکردند.
تیم عملیات وظیفه حفظ و نگهداری نرمافزار را به عهده داشت و تیم توسعه، به دنبال افزودن امکانات و ويژگیهای جدید به محصول بود. با چنین رویکردی، مراحل اضافه شدن امکانات جدید به یک نرمافزار و تست عملکرد این امکانات، یک فرایند زمانبر محسوب میشد.
دواپس (DevOps) تعامل میان این دو تیم را بیشتر و فاصله آنها را کمتر میکند. به این ترتیب، فرایندهایی که ممکن بود چند هفته زمان ببرند، گاهی طی چند ساعت به نتیجه میرسند و امکانات با سرعت بسیار بیشتری در اختیار مشتریان قرار میگیرد. به زبان ساده، دواپس دو ارزش مهم در سازمان ایجاد میکند:
مراحل اولیه دواپس معمولا شامل یکپارچهسازی مداوم و تحویل مداوم (CI/CD)، نظارت بلادرنگ (real-time)، سیستمهای پاسخ به حوادث (IRS) و ایجاد پلتفرمهایی برای همکاری میان تیمها میشود.
در این جا بر ارتباط میان تیمهای توسعه و عملیات تاکید میکنیم، اما مفهوم دواپس در طول زمان گسترش یافته است و فرهنگی ایجاد کرده است که ارتباط میان تیمهای دیگر را نیز در بر میگیرد.
به زبان ساده میتوان گفت دواپس یک پل ارتباطی میان تیمها ایجاد میکند. با این تعریف، مشخص میشود که دواپس یک فناوری نیست بلکه فرهنگ، فرایندها و ابزارها را در بر میگیرد. به زبان ساده میتوان گفت DevOps یک پل ارتباطی میان تیمها ایجاد میکند. با این تعریف، مشخص میشود که DevOps یک فناوری نیست، بلکه فرهنگ، فرایندها و ابزارها را در بر میگیرد. DevOps متدهای مختلفی دارد و با استفاده از ابزارهای مختلف، به شما کمک میکند تا بهتر و سریعتر فرایندهای توسعه نرمافزار را پیادهسازی کنید. برای مثال متد GitOps یکی از متدهای توسعه نرمافزار در محیط ابری (Cloud) برای تیمهای بزرگ است که فرایند توسعه و هماهنگیهای لازم آن را به شدت ساده میکند.
بهطور کلی، روش توسعه سنتی نرمافزار دشوار بود و اکثر فرآیندهای توسعه محصول بهصورت دستی انجام میشدند. همین امر، باعث میشد خطاهای بسیاری در روند تولید نرمافزار اتفاق بیفتد. این موضوع منجر به فرسودگی کارکنان و ناپایداری چرخه انتشار نرمافزار میشد.
همچنین، در دوران توسعه سنتی نرمافزار، توسعهدهندگان در پی ارائه سریع ویژگیهای جدید به کاربران و رفع اشکال سریع نرمافزار بودند؛ در حالی که تیمهای عملیاتی تمرکز خود را برروی ثبات محصول میگذاشتند و در پی این بودند تا مطمئن شوند که همه چیز بهخوبی کار میکند.
در طی توسعه سنتی محصول، هر یک از تیمها در پی تحقق دو ویژگی چابکی و ثبات بودند. از آنجا که این دو ویژگی در تناقض با یکدیگر هستند، هیچکدام از گروههای توسعهدهندگان و واحد عملیات با چنین سازوکاری برای توسعه نرمافزار موافق نبودند.
روش ارائه شده توسط «دبویس» (Dubois) و «شیفر» (Schaefer) راهحلی بود که به رفع این تناقض در توسعه نرمافزار کمک کرد. فرآیندهای ارائه شده توسط این دو فرد به سازمانها کمک میکنند تا با استفاده از ابزارها و روشهایی خاص و نوین، نیاز هر دو تیم را برطرف کنند.
به بیان دقیقتر، دواپس بستری را برای توسعهدهندگان فراهم میکند تا محصولات را با سرعت بیشتری به مرحله آزمایش برسانند، انتشار چندگانه از محصول خود را در طی روز، هفته یا ماه محقق کنند و با اطمینان بیشتری محصولات نرمافزاری خود را به مشتریان تحویل دهند. در عین حال، این فرآیند نوین، به تیم عملیاتی کمک میکند تا در هر مرحله از روند تولید، با انجام آزمایشهای خودکار و بازبینی دستی اشکالات را پیش از ارائه محصول به مشتری و استقرار آن شناسایی و رفع کنند.
به عبارتی، در مقایسه با رویکردهای توسعه نرمافزار سنتی، دواپس بستری خودکار و تکرارشونده را فراهم میکند تا ویژگیهای جدید محصولات نرمافزاری، در اسرع وقت به کاربران تحویل داده و در عرض چند ساعت مشکلات مشتریان رفع شوند.

برای دواپس دو مدل توسعه متفاوت وجود دارد: یکی مدل آبشار (Waterfall) و دیگری مدل چابک (Agile). درادامه، بیشتر درباره این مدلها توضیح میدهیم.
مدل Waterfall اولین مدل معرفیشده در توسعه نرمافزار محسوب میشود که بهصورت فرایندی متوالی با درک ساده است. در این مدل، روند توسعه نرمافزار به فازهای مختلف دستهبندی میشود؛ بدینترتیب که خروجی یک فاز به ورودی فاز بعدی تبدیل میشود. بههمیندلیل، به آن مدل آبشار گفته میشود؛ چراکه روند آن بهطورمداوم در حال انجام است و به حالت قبل برگشتپذیر نیست.
فازهای مختلف مدل آبشار (Waterfall) عبارتاند از:
معایب مدل آبشار (Waterfall)
درحالیکه توسعهدهنده زمان زیادی را برای استقرار کدها صرف میکند، تیم عملیات در زمان تست متوجه میشوند که روند شناسایی باگها و ارائه بازخوردهای مفید با مشکلاتی همراه است.
در مدل Agile، روند توسعه نرمافزار در یک پروژه شامل چندین تکرار است. در این مدل، در پایان هر تکرار یک محصول یا همان نرمافزار تحویل داده میشود و حدوداً به یک تا سه هفته زمان لازم دارد. در هریک از این تکرارها، تیمهای عملیاتی همزمان در حوزههای زیر کار میکنند:
زمانیکه از این مدل برای توسعه نرمافزاری استفاده میکنید، ممکن است یک کد برای تیم توسعه کار کند؛ اما برای تیم عملیات چنین نباشد. پس برای حل این مسئله چه کاری باید انجام داد؟
پاسخ این پرسش ساده است: دواپس این مشکل را حل میکند. DevOps همبستگی مداومی بین استقرار کد و تست آن ایجاد میکند؛ بهطوریکه نظارت تقریباً در لحظه انجام میشود و بازخوردهای فوری به تیم توسعه و عملیات کمک میکند تا بتوانند باهم کار کنند.

بعد از اینکه کامل درباره اینکه دواپس چیست؟ آشنا شدیم، در این بخش مراحل تولید یک نرمافزار را به ترتیب بیان میکنیم و نقش دواپس در هر کدام را بررسی میکنیم:
1. برنامهریزی (Planning)
2. توسعه (Development)
3. آزمایش (Testing)
4. استقرار/ انتشار (Deployment)
5. نگهداری/ پشتیبانی (Maintenance)
در بین این مراحل، بیشترین زمان مهندس دواپس در برنامه ریزی و نگهداری صرف میشود.
اولین مرحله از چرخه تولید نرمافزار، مرحله Planning یا برنامه ریزی است. در این بخش مدیران، اعضای تیم توسعه، اعضای عملیاتی (IT) و تمام کسانی که در تولید نرمافزار نقش دارند، چشماندازها و اهداف پروژه را قبل از شروع تولید و توسعه نرمافزار تعیین میکنند.
در این مرحله مهندس دواپس، به دنبال خودکارسازی مراحل است تا فشار وارد بر تیم را تا حد ممکن کم کند. برخی از سوالاتی که ممکن است مهندس دواپس به دنبال پاسخ آنها باشد به شرح زیر است:
1. دو سرویس مختلف چگونه میتوانند با یکدیگر تعامل برقرار کنند؟
2. برای ارتباط بین دو سرویس از چه پروتکلی باید استفاده شود؟
3. سختافزارهای موجود پاسخگوی نیاز ما خواهد بود؟
4. برای آنکه در مرحله تولید به برنامه نویسان کمک کنیم باید از چه پارامترهایی استفاده کنیم؟
5. چه چیزهایی را باید ایجاد و چه چیزهایی را باید خریداری کنیم؟
6. چگونه میتوانیم از نرمافزار تولید شده پشتیبانی کنیم؟
7. و...
بعد از اتمام مرحله برنامه ریزی، وارد مرحله توسعه نرمافزار میشویم. در این مرحله تمام اهدافی که در مرحله برنامه ریزی تعیین شده بود را توسعهدهندگان برنامه نویسی میکنند و ویژگیهای از پیش مشخص شده را به برنامه اضافه میکنند. در این مرحله مهندس دواپس سعی میکند تمام ابزارهایی که توسعهدهندگان به آن نیاز دارند را در اختیارشان قرار دهند.
از سایر وظایف مهندس DevOps این است که بخشهای مختلف کدهایی که توسعهدهندگان نوشتهاند را از آنها دریافت کنند و آنها را در کنار هم قرار داده و این مولفهها را با محیط خروجی نرمافزار هماهنگ سازند.
مهندس دواپس در ان مرحله به دنبال پاسخ برای سوالات زیر است:
1. چگونه باید عملکرد توسعهدهندگان را بهبود ببخشم؟
2. چگونه به توسعهدهندگان توضیح دهم که در حال برنامه نویسی برای چه محیطی هستند و خروجی محیط نهایی نرمافزار چه شکلی خواهد بود؟
3. و...
در این مرحله توسعهدهندگان، تست نویسان و کسانی که مسئول کنترل کیفیت محصول هستند، کدهای نوشته شده را تست و آزمایش میکنند و در صورت تایید با سورس کد اصلی ادغام میکنند. مهندس دواپس در این مرحله میتواند با ابزارهایی مانند Jenkins ،Bamboo یا Drone، این تستها و آزمایشها را خودکارسازی کند که در اصلاح به آنها CI (Continuous Integration) گفته میشود.
1. چگونه متوجه شویم که تستهای انجام شده درست بودهاند؟
2. بر مبنای چه راهکاری تاریخچه تستهای انجام شده را بررسی و روندهای فعلی را ارزیابی کنیم؟
3. چگونه میتوانم بعد از آزمایش کدها، مشکلات آن را به توسعهدهندگان گزارش کنم؟
4. و...
در این مرحله کدهای نرمافزاری جهت اجرا بر روی سرورها قرار میگیرند که به آن عمل Deployment یا استقرار میگویند. مهندس دواپس در این مرحله نیز با ابزارهای CI سعی میکند عملیات دیپلویمنت را خودکارسازی کند. مهندس داوپس به دنبال پاسخ به برخی سوالاتی به شرح زیر است:
1. در چه بازه زمانی باید یک نسخه آماده شده را در سرور مستقر کرد؟
2. از چه روشی استفاده کنم تا کدهایی که مستقر کردهام در کار سایر کدها خللی ایجاد نکند؟
3. و...
در مرحله نهایی که نگهداری و پشتیبانی نام دارد، ایرادات سیستم بعد از مرحله استقرار برطرف میشود و ویژگیهای جدید نیز ممکن است به آن اضافه شود. مهندس دواپس در این مرحله به دنبال پاسخی برای سوالات زیر است:
1. چگونه ایرادات و مشکلات سیستم یا محصول را شناسایی کنم؟
2. چگونه ایرادات موجود را به توسعهدهندگان اعلام کنم؟
3. با چه راهکارهایی ایرادات موجود در زیر ساختها را برطرف کنم؟
4. با چه روشهایی از درست بودن سرویس اطمینان حاصل کنم؟
5. و...
اگر چه DevOps یک قابلیت جادویی برای کسب و کار و تجارت نیست، اما بسیاری از مشکلات تجاری و عملیاتی با استفاده از آن قابل حل شدن است.
این فناوری نوظهور روی تسریع فرآیندها، تعامل بهتر، خودکارسازی و چابکی کارها تمرکز خواهد کرد و مزایای زیادی را در اختیار تجارت شما قرار خواهد داد. بنابراین شما در زمان کمتری به اهداف خود خواهید رسید و خوشبختانه، کیفیت کارها نیز تا حدود زیادی بهبود خواهد یافت: