داده هات
ورود

قانون بیلد و دپلوی خودکار

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

ساخت قانون بیلد

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

در فرم «قانون بیلد جدید»، فیلدهای زیر را تکمیل کنید.

منبع کد

  • اتصال SCM: حساب GitHub یا GitLab متصل.
  • مخزن: مخزنی که باید بیلد شود.
  • نوع مرجع: «شاخه» برای بیلد با هر push به یک شاخه، یا «تگ» برای بیلد با ساخت تگ‌های جدید.
  • الگوی شاخه/تگ: نام شاخه یا تگ، یا الگویی با *. برای مثال main فقط شاخه‌ی اصلی را زیر نظر دارد و release-* همه‌ی شاخه‌ها یا تگ‌هایی را که با release- شروع می‌شوند.
  • فیلتر مسیر: اختیاری. اگر تعیین شود، فقط pushهایی که فایلی در مسیر منطبق را تغییر داده‌اند بیلد را اجرا می‌کنند؛ برای مثال services/api/**. این گزینه برای مخزن‌هایی که چند سرویس را در خود جای داده‌اند مناسب است.

نوع بیلد

در فیلد «نوع بیلد» یکی از دو روش زیر را انتخاب کنید:

  • Buildpacks (تشخیص خودکار): زبان و فریم‌ورک پروژه از روی فایل‌های مخزن، مانند package.json، requirements.txt، go.mod یا pom.xml، تشخیص داده می‌شود و ایمیج بدون نیاز به Dockerfile ساخته می‌شود. این روش برای زبان‌های رایج مانند Node.js، ‏Python، ‏Go و Java مناسب است.
  • Dockerfile: ایمیج با Dockerfile موجود در مخزن ساخته می‌شود. در این حالت دو فیلد دیگر نمایش داده می‌شود:
    • مسیر Dockerfile: مسیر فایل نسبت به ریشه‌ی مخزن، مانند Dockerfile یا docker/api.Dockerfile.
    • مسیر Context: پوشه‌ای که به‌عنوان Build Context استفاده می‌شود، مانند . یا services/api.

اندازه‌ی بیلد

در فیلد «اندازه بیلد» منابع محیط بیلد را انتخاب کنید. بیلدهای بزرگ‌تر سریع‌تر اجرا می‌شوند اما نرخ هر دقیقه‌ی آن‌ها بیش‌تر است:

اندازهحداکثر پردازندهحداکثر حافظهفضای موقت
«کوچک»۱ هسته۲ گیگابایت۵ گیگابایت
«متوسط»۲ هسته۴ گیگابایت۱۰ گیگابایت
«بزرگ»۴ هسته۸ گیگابایت۲۰ گیگابایت

مقصد ایمیج و دپلوی

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

کش بیلد

با فعال‌کردن «فعال‌سازی کش بیلد»، لایه‌ها و وابستگی‌های بیلدهای قبلی دوباره استفاده می‌شوند و بیلدهای بعدی سریع‌تر خواهند بود. در فیلد «حجم کش» می‌توانید اندازه‌ی تقریبی کش را، مانند 2Gi، تعیین کنید.

نکته

حجم کش بیلد با هر اجرا افزایش می‌یابد. اگر بیلدها کند شدند، پیشنهاد می‌شود کش را پاک کنید.

پس از تکمیل فرم، روی دکمه‌ی «ذخیره» کلیک کنید. اگر فیلدهای الزامی تکمیل نشده باشند، پیام «مخزن، الگوی شاخه و نام رجیستری را وارد کنید.» نمایش داده می‌شود.

ویرایش و حذف قانون

برای تغییر تنظیمات یک قانون، از گزینه‌ی «ویرایش قانون بیلد» استفاده کنید. برای حذف قانون، روی «حذف قانون» کلیک کنید؛ پس از حذف، pushهای بعدی دیگر بیلدی اجرا نمی‌کنند. بیلدهای قبلی و ایمیج‌های ساخته‌شده حذف نمی‌شوند.

نکات نوشتن Dockerfile

اگر از روش Dockerfile استفاده می‌کنید، نکات زیر به سرعت و پایداری بیلد کمک می‌کند:

  • از Multi-stage Build استفاده کنید تا ابزارهای بیلد در ایمیج نهایی قرار نگیرند و حجم ایمیج کم شود.
  • فایل‌های وابستگی، مانند package.json یا requirements.txt، را پیش از کپی کل کد کپی و نصب کنید تا از کش لایه‌ها بهره ببرید.
  • با فایل .dockerignore پوشه‌هایی مانند .git و node_modules را از Build Context خارج کنید.
  • پورتی که اپلیکیشن روی آن گوش می‌دهد با «پورت کانتینر» در تنظیمات کانتینر یکسان باشد.

در ادامه یک نمونه Dockerfile برای اپلیکیشن Node.js آمده است:

text
FROM node:22-alpine AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:22-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY --from=build /app ./
EXPOSE 3000
CMD ["node", "dist/server.js"]