tgoop.com/unixmens/20208
Last Update:
در نگاه اول اینطور به نظر میاد که چون زبانهای مفسری (مثل Python, PHP, Ruby, JavaScript/Node.js) نیازی به کامپایل شدن ندارند، پس در CI/CD pipeline هم مرحلهی build لازم نیست. اما در واقعیت اینطور نیست و دلیلهای مهمی وجود داره که چرا حتی برای زبانهای مفسری هم یک stage به نام build داریم:
۱. تعریف گستردهی Build در CI
در CI، منظور از Build فقط کامپایل کد منبع به باینری نیست.
در واقع Build یعنی: آمادهسازی artifact قابل استفاده (قابل اجرا یا قابل دیپلوی) از کد منبع.
برای زبانهای مفسری، این میتونه شامل کارهای زیر باشه:
نصب و freeze کردن وابستگیها (pip install -r requirements.txt در Python یا npm install در Node.js)
بستهبندی کد به صورت آرشیو یا کانتینر (zip, tar.gz, docker image)
اجرای ابزارهای code generation یا transpiler (مثل TypeScript → JavaScript یا Sass → CSS)
ا minify و optimize کردن کدهای front-end
آمادهسازی migrationها یا فایلهای config برای استقرار
۲. تولید Artifact پایدار
ا CI/CD به دنبال اینه که یک خروجی قابل تکرار بسازه.
در زبانهای مفسری، artifact میتونه یک Docker image، یک بستهی Python (.whl یا .tar.gz)، یا یک بستهی npm باشد.
این artifact تضمین میکنه که همون نسخهی تستشده، به محیط stage و production منتقل بشه.
۳. جداسازی Concerns
مرحله build جدا میشه تا مطمئن بشیم:
وابستگیها درست نصب شدن.
نسخهی کد پایدار و بدون خطا آماده شده.
تستها بعداً روی artifact اجرا بشن (نه روی سورس خام).
تیمها یک مرز واضح بین "آمادهسازی" و "تست/استقرار" داشته باشن.
۴. مثالها
Python:
stages:
- build
- test
- deploy
build:
stage: build
script:
- pip install -r requirements.txt
- pytest --collect-only # بررسی اینکه همه چیز قابل بارگذاری است
- python setup.py sdist bdist_wheel # تولید پکیج
artifacts:
paths:
- dist/
Node.js:
build:
stage: build
script:
- npm install
- npm run build # مثلا build کردن React/Next.js
artifacts:
paths:
- dist/
در واقع حتی اگر زبان مفسری باشه و کامپایل نشه، مرحله build به معنی آمادهسازی محیط، وابستگیها، artifact و بستهی قابل استقرار هست.
#devops
https:// www.tgoop.com/unixmens
BY Academy and Foundation unixmens | Your skills, Your future

Share with your friend now:
tgoop.com/unixmens/20208
