میدونیم که با خود Gitlab میتونیم CI/CD رو انجام بدیم، ولی خب همیشه ابزارهای خوشگلی مثل ArgoCD میان که یک نیاز رو به شکل زیباتری برطرف کنن.
برای این که راحتتر بشه CDمون رو مدیریت کنیم میتونیم از ابزارهای متفاوتی استفاده کنیم ولی از اونجایی که Argoproj هم تایید شدهس و هم پروژه های خیلی بزرگی ازش استفاده میکنن و هم بهمون این قابلیت رو میده که به صورت UI و هم CLI بتونیم کار کنیم، ما هم انتخابش میکنیم.
پروژه Argo به عنوان یکی از پروژه های تایید شده CNCF هستش که به صورت open source برای Kubernetes ارایه شده و برگرفته از چهار پروژه خیلی خوبِ Argo Workflows - Argo CD - Argo Rollouts و Argo Events هستش.
قاعدتا کلمه GitOps رو شنیدین و مخصوصا امروزه خیلی بیشتر هم باهاش رو به رو شدین، توی این مقاله جزییات GitOps رو نمیگم چون مقاله های خوبی براش ایجاد شده، ولی در ساده ترین تعریف میشه به این مورد اشاره کرد که Gitops یک چارچوب عملیاتی هستش که بر پایهی DevOps پیش میره.
توی این سناریو انتظار میره که شما ArgoCD و gitlab رو setup کردین و دارینش، پس توی این مقاله ما درگیر ایجاد و ستاپ کردنشون نمیشیم. (اگه بابت این مورد مشتاق بودین خوشحال میشم بهم اطلاع بدین)
من از Helm chart خود Argoproj بابت ایجادش استفاده کردم.
چون این مورد جهت تست ما بوده از docker compose file برای ایجادش استفاده کردیم:
ما یک repo برای کد و تغییراتی که میخوایم ایجاد کردیم و یک repo برای ArgoCD که تنها در زمان push کردن دیپلوی نهایی روی این repo باعث triggerشدنش توسط ArgoCd میشه و دیپلوی آخر رو برامون میسازه.
همین طور نمونه کد کامل شده رو توی این ریپو قرار دادم و میتونین نمونه ای ازش رو ببینین.
در جاب build ما از buildah استفاده کردیم و imageی که با nginx مدنظرمون هستش رو ایجاد میکنیم و در نهایت با versionی که براش ست میشه توی gitlab registryمون ذخیره میشه.
و بعد از این اتمام جاب میتونین از قسمت gitlab-repo > Deploy > Container Registry دقیقا همون image با versionی که ست شده رو داشته باشین.
در جاب deploy ما یک سری variable در فایل های deployment و service استفاده کردیم که این variable ها بسته به خروجی های جاب های قبلی مثل build و یا مقدار های تعریف شده از پیش جای گذاری میشن و فایل با مقادیر مدنظر کامل میشه، و بعد از کامل شدن به repoیی که برای ArgoCD درست کردیم push میشه.
اخرین commitی که انجام شده روی ریپوی argocd انجام شده که عملا desired state ما برای اپلیکیشن هستش:
خلاصه مطلب
همیشه best practice هایی برای استفاده از ابزار های وجود داره و بهترین reference هم مقالات سایت خود ابزار هستش. همین طور همیشه پرکاربردترین راه بهترین راه نیست، خیلی از سناریو با توجه به نیاز شما و کاری که میخواین انجام بدین تعریف میشه.
اگه در این مورد سوالی داشتید و یا انتقادی در مورد این نوع مقالات خوشحال میشم باهام در ارتباط باشین.