GitOps چیست
مقدمه
برای پیاده سازی زیرساخت بدون مشکل و بدور از خطاهای منابع انسانی و مهندسی شده پیشنهاد میشود از روش هایی مانند GitOps استفاده کرد به طور خلاصه میتوان با استفاده از قابلیت های gitlabوCI/CD و Docker ساختاری بدون تحمیل DownTime به پروژه را پیاده سازی کرد
Gitops
همانطور که در حریان هستید gitops برگرفته شده از متد Devops میباشد شما با این متد میتوانید سرعت توسعه و بارگزاری پروژه در سرورهای عملیاتی را بالا ببرید همچنین از اندر مزایای Devops میتوان به کنترل ورژن های نرم افزار و بازرسی کد و image versioning ویا حتی CI/CD اشاره کرد
GitOps برای خودکار سازی فرایند توسعه زیرساخت استفاده میشود همانند Devops که به ما کمک میکند تا کد خود را مدیریت کنیم این امکان را به ما میدهد که زیرساخت خود را در قالب کد داشته باشیم
تیم ها به چه صورت میتوانند از GitOps استفاده کنند
اولین نکته برای پیاده سازی GitOps جدا سازی کدهای مربوط به تنظیمات و Devops میباشد بدین صورت که اگر شما داخل تنظیمات تغییراتی ایجاد کردید باید و تنظیمات به گونه ای بود که باید به اطلاع نیروهای برنامه نویس برسد این اقدام توسط واحد Devops میبایست انجام شود
GitOps سه جزء اصلی دارد:
IaC:
در GitOps شما باید یک مخزن(Git repository) مخصوص برای کنترل کردن تغییرات زیرساختی داشته باشید یا به اصطلاح از متد Infrastructure as code (IAC) استفاده کنید
MRs:
شما در معماری GitOps ساختار مخزن های خود را باید به صورت Merge Request و Pull request انجام بدهید در این حالت تیم ها میتوانند بر روی کدها نظارت و عملکرد بهتری داشته باشن و تغییرات به صورت گراف قابل مشاهده باشد
CI/CD:
در متدولوژی GitOps شما ملزم به استفاده از ابزارهای Ci/CD هستید تا از بروز خطاهای انسانی در حین تغییرات جلوگیری کنید
چالشهای GitOps
GitOps هم مانند هر متد جدید دیگه ای شامل یکسری مشکلات میباشد از بدیهی ترین آن میتوان به مستندسازی کوچک ترین تا بزرگترین تغییرات اشاره کرد
GitOps امکان همکاری بیشتر را فراهم می کند، اما این لزوماً چیزی نیست که به طور طبیعی برای برخی از افراد یا سازمان ها ایجاد شود. فرآیند تأیید GitOps به این معنی است که توسعهدهندگان تغییراتی در کد ایجاد میکنند، یک درخواست ادغام(Merge request) ایجاد میکنند، یک تأییدکننده این تغییرات را ادغام میکند و تغییر مستقر میشود. همچنین در صورت درست بررسی نکردن یا ننوشتن تست مناسب توسط مدیر گروه ها ممکن است باگ را به صورت اتوماتیک داخل سرورهای پروداکشن قرار دهیم
مزایای GitOps
تقاوت های GitOps با DevOps
در حالی که DevOps تمرکز خود را بر روی ارتباط بین تیم ها و خودکارسازی فرایند استقرار گذاشته است GitOps بر روی مدیریت Kubernetes و Docker swarm و … گذاشته است
GitOps یک شاخه از Devops می باشد GitOps تمرکز خود را بر روی مدیریت کردن زیرساخت تحت کد IAC گذاشته است
اجزای اصلی GitOps و نحوه کار آنها
اجزای اصلی GitOps به چهاردسته تقسیم میشوند
۱- مخزن کد برای پروژه ها و تنظیمات زیرساخت
۲- پایپلاین های CI/CD در جهت راه اندازی تست و ساخت Container , Image
۳- ابزارهایی که برای مدیریت منابع در سرورهای عملیاتی استفاده میشوند
۴-ابزارهایب پایش و نظرسنجی و جمع آوری لاگ مانند Sentry
نکته: از این قسمت به بعد برای پیاده سازی پروژه پایتون از GitOps استفاده میکنیم تا درک مطلب در رابطه با GitOps کامل شود
نحوه پیاده سازی GitOps بر روی پروژه python/fast-api
اولین قدم در ساخت پروژه به صورت میکروسرویس و مجزا از هم میباشد بدین شکل که داخل Git یک گروه به نام پروژه ایجاد میشود سپس نسبت به نوع پروژه اقدام به ساخت مخزن هایی با نام backend, Fronend,Database,Redis میکنیم
سپس برای همه مخازن سورس محور مانند backend, Frontend برنچ هایی با نام های develop,production, stage ساخته میشود تا سطوح دسترسی برای این برنچ ها تعریف شود
Develop: صرفا برای توسعه برنامه نویس ها و ذخیره کردن آخرین تغییرات
stage: برای گرفتن نسخه نسبتن پایدار از Develop و ارائه دمو(پیش نمایش)
production: پس از درخواست Merge Request و تایید TeamLead و پاس شدن Unit Test ها یک نسخه بدون مشکل داخل Nexus و یا Gitlab Registery قرار میدهیم سپس با استفاده از Gitlab CD ایمیج ساخته شده را در سرور production نصب میکنیم
Devops: با توجه به استاندارد Gitops یک برنچ با نام Devops برای نگه داری Dockerfileو docker-compose.yml و env را داخل آن قرار میدهیم و از برنچ های دیگر Symbolink به این برنچ میزنیم تا در صورت تغییرات توسط تیم Devops احتیاجی به pull گرفتن نداشته باشیم
راه انداری .gitlab-ci.yml با قواعدی مانند Merge Request در برنچ Devops
job1:
script:
- echo "This job runs in merge request pipelines"
only:
- merge_requests
بدون دیدگاه