در اکوسیستم مدرن DevOps، جداسازی یکپارچگی مداوم (CI) و تحویل مداوم (CD) دیگر تنها یک بهترین رویه نیست؛ بلکه برای برنامههای مقیاسپذیر یک ضرورت است. در حالی که GitHub Actions فرآیند تست و ساخت خودکار را متحول کرده است، استقرار واقعی در محیطهای پیچیده چندمرحلهای اغلب نیازمند رویکرد GitOps است. با یکپارچهسازی GitHub Actions و ArgoCD، سازمانها میتوانند به همافزایی قدرتمندی دست یابند که در آن تغییرات کد، تستها را در یک سیستم و مدیریت وضعیت خوشه را در سیستم دیگر فعال میکند.
این رویکرد تضمین میکند که خط لوله CI بر روی تضمین کیفیت و تولید ابزارها متمرکز باشد، در حالی که خط لوله CD که توسط ArgoCD هدایت میشود، استقرار سازگار و اعلانی را برای خوشههای Kubernetes تضمین میکند. بیایید بررسی کنیم که چگونه میتوان این جریان بیدرز را معماری کرد.
معماری جریان خط لوله
فلسفه اصلی این یکپارچهسازی، جداسازی فرآیند ساخت از فرآیند استقرار است. GitHub Actions مسئول ساخت تصاویر Docker، اجرای تستهای واحد و یکپارچه، و بارگذاری این ابزارها در یک مخزن کانتینر خواهد بود. سپس، این مخزن شامل مانیفستهای Kubernetes را با یک برچسب تصویر جدید بهروزرسانی میکند.
ArgoCD که درون خوشه هدف Kubernetes اجرا میشود، این مخزن خاص را پایش میکند. با تشخیص تغییر در تعاریف مانیفست، آن بهطور خودکار وضعیت خوشه را همگامسازی میکند تا با وضعیت مطلوب تعریفشده در Git مطابقت داشته باشد. این امر یک حلقه استقرار قابل اعتماد، قابل حسابرسی و خودکار را ایجاد میکند.
پیکربندی جریان کار GitHub Actions
فایل جریان کار GitHub Actions به عنوان هماهنگکننده فرآیندهای ساخت و انتشار شما عمل میکند. ما باید مراحلی برای لاینتینگ، تست، ساخت و بهروزرسانی مانیفست استقرار تعریف کنیم. مرحله حیاتی شامل اصلاح مانیفست Kubernetes یا یک Helm Chart برای بازتاب برچسب تصویر جدید و ارسال این تغییر به مخزن است.
در اینجا یک نمونه پیکربندی جریان کار وجود دارد که بارگذاری تصویر و بهروزرسانی مانیفست را نشان میدهد:
name: CI/CD Pipeline
on:
push:
branches: [ main ]
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Container Registry
uses: docker/login-action@v2
with:
username: ${{ secrets.REGISTRY_USER }}
password: ${{ secrets.REGISTRY_PASS }}
- name: Build and Push Image
uses: docker/build-push-action@v4
with:
push: true
tags: ${{ secrets.REGISTRY }}/my-app:${{ github.sha }}
- name: Update Kubernetes Manifest
run: |
sed -i "s|my-app:.*|my-app:${{ github.sha }}|g" k8s/deployment.yaml
git config --local user.email "actions@github.com"
git config --local user.name "GitHub Actions"
git add k8s/deployment.yaml
git commit -m "Update image to ${{ github.sha }}"
git push
راهاندازی ArgoCD برای GitOps
پس از اینکه GitHub Action مانیفست بهروز شده را بارگذاری کرد، ArgoCD مسئولیت را بر عهده میگیرد. شما باید ابتدا ArgoCD را روی خوشه هدف خود نصب کنید و سپس یک منبع Application ایجاد کنید که به URL مخزن و مسیری که مانیفستهای شما در آن قرار دارد اشاره کند. این کار به ArgoCD میگوید دقیقاً چه چیزی را پایش کند.
هنگامی که کامیت ارسال میشود، مکانیزم بررسی سلامت ArgoCD انحراف بین وضعیت زنده و وضعیت Git را تشخیص میدهد. بهطور پیشفرض، ArgoCD در حالت همگامسازی خودکار عمل میکند، اما اغلب توصیه میشود که برای مراحل حیاتی تولید از همگامسازی دستی استفاده شود تا امکان یک مرحله نهایی تأیید انسانی فراهم شود.
مدیریت استقرارهای چندمرحلهای
یکی از مزایای قابل توجه این معماری، مدیریت چندین محیط (توسعه، آزمایشگاه، تولید) بدون استراتژیهای پیچیده شاخهبندی است. شما میتوانید یک جریان کار GitHub واحد را حفظ کنید که ابزار را یک بار میسازد. با این حال، میتوانید ساختار مخزن Git خود را طوری تنظیم کنید که پوشههای جداگانهای برای هر محیط داشته باشد، یا از رویپوشهای Kustomize استفاده کنید.
در یک پیکربندی Kustomize، ممکن است GitHub Action مرجع تصویر پایه را بهروزرسانی کند، در حالی که منابع ArgoCD به پوشههای مختلف اشاره میکنند (مثلاً `k8s/dev`، `k8s/prod`). این اطمینان میدهد که محیط آزمایشگاه بلافاصله آخرین ابزار را برای تست دریافت میکند، در حالی که استقرارهای تولید میتوانند از طریق یک جریان کار GitHub جداگانه که پوشه مانیفست تولید را بهطور خاص بهروزرسانی میکند، فعال شوند.
نتیجهگیری
ترکیب GitHub Actions با ArgoCD روشی قوی، مقیاسپذیر و امن برای مدیریت استقرارهای Kubernetes فراهم میکند. با بهرهگیری از GitHub Actions برای انجام کارهای سنگین CI و ArgoCD برای مدیریت اعلانی CD، توسعهدهندگان میتوانند بر نوشتن کد تمرکز کنند تا مدیریت وضعیت زیرساخت. این جداسازی نگرشها، همراه با قابلیت حسابرسی Git، یک خط لوله درجه تولید را ایجاد میکند که قادر به مدیریت استراتژیهای انتشار چندمرحلهای پیچیده است. هنگامی که این الگو را پیادهسازی میکنید، به خاطر داشته باشید که امنیت در اولویت است؛ اطمینان حاصل کنید که رمزهای عبور شما رمزنگاری شده و دسترسیهای مخزن شما به شدت کنترل میشوند.