سکوی ابری در واقع یک مدل از مبحث رایانش ابری است که سرویس‌دهنده با ایجاد امکانات سخت‌افزاری و برخی ابزارها، سرعت توسعه نرم‌افزار را بالا برده و دغدغه توسعه‌دهنده را، در ارتباط با زیرساخت‌های مورد نیاز محصول، مرتفع می‌سازد.
در این مقاله به بررسی مفهوم Build و نحوه‌ی استفاده از آن، انواع و همچنین اجزای سازنده یک Build و تعریف آن می‌پردازیم.

پیش‌نیازها

تنها پیش نیاز این راهنما، داشتن حساب کاربری ابر آروان و دسترسی به سکوی ابری است. پس از ورود به حساب کاربری سپس به بخش پروفایل رفته و در سربرگ API KEYS برای خود یک API KEY جدید ساخته و آن را در جایی ذخیره کنید.
برای انجام مراحل این مقاله نیاز است که از کامند لاین ابر آروان استفاده کنید. با استفاده از این لینک کامندلاین را دانلود کرده (در صورت نیاز آن را در PATH خود قرار داده) و از طریق خط فرمان لاگین کنید:

arvan login

سپس API KEY که از سایت دریافت کرده‌اید را در ادامه پیست کنید.

Build چیست؟

Build در واقع فرایند تبدیل ورودی، مانند یک کد نوشته شده، مانند یک فروشگاه آنلاین نوشته شده به زبان PHP، به یک عنصر خروجی، مانند container image، برای مثال image نهایی ساخته شده برای استفاده در Deployment است که به واسطه buildConfig تعریف می‌شود. Build دارای استراتژی‌های مختلفی است که از بین آن‌ها در این مقاله تنها به Docker می‌پردازیم.

ساخت Build

برای ساخت Build، می‌بایست اطلاعات مورد نیاز را در قالب yaml در یک فایل وارد کرده و سپس از طریق کامندلاین آن را به سکوی ابری آروان ارایه کرد. تکه کد زیر شامل تمام تنظیمات مربوط به buildConfig برای یک کد نوشته شده به زبان Python است.
توجه کنید که در این مقاله فرض بر این است که در کنار کد نوشته شده Dockerfile مربوط به آن موجود است.

kind: "BuildConfig"
apiVersion: "v1"
metadata:
  name: "python-build" 
spec:
  runPolicy: "Serial" 
  triggers: 
    -
      type: "GitLab"
      gitlab:
        secretReference:
           name: "webhooksecret"
  source: 
    git:
      uri: "https://gitlab-example-project.apps.ir-thr-mn1.arvan.run/example/my-python.git"
    sourceSecret:
      name: gitsecret
  strategy: 
    dockerStrategy:
      forcePull: true 
  output:
    to:
      kind: "DockerImage"
      name: "myreg-example-project.apps.ir-thr-mn1.arvan.run/my-repo/python:latest"
    pushSecret:
      name: "registrysecret"      
  resources:
    limits:
      cpu: 1500m
      ephemeral-storage: 1G
      memory: 600M
    requests:
      cpu: 1500m
      ephemeral-storage: 1G
      memory: 600M

نکته: توجه کنید که دندانه‌گذاری (Indentation) در فایل‌های yaml مهم است و کوچک‌ترین جابه‌جایی می‌تواند باعث برگرداندن خطا و یا تنظیمات ناخواسته شود.

  • spec.runPolicy: این فیلد مشخص می‌کند فرایندهای ‌Build به چه صورت اجرا شوند. این مقدار برابر serial قرار داده شده تا پیش از اتمام یک Build فرایند بعدی اجرا نشود.
  • spec.triggers: این فیلد مشخص می‌کند فرآیند در چه صورتی اجرا شود. در این مثال فرایند Build در صورت Push شدن کد در Repository مربوطه، به آدرس https://gitlab-example-project.apps.ir-thr-mn1.arvan.run/example/python.git که توسط فیلد spec.source مشخص شده، اجرا می‌شود. برای انجام این عمل، می‌بایست در Gitlab یک Webhook تعریف کرد. این Webhook نیازمند یک Secret است که توسط فیلد spec.triggers.gitlab.secretRefrence.name مشخص شده و در ادامه نحوه ساختن آن شرح داده خواهد شد.
  • spec.source: مشخص کننده آدرس Repository کد می‌باشد.
  • spec.output.to.name: نام Image Container نهایی، که در انتهای فرایند Build ساخته می‌شود. این نام مشخص می‌کند که Image تولید شده باید به کدام Registery ارسال شود.
  • spec.source.sourceSecret.name:  نام Secretای که Build برای اتصال به Gitlab و دریافت کد به آن نیاز دارد.
  • spec.output.pushSecret: در اینجا می‌بایست یک Secret، که اطلاعات مربوط به اتصال به Docker Registry را شامل می‌شود، اختصاص داد.
  • spec.resources: از آنجا که فرایند Build خود توسط یک Pod اجرا می‌شود، لازم است منابع مورد نیاز این Pod مشخص شود. توجه کنید که این Pod به صورت موقت اجرا می‌شود و در پایان فرایند حذف شده و در صورت اجرای موفق State آن به Completed تغییر می‌کند و دیگر تا اجرای مجدد فرایند، منابعی مصرف نمی‌کند.

خطوط بالا را در یک فایل به نام build.yaml وارد کرده و ذخیره کنید. سپس از طریق کامند لاین با دستور زیر، Build خود را به سکوی ابری آروان ارایه کنید.

arvan paas apply -f build.yaml

سپس با دستور زیر می‌توانید از وضعیت Build خود و اجرای آن بر روی سکوی ابری آروان آگاه شوید.

arvan paas get buildconfig

خروجی مشابه زیر خواهد بود:

 $ arvan paas get bc
 NAME TYPE FROM LATEST
 python-build Docker Git 1

ایجاد Secretها

Secret در واقع یکی از اجزای اصلی است، که براب ذخیره‌سازی داده‌هایی مانند Password استفاده می‌شود.
در این سیستم، همانطور که بالاتر اشاره شد، سه نوع Secret استفاده می‌شود: یک Secret براب استفاده در Webhook؛ و دیگری برای ذخیره‌سازی اطلاعات اتصال به Docker Registry شخصی؛ و Secret سوم برای دسترسی فرایند Build به Repository شخصی موجود بر روی Gitlab شخصی شما.

ساخت secret مربوط به webhook

برای ساخت secret مربوط به Webhook برای Gitlab شخصی خود، دستور زیر را در ترمینال بزنید:

arvan paas create secret generic webhooksecret --from-literal=WebHookSecretKey=secret value

در اینجا مقدار <secret value> برابر با هر آن چه می‌خواهید قرار دهید( در اینجا ما این مقدار را برای مثال معادل secretvalue1 قرار خواهیم داد). این مقدار بعدا در Webhook که در Gitlab ست خواهد شد، مورد استفاده قرار خواهد گرفت.

ساخت Secret مربوط به دسترسی Build به Gitlab شخصی

با توجه به اینکه کد شما در یک Repository شخصی وجود دارد، لازم است دسترسی‌های لازم به فرایند Build برای دریافت کد شما و آغاز این فرایند داده شود. در این راستا کافی است کامندهای زیر را وارد کنید.

arvan paas create secret generic gitsecret --from-literal=username=<gitlab username> --from-literal=password=<gitlab password> --type=kubernetes.io/basic-auth

arvan paas secrets link builder gitsecret

نکته: توجه کنید که در Secret بالا از نوع kubernetes.io/basic-auth، برایذخیره User و Password استفاده شده است.

ساخت Secret مربوط به Docker Registry

برای ساخت Secret مربوط به اطلاعات اتصال به Docker Registry شخصی خود، دستور زیر را در ترمینال بزنید:

arvan paas create secret docker-registry private-reg --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-password> --docker-email=<your-email>

اضافه کردن Webhook به Gitlab

برای اضافه کردن Webhook به Gitlab برای اجرا شدن Trigger هنگام Push شدن کد، دستور زیر را در ترمینال وارد کنید تا URL مربوط به Webhook برای Gitlab را بدست آورید.

arvan paas describe bc python-build

در خروجی، بخش Webhook GitLab آدرس Webhook مانند زیر خواهد بود.

Webhook GitLab:

URL: https://napi.arvancloud.ir/paas/v1/regions/ir-thr-mn1/o/apis/build.openshift.io/v1/namespaces/example-project/buildconfigs/python-build/webhooks/<secret>/gitlab

حال می‌بایست URL را کپی کنید‌ (مقدار <secret> را با مقدار رمز تعیین شده در قسمت های پیش (در اینجا secretvalue1) جایگزین کنید.) و طبق توضیحات زیر آن را به پروژه خود در Gitlab شخصی خود اضافه کنید.

ابتدا در Gitlab خود لاگین کنید. پروژه خود را بسازید. از منوی سمت چپ پروژه به settings > webhooks بروید. در این جا url webhook را که از بخش قبل بدست آوردید کپی کنید و تیک مربوط به Push را فعال و سپس ذخیره کنید.

حال می‌توانید کد خود را پس از تغییرات دلخواه، در Gitlab ساخته شده خودتان Push کنید. در این حال فرایند Build می‌بایست شروع به کار کند.

با دستور زیر از وضعیت انجام Build آگاه خواهید شد. پس از پایان موفق فرایند Image Container ساخته شده در Docker Registry شخصی شما وجود خواهد داشت.

arvan paas describe bc python-build

توجه کنید که در صورتی که از gitlab.com و یا github.com استفاده می‌کنید به دلایل مشکلات شبکه‌ ممکن است Webhook مربوط به Push ارسال نشود. (برای دریافت کد نباید مشکلی وجود داشته باشد)

اجرای فرآیند build

چنانچه در مثال بیان شد، از Webhookهای Gitlab (و همچنین Github و یا Bitbucket ) می‌توان برای شروع فرآیند build استفاده کرد تا هنگام push شدن کد درون repository (و یا سایر گزینه های موجود در تنظیمات Gitlab) فرآیند به صورت خودکار آغاز به کار کند . مچنین می‌توان یک فرآیند build را به صورت دستی با کامند زیر نیز اجرا کرد:

arvan paas start-build <build-name>

که به‌جای <build-name> نام buildconfig ای که ساخته شده باید قرار گیرد.

هنگامی که فرآیند build شروع به کار می‌کند، یک Pod بالا می‌آورد و شما می‌توانید از وضعیت این Pod با اجرای دستور زیر آگاه شوید. همچنین شما قادر خواهید بود تا Log مربوط به این Pod را مطالعه نمایید تا در صورت بروز خطا به برطرف کردن آن اقدام نمایید.

arvan paas get po

هنگامی که وضعیت Pod مربوط به Build به وضعیت Complete رسید، یعنی فرآیند با موفقیت به انجام رسیده است.

برای اطلاعات بیشتر می‌توانید به مستندات OKD مراجعه کنید.