تنظیمات GitOps

خدمات CI/CD کوبیت شامل همگام‌بودن با یک مخزن GitOps و امکان استفاده از سرویس کوبیت در CI/CD پروژه‌ها می‌باشد.

اتصال GitOps به کوبیت

برای مدیریت CI/CD پروژه‌ها می‌توان از امکانات گیتلب استفاده کرد. سامانه‌ی کوبیت به‌خوبی با سامانه‌ی گیتلب تجمیع می‌شود و می‌تواند وضعیت پک‌های خود را با مخزن GitOps خود همگام نگهدارد. برای این کار باید تنظیماتی را در کوبیت و گیتلب انجام دهید.

تنظیم مخزن در گیتلب

  • در سامانه‌ی گیتلب خود یک پروژه ایجاد کنید (یا از پروژه‌های جاری‌تان استفاده کنید)

تنظیم دسترسی های گیتلب

برای اینکه بتوان از کوبیت به گیت دسترسی داشت، می‌توان یکی از راههای زیر را استفاده کرد.

  • ایجاد یک توکن دسترسی در پروژه گیت

    • در پروژه به بخش settings > access token بروید.
    • نام توکن را وارد کنید و دسترسی‌هایی که مدنظر دارید را تیک بزنید و سپس توکن جدید را ایجاد کنید. حتما این توکن را جایی ذخیره کنید زیرا بعداً دوباره به شما نمایش داده نمی‌شود.
    • برای ایجاد دسترسی‌های کامل در کوبیت لازم است که در قسمت «Select scopes» حتماً تیک «api» زده شود.
    • در قسمت «Select a role» نقش Developer یا Maintainer را انتخاب کنید.
  • استفاده از username و password یک کاربر

    • اگر مایلید می توانید از نام کاربری و گذرواژه برای ارتباط با گیت استفاده کنید، پیشنهاد می‌شود که یک کاربر به همین منظور در گیت ایجاد کنید و از user و password آن استفاده کنید.
  • استفاده از توکن دسترسی کاربر

    • برای ایجاد توکن کافی است به user settings بروید
    • و از منوی کناری access token را انتخاب کنید.
    • توضیحات مربوط به این توکن همانند توکن دسترسی پروژه است که در بالا شرح آن داده شد. پیشنهاد می‌شود که برای این کار، یک کاربر جدید در گیت ایجاد کنید و از توکن دسترسی آن کاربر استفاده کنید.

ایجاد مخزن گیت در کوبیت

پس از اینکه مخزن را در گیتلب تنظیم کردید باید مخزن گیت را به پروژه‌ی خود در کوبیت اضافه کنید. برای این کار:

  • گزینه‌ی کوبچی را از منو انتخاب کنید و با انتخاب پروژه موردنظر،‌ وارد آن شوید و از تب‌های بالا، «مخزن گیت» را انتخاب کنید.
  • سپس بر روی «مخزن جدید» کلیک کنید و اطلاعات مورد نیاز را پر کنید.
  • در فیلد token، توکن دسترسی که از گیتلب دریافت کردید را وارد کنید. یا گزینه دسترسی با توکن را غیر فعال کنید و نام کاربری و رمز عبوری یک کاربر معتبر گیتلب را که به مخزن دسترسی دارد وارد کنید.
  • اگر تیک «تنظیم خودکار وب‌هوک» را بزنید، به‌صورت خودکار وب‌هوکی در گیتلب ایجاد می‌شود که بر اساس آن کامیت‌های شما در گیتلب به اطلاع کوبیت می‌رسد و پک‌های شما در کوبیت به‌روز می‌شوند.
  • اگر تیک «مخزن مشترک در سازمان» را بزنید، این مخزن برای همه‌ی پروژه‌های سازمان در دسترس خواهد بود و شما در پک‌های بقیه‌ی پروژه‌های سازمان نیز می‌توانید این مخزن را انتخاب کنید.

اگر مخزن با موفقیت اضافه شود، اطلاعات آن در قسمت مخزن گیت پروژه، اضافه می‌شود.

ایجاد دستی وب‌هوک به‌روزرسانی در پروژه‌ی گیت

اگر در هنگام ایجاد مخزن گیت در کوبیت، تیک «تنظیم خودکار وب‌هوک» را نزده باشید، می‌توانید به‌صورت دستی این وب‌هوک را در پروژه‌ی گیت تنظیم کنید.

  • از لیست وب‌هوک‌هایی که در قسمت پایین اطلاعات مخزن نمایش می‌دهد، با زدن گزینه‌ی کپی آدرس، URL آن را کپی کنید.
    • همچنین می‌توانید با کلیک بر گزینه‌ی لینک به بیرون، وب‌هوک خود را تست کنید.
  • وارد پروژه‌تان در گیتلب شوید و از قسمت settings وارد تب webhooks شوید.
  • نشانی‌ای که کپی کرده‌اید را در قسمت مربوطه قرار دهید
  • گزینه push را انتخاب کنید و نام برنچ را وارد کنید.
  • ‌با انتخاب گزینه‌ی SSL verification می‌توانید تنظیم کنید که گواهی‌ها در اتصال SSL چک شود.

مراحل تنظیم GitOps یک پک

پس از تنظیم مخزن گیت، برای پک‌هایی که موردنظر خود باید تنظیمات اتصال به فایل‌های داخل مخزن گیتلب را نیز انجام دهید. در این مرحله تناظری بین فایل‌های yaml و پک‌های داخل کوبیت برقرار می‌شود.

  • در کوبیت، وارد پک موردنظر شوید و از قسمت ویرایشگر پک، محتوای فایل yaml را کپی کنید.
  • در پروژه‌ی گیتلب، یک فایل با پسوند pack.yaml. ایجاد کنید و اطلاعاتی که کپی کرده‌اید را در آن paste و سپس کامیت کنید. پیشنهاد می‌شود نام پک و فضای نام آن در آدرس یا اسم فایل باشند.
  • دوباره به کوبیت برگردید و از تب CICD موجود در پک مورد نظر، مخزن متناظر با پروژه‌ی گیتلب را انتخاب کنید و مسیر فایلی که ایجاد کرده‌اید را بنویسید. مسیر فایل را باید نسبت به شاخه‌ی اصلی (root) پروژه وارد کنید. برای مثال: packs/samples/sample_app.pack.yaml.
  • دکمه‌ی اتصال را بزنید و در صورت موفقیت، لینک‌هایی به صفحات گیتلب در پایین فرم اضافه خواهند شد.

مراحل تنظیم CI/CD پروژه‌ها بر اساس کوبیت

برای اینکه deploy شدن پروژه‌های شما به‌صورت مستقیم از طریق کوبیت انجام شود لازم است که CI/CD پروژه‌های در حال توسعه‌ی خود را به کوبیت متصل کنید. بدین منظور گام‌های زیر را انجام دهید.

تنظیم متغیر تگ در پک

  • در ابتدا وارد قسمت ویرایشگر پک شوید. در قسمت vars، یک متغیر با نام DOCKER_TAG بسازید.
  • سپس در قسمت tag در بخش image کانتینر اصلی پکتان، از این متغیر استفاده کنید.

sample-django-pack.yaml

apiVersion: k8s.kubit.ir/v1alpha1
kind: Pack
metadata:
  name: sample-django-app
  namespace: samples
spec:
  ...
  values:
    ...
    workloads:
      web:
        containers:
          web:
            ...
            image:
              pullPolicy: IfNotPresent
              registry: '{{ vars.DOCKER_REGISTRY }}'
              repository: '{{ vars.DOCKER_IMAGE }}'
              tag: '{{ vars.DOCKER_TAG }}'
            ...
        initContainers:
          wait-for-db:
            args:
              - wait_for_db
            image:
              pullPolicy: IfNotPresent
              registry: '{{ vars.DOCKER_REGISTRY }}'
              repository: '{{ vars.DOCKER_IMAGE }}'
              tag: '{{ vars.DOCKER_TAG }}'
    postgresql:
      enabled: false
  vars:
    DOCKER_REGISTRY: registry.sample.dev
    DOCKER_IMAGE: mydjangoproject
    DOCKER_TAG: master-3bafc239
    ...

دریافت متغیرهای لازم از کوبیت

  • وارد تب CI/CD پک موردنظر شوید و بر روی دکمه‌ی «ساخت متغیرها» کلیک کنید.
  • یک آدرس و توکن برای این پک ایجاد شده و به شما نمایش داده می‌شود.

تنظیم CI/CD پروژه توسعه

  • وارد پروژه‌ی توسعه موردنظرتان در گیت شوید.
  • سپس از بخش settings وارد قسمت CI/CD شوید و در بخش Variables متغیر KUBIT_WEBHOOK_TOKEN را تعریف کنید. و با توکنی که در مرحله‌ی قبل از کوبیت دریافت کردید، مقداردهی کنید.
KUBIT_WEBHOOK_TOKEN
  • وارد بخش editor در قسمت CI/CD شوید و قطعه کدی مشابه کد زیر را در آن قرار بدهید. نکته مهم: اگر فایل گیتاپس پک، در ساختار پروژه توسعه است. حتما شرطی در CI/CD وارد کنید که با تغییر فایل گیتاپس، این وب هوک فراخوانی نشود. در غیر این صورت این سناریو در حلقه می افتد.

cicd.yaml

...

kubit webhook:
  stage: deploy
  # image: docker.sabz.dev/curlimages/curl:latest
  variables:
    KUBIT_WEBHOOK_TOKEN: "" # <access_token>

  script:
    - "curl -X POST -F DOCKER_TAG=${DOCKER_TAG} -H "Authorization: Bearer ${KUBIT_WEBHOOK_TOKEN}"  https://api.kubit.ir/api/core/packs/<pack_uid>/vars/"

برای این کار حالتهای زیر نیز قابل استفاده است.

script:
  - 'curl -X POST -F DOCKER_TAG=${DOCKER_TAG} -F token=${KUBIT_WEBHOOK_TOKEN}  https://api.kubit.ir/api/core/packs/<pack_uid>/vars/'
script:
  - 'curl -X POST -F variables[DOCKER_TAG]=${DOCKER_TAG} -F token=${KUBIT_WEBHOOK_TOKEN}  https://api.kubit.ir/api/core/packs/<pack_uid>/vars/'

نکته: برای ارسال متغیرهای دیگر به پک، آنها را به فرمت زیر به پارامترهای درخواست اضافه کنید. البته در نسخه جاری، اگر نام متغیر با عبارت منظم DOCKER_TAG[\w.-]* منطبق نباشد باید برای تایید آن با پشتیبانی کوبیت تماس بگیرید.

`variables[VARIABLE]=VALUE`