در این مقاله به توضیح مفهوم DevOps و اینکه چگونه ابزارهای اتوماسیون می توانند به تیم ها در اتخاذ روند DevOps کمک کنند، پرداخته می شود. DevOps (ترکیب دو کلمه Development به معنای "توسعه" و Operations به معنای "عملیات") یک مفهوم است که در کنار سایر موارد به مقوله توسعه نرمافزار، عملیات و خدمات میپردازد. این مفهوم بر ارتباط، همکاری و یکپارچگی بین توسعهدهندگان نرمافزار و کارشناسان عملیات IT تأکید میکند.
جهت درک DevOps ابتدا نیاز است که با فرایند قدیمی توسعه و استقرار آشنا شوید.
تصویر(1)
فرایند قدیمی توسعه و استقرار
در این بخش به بررسی روال سنتی توسعه و استقرار برنامه در محیط عملیاتی پرداخته می شود.
1- تیم توسعه اقدام به کدنویسی و توسعه برنامه، افزایش امنیت، رفع باگ و.. می کند.
2- زمانی که کد توسعه یافته آماده انتشار شد، برنامه جهت استقرار به تیم عملیات (operations team) محول می شود.
3- تیم توسعه باید روزها تا هفته ها منتظر استقرار برنامه در محیط عملیاتی بماند. این تاخیر به علت چالش های متعدد در خصوص آماده سازی محیط و کسب مجوزهای لازم می باشد.
4- تیم عملیات، استقرار کد در محیط های تست کیفیت یا عملکرد را آغاز می کند.
5- برنامه ممکن است به شکلی که در محیط توسعه کار می کرد، عمل نکند. این اتفاق زمانی می افتد که محیط توسعه عینا مشابه محیط استقرار نباشد. این مشکل می تواند ناشی از تفاوت ورژن پلتفرم، تغییرات کانفیگ، ورژن ماژول و.. باشد.
6- تیم عملیات ممکن است تصور کند که مشکل به علت باگی در کد باشد.
7- تیم توسعه ممکن است تصور کند که مشکلی در پیکربندی انجام شده توسط تیم عملیات وجود دارد.
8- در این میان باید بخشی وجود داشته باشد تا موجب همکاری بهتر تیم توسعه و عملیات گردد. در اینجا DevOps وارد بازی می شود.
تصویر(2)
DevOps چیست؟
DevOps یک فرهنگ یا فلسفه است که هدف آن کاهش فاصله بین تیم توسعه و عملیات به منظور افزایش بهرهوری و همکاری از طریق خودکارسازی زیرساخت، استقرار کد و پایش مداوم برنامهها می باشد. به طور کلی، هدف DevOps ایجاد یک رابطه خوب و تعیین فرایند همکاری بین تیمهای توسعه و عملیات است تا با تقسیم وظایف، تیم ها به درستی کنار هم کار کنند.
به عنوان یک نمونه از همکاری می توان به حضور تیم عملیات در جلسات اسکرام توسعه اشاره کرد تا تیم مذکور در همان مرحله توسعه، نیازمندیهای برنامه را درک کند. در این حالت تیم عملیات با اهداف تیم توسعه هماهنگ میشود. در واقع آنها به جای کار با تیم های جداگانه، به عنوان یک تیم یکپارچه عمل خواهند کرد.
تیمی که اصول DevOps را دنبال میکند، همه چیز را از تهیه زیرساخت تا آزمون و استقرار کد به صورت خودکار انجام میدهد. این ذهنیت مشارکتی، موجب می شود از نوشتن قطعه کدهای بزرگ که ممکن است روزها و ماهها طول بکشد جلوگیری گردد. در عوض، توسعهدهندگان روی ماژولهای کوچک تمرکز میکنند که به طور مکرر ادغام و بررسی میشوند تا فرآیند تحویل برنامه را تسریع بخشند.
همچنین با استفاده از اتوماسیون صحیح، محیطهای توسعه و عملیاتی دارای پیکربندی یکسانی خواهند بود، به طوری که برنامه در سرور عملیاتی همانند محیط توسعه اجرا می گردد. در خصوص اتوماسیون، تیمها اقدام به نوشتن اسکریپت یا کدهای مدیریت پیکربندی می کنند تا زیرساخت استقرار را به حالت مورد نظر برسانند.
همچنین، مفهوم "DevOps" در طی پنج سال گذشته به شدت رشد کرده است. در تصویر زیر می توانید دادههای Google Trends مربوط به DevOps را طی سالهای گذشته مشاهده نمایید.
تصویر(3)
ابزارهای دواپس
با استفاده از ابزارهای مناسب در طول فرآیند توسعه و همچنین محیط عملیاتی، تیم ها میتوانند یک ToolChain (مجموعه ابزار) برای DevOps ایجاد نمایند که امکان تحویل سریعتر و بهتر برنامهها را فراهم می کند. ابزارها در دواپس نقش حمایتی دارند و درک این نکته مهم است که Automation یا خودکارسازی به معنی DevOps نیست.
یک نمونه از این ابزارها Jenkins است. با استفاده از Jenkins، میتوانید جدیدترین نسخه کد را از سیستمهای version control (کنترل نسخه) مانند Github دریافت کرده و بدون هیچ مداخله دستی بهطور مداوم آن را تست نمایید. به این روش Continuous Integration یا "یکپارچهسازی مداوم" گفته می شود.
سپس به مرحله استقرار برنامه می رسد که برای آن میتوان از ابزارهای مدیریت پیکربندی مانند Puppet، Chef، Ansible و Saltstack استفاده کرد. به وسیله این ابزارها، میتوانید زیرساخت خود را کدنویسی کرده و تعریف نمایید که زیرساخت شما باید چگونه عمل کند. این رویکرد اغلب با عنوان Infrastructure as code یا "زیرساخت مبتنی بر کد" شناخته میشود.
کدها، وضعیت زیرساخت شما را مشخص میکنند. این ابزارها می توانند برای تیمها در مواردی همچون آماده سازی صدها یا حتی هزاران سرور، پیکربندی خودکار آنها و همچنین استقرار کد برنامه بسیار مفید باشند. قدم بعدی در DevOps کانتینرسازی است. فناوریهای کانتینر مانند Kubernetes به تیمهای دواپس امکان می دهد تا برنامهها را ساخته و به محیط های مختلفی منتقل کنند بدون اینکه نیازمند پیکربندی زیادی باشد.
نتیجهگیری
استفاده از DevOps در سازمانها متفاوت است. برخی سازمانها فرهنگ و فرآیند تیمهای مختلف را تغییر میدهند تا از دواپس استفاده کنند. برخی سازمانها نیز اقدام به پرورش و توسعه تواناییهای مختلف در همان تیم میکنند. در نهایت همه چیز به ذهنیت مشارکتی آن بر می گردد.