help-header

استفاده از Build در پلتفرم ابری آروان

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

پیش‌نیازها

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

arvan login

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

 

Build چیست؟

build در واقع فرایند تبدیل ورودی، مانند یک کد نوشته شده، مانند یک فروشگاه آنلاین نوشته شده به زبان PHP، به یک عنصر خروجی، مانند container image، برای مثال image نهایی ساخته شده جهت استفاده در deployment، است که به واسطه buildConfig تعریف می‌شود. Build دارای strategyهای مختلفی است که در این مقاله تنها strategy که توضیح داده شده docker است و سایر strategyها خارج از حوصله این مقاله است.

 

ساخت 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 فرایند 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 برای دریافت کد شما و آغاز فرایند 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.com/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 رسید، یعنی فرآیند با موفقیت به انجام رسیده است.

همچنین می‌توانید با مراجعه به این مقاله می‌توانید نمونه کاربردی استفاده از build را در پلتفرم ابری آروان مشاهده کنید.

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

 

این مقاله از مراجع زیر اقتباس شده است.

https://docs.okd.io/3.11/dev_guide/builds/index.html