مفاهیم Build و Packaging

مفهوم

Build یعنی تبدیل کد منبع به خروجی قابل اجرا: کامپایل، باندل‌کردن فایل‌ها، مدیریت وابستگی‌ها و تولید نسخه‌ی نهایی. بسته به زبان و اکوسیستم، شکل آن متفاوت است — از یک کامپایل ساده تا pipelineای که تست‌ها را اجرا و خروجی نهایی را تولید می‌کند.

Packaging یعنی قرار دادن خروجی Build در قالبی قابل توزیع و نصب — به این خروجی Artifact می‌گوییم. چند مثال از اکوسیستم‌های مختلف:

  • فایل اجرایی یا کتابخانه‌ی کامپایل‌شده
  • jar در دنیای Java، wheel در Python، بسته‌ی npm در دنیای JavaScript
  • Docker Image — که در هفته‌ی پنجم به آن می‌رسیم

چرا مهم است؟

  • تکرارپذیری — Build مناسب باید هرجا و هر بار، نتیجه‌ی یکسان بدهد؛ «روی سیستم من کار می‌کرد» یعنی فرایند Build به درستی تعریف‌نشده است
  • وابستگی‌ها — پروژه به ده‌ها بسته‌ی دیگر وابسته است؛ ابزار Build تعیین می‌کند کدام نسخه از هر بسته استفاده شود و آن‌ها را در خروجی نهایی قرار دهد
  • نسخه‌گذاری — هر Artifact باید نسخه‌ی مشخص داشته باشد تا بتوان دقیقاً گفت چه چیزی در محیط‌های مختلف اجرا می‌شود؛ قالب متعارف Semantic Versioning است: MAJOR.MINOR.PATCH
  • پایه‌ی اتوماسیون — Build خودکار، از مهم‌ترین پایه‌های هر Pipeline است؛ در هفته‌ی ششم آن را با GitHub Actions می‌سازیم

در این هفته فقط هدف یادگیری مفهوم است؛ ابزارهای build را در تمرین‌های آینده یاد می‌گیریم.

منابع یادگیری

مقالات و مستندات