در تماس های شما عزیزان با تیم ALM-DevOps همیشه درخواست های زیادی مبنی بر ارائه یک نقشه راه در زمینه DevOps مطرح شده بود، جهت پاسخگویی به این نیاز در این سند تلاش شده با توجه به شرایط موجود در ایران و ترتیب اجرای موارد، یک Roadmap بهینه ارائه گردد. در این سند هم به نیازهای سازمان و هم به نیازهای مهندسین دواپس توجه شده است.
نقشه راه ارائه شده توسط تیم ALM-DevOps با توجه به شرایط خاص ایران و عدم تمایل و یا امکان پرداخت هزینه نرم افزارها از طرف شرکت های ایرانی طراحی شده است. مهم ترین نکته قابل اشاره در مورد تمامی این نقشه ها متغیر بودن ترتیب اجرای گام هاست و عامل تعیین کننده این موضوع وضعیت جاری شما در شرکتی در آن فعال هستید (به عنوان یک مهندس دواپس)، و یا نوع فعالیت و محصولات شرکت شما است. (به عنوان مدیر)
آشنایی با مسیر یادگیری DevOps پیشنهادی تیم ALM-DevOps
می توانید از اینجا فایل مسیر یادگیری دواپس را دانلود بفرمایید. دواپس شامل فرهنگ و فرآیند و ابزار می گردد و ترتیب موارد قابل تغییر نیست، موارد زیر بر همین اساس تنظیم شده اند.
به ضمیمه این مقاله ۶ مثال از رودمپ های دواپس موجود در اینترنت ارائه شده است.
گام اول در یادگیری و اجرای دواپس تشریح ابعاد و مفهوم دواپس است تا شما در تعریف اولیه این مفهوم دچار مشکل نباشید. بررسی یکی از دوره های اصول دواپس موجود در اینترنت و یا تهیه دوره آموزش اصول DevOps به صورت ویدیو ضبط شده با کمترین هزینه است، همچنین بخش هایی از این دوره جهت آشنایی شما با ابعاد اصول دواپس در بخش آموزش رایگان دواپس قابل دسترسی است. در صورت نیاز شما می توان این دوره را به شکل از راه دور و با توجه به نیاز سازمان شما برگزار نمود.
مرحله دوم: Agile & Scrum
این مرحله شامل آموزش اجرای اجایل و اسکرام در تیم شما است و استفاده از اجایل جزء اصول پایه ایی دواپس است.
مرحله سوم: Network
- Network: در زمینه شبکه به حداقل دانش جهت اشنایی با لایه های شبکه و سابنتینگ نیازمند خواهید بود. در این زمینه جهت استفاده از منابع رایگان، در اینترنت ویدیو تیم Network Kings با نام CCNA Course - CCNA Routing and Switching-CCNA200-301 را جستجو بفرمایید. همچنین در کتاب Networking & Kubernetes به اندازه کافی به این موضوع پرداخته شده است.
- سیستم عامل های Windows Server: در این سیستم عامل برای اسکریپت نویسی از زبان Powershell استفاده می گردد و نیاز است بر این زبان مسلط گردید،
- سیستم عامل لینوکس: دوره های اصلی و پایه در زمینه لینوکس شامل Lpic1 و Lpic2 می باشد، که نیاز شما حتما این دو دوره را گذرانده باشید، در لینوکس زبان اصلی اسکریپت نویسی Bash می باشد و نیاز است بر این زبان مسلط باشید، در دوره های Lpic به اندازه کافی به این موضوع اشاره می گردد.
مرحله چهارم: Version Control & Git
تنها گزینه مورد استفاده در قابل اتکا در بخش ورژن کنترل استاندارد Git است که دارای پیاده سازی های متفاوتی است، در زیر موارد اصلی قابل استفاده در ایران لیست شده اند.
مرحله پنجم: Build & Package managers
کدهای توسعه داده شده در این مرحله تبدیل به پکیج های استاندارد می گردند.
- MSBuild / Dotnet: ابزار لازم جهت بیلد زبان های توسعه داده شده توسط مایکروسافت مثل C#
- Maven / Gradle: ابزار لازم جهت بیلد کدهای زبان java
- NPM: ابزار لازم جهت مدیریت پکیج های javascript
- Nuget: ابزار لازم جهت پکیج نمودن فایل های توسعه داده شده با تکنولوژی های مایکروسافت
مرحله ششم: Artifact Management
محصولات تولید شده در مرحله پنجم باید در محلی امن نگهداری شده و دارای شناسنامه باشند. ابزارهای زیر در این زمینه به شما کمک خواهند نمود. امکان نگهداری فایلهای عمومی مثل فایلهای zip یا rar در این ابزارها وجود ندارد.
مرحله هفتم: Containers
تتمامی ابزارهای زیر طبیعتا بر اساس Container runtime interface یا CRI هستند.
- Containerd: ترجیحا سعی نمایید تا از این گزینه استفاده نمایید.
- nerdctl / Rancher Desktop: این دو ابزار در کنار هم می توانند به عنوان جایگزین داکر و Minikube بر روی سیستم شما عمل نمایند.
- Docker: این ابزار رسما در حال حذف می باشد و یکی از دلایل حذف آن در سازمان ها متن باز نبودن آن و نیاز سازمانها به پرداخت هزینه است که حذف گسترده آن را رقم زده است.
مرحله هشتم: Automation & CI /CD
در ایران ۴ گزینه زیر به راحتی قابل استفاده هستند و حداقل یک مورد از این ۴ گزینه امکان رفع نیاز شما در زمینه CI /CD را دارد و نیازی به پیاده سازی بیش از ۱ مورد نمی باشد. اگر چه استفاده از ابزاری مثل jenkins با توجه به اوپن سورس بودن آن و محدود بودن توان این ابزار در مقایسه با سایر گزینه ها و استفاده از نسخه های پولی ۳ گزینه دیگر به صورت رایگان در ایران توصیه نمی گردد.
مرحله نهم: Infrastructure as code یا IAC
جهت خودکار سازی فرآیندهای مرتبط با نصب و راه اندازی و Config سرورها می توان از ترکیب دو ابزار زیر استفاده نمود.
- Terraform: این ابزار متن باز بوده و جزء راهکارهای جدید به شمار می آید. با کمک آن می توان تمامی زیرساخت های مرتبط با شبکه و سیستم عامل ها و سرویس های مختلف موجود در Cloud را خودکار سازی نمود و شامل لایه های Iaas و Paas می گردد. همچنین این ابزار را می توان به عنوان Configuration Management نیز استفاده نمود. منابع بیشتر مرتبط با این ابزار در بخش آموزش Terraform قابل دسترس هستند.
- Ansible: این ابزار بیشتر جهت خودکار سازی تنظیمات سرورها (Configuration Management) مثل نصب ایجنت ها روی دسته ایی از سرورها و یا اعمال تغییرات یکسان بر روی سرورهای تست و پروداکشن مورد استفاده قرار می گیرد. این ابزار قدیمی بوده و در حال حذف شدن می باشد.
- Crossplane: این ابزار حتی تنظیمات شما را در کوبرنیتیز ذخیره می کند و وظیفه پیاده سازی IAC در کوبرنیتیز را بر عهده دارد و به همین دلیل از مزیت بیشتری به نسبت دو ابزار دیگر برخوردار است ولی مشکل اصلی یکی شدن این ابزار با محیط های بر پایه کوبرنیتیز است که ممکن است باعث افزایش پیچیدگی ها در برخی سازمان ها شود.
- Azure ARM Templates: این تکنولوژی جهت پیاده سازی IAC بر بستر خدمات ابری مایکروسافت کاربرد دارد.
- AWS Cloud Formation: این تکنولوژی جهت پیاده سازی IAC بر بستر خدمات ابری آمازون کاربرد دارد.
مرحله دهم: Programming
برخی مواقع نیاز است جهت رفع نیازهای سازمان آستین ها را بالا زده و نیازمندی خاص سازمان را خود پیاده سازی کنید، در این زمان ها دو زبان برنامه نویسی زیر به کمک شما می شتابند. به عنوان مثال اگر سازمان شما از GitHub استفاده می نماید و شما نیازمند اکشن های خاص منظوره هستید و یا نیازمند خودکار سازی برخی کارها در گیت هاب هستید، نیاز دارید که بر زبان برنامه نویسی جاوااسکریپت مسلط باشید.
- GO: به عنوان مثال در صورتی که نیازمند تست کدهای ترافرم خود می باشد(بله می توان برای کدهای IAC هم تست نوشت!)، برخی ابزارهای تست مرتبط با این زبان به توسعه تستها می پردازند.
- Python
- JavaScript: این زبان به خصوص در توسعه اکشن ها و خودکار سازی فرایندهای GitHub کارایی زیادی دارد.
- Terraform HCL: زبان برنامه نویسی مورد استفاده در ابزار ترافرم
مرحله یازدهم: Cloud & CNCF
جهت پیاده سازی MicroService ها نیاز است از ساختار Cloud Native استفاده نمایید، همچنین در خارج از ایران مفهوم دواپس بدون وجود cloud تقریبا غیر قابل تصور است ولی در ایران راهکار ما جایگزین نمودن این موضوع با زیرساخت های بر اساس Cloud Native است. مهم ترین گزینه این بخش در زیر بیان شده.
- Kubernetes: ابزاری متن باز برای رهبری کانتینرها، از این ابزار حتی می توان به عنوان یک پلتفرم برای ارائه سایر سرویس ها به سازمان و مشتریان استفاده نمود. در این زمینه بخش آموزش Kubernetes و آموزش رایگان Kubernetes به شما کمک خواهد نمود.
- Azure: این زیر ساخت ابری متعلق به شرکت مایکروسافت بوده و حجم عظیمی از خدمات را در خود جای داده است. به زودی دوره های مرتبط با Azure به زبان فارسی و قیمتی مناسب در این سایت ارائه خواهند شد. جهت کسب موقعیت شغلی مناسب بیرون از ایران اشنایی با انواع سرویس های ابری می تواند برگ برنده شما باشد. در این زمینه دوره آموزش Azure مدرک Azure Fundamentals - AZ-900 ارائه شده است.
- AWS: این زیرساخت ابری متعلق به شرکت آمازون است و حجم عظیمی از خدمات متنوع را در خود جای داده است.
- GCP: این زیرساخت متعلق به شرکت گوگل بوده و دارای خدمات متنوعی می باشد ولی بعد از دو مورد بالا در رده سوم از نظر حجم نفوذ در شرکتها و بازار برخوردار است.
مرحله دوازدهم: Monitoring
مانیتورینگ و اندازه گیری وضعیت جاری سازمان چه از نظر تجاری و چه از نظر زیرساختی و چه از نظر اپلیکیشن جز موارد مهم اشاره شده در الگوهای دواپس است. در ایران ابزارهای زیر قابل دسترسی هستند، عدم امکان دسترسی به ابزارهای اماده موجود در بازار بین المللی مثل Datadog و Azure Monitor باعث شده است تا در ایران تیم ها مجبور به متخصص شدن در امر مانیتورینگ شوند و کم کم به صورت تخصصی جداگانه مطرح شود.
- Elastic stack یا ELK: ابزاری دارای نسخه های متن باز جهت مدیریت log ها و نمایش آنها
- CNCF Prometheus: ابزاری متن باز برای جمع آوری متریک ها
- Grafana: ابزاری متن باز برای نمایش متریک ها
- CNCF Jaeger: ابزاری متن باز متعلق به CNCF جهت دیباگ محصولات مایکروسرویس
- Splunk: ابزاری فوق العاده در زمینه مدیریت لاگ و متریک، ولی متن باز نیست.
- Zabbix: ابزاری متن باز که عمدتا برای مانیتورینگ زیرساخت ها و سرورها استفاده می گردد.
مرحله سیزدهم: DevSecOps
این بخش شامل ابزارها و پلتفرم هایی است که به شما در پیاده سازی خودکارسازی امنیت کمک خواهد نمود.
- GitHub CodeQL & Dependabot: این راهکار در محیط گیت هاب به طور کامل نیاز تیم های توسعه نرم افزار را برطرف خواهد نمود.
- Whitesource/Mend: این ابزار توانایی بررسی تمامی پکیجهای شما از نظر لایسنز و مشکلات امنیتی را داراست و همچنین توانایی بررسی کانتینرهای شما جهت پیدا نمودن مشکلات امنیتی را دارد.
- Synopsys Coverity: این ابزار مثل CodeQL به بررسی مشکلات امنیتی موجود در سورس کد شما می پردازد.
مرحله سیزدهم: GitOps
این بخش شامل ابزارها و پلتفرم هایی است که به شما در پیاده سازی GitOps کمک خواهد نمود.
- Argo CD: ابزاری متن باز جهت پیاده سازی گیت اپس بر بستر کوبرنیتیز.
- Flux: ابزاری متن باز جهت پیاده سازی گیت اپس.
- همچنین می توان از ابزارهای بخش CI/CD هم برای پیاده سازی GitOps استفاده نمود ولی دو ابزار بالا به شکل تخصصی در این زمینه توسعه داده شده اند.