یک اسکریپت Bash بنویسید که در محیط CI اجرا شود و ابتدا تستهای پروژه را اجرا کند، سپس یک ایمیج Docker با تگِ کوتاهِ شناسهی commit بسازد و تنها در صورتی که روی شاخهی main قرار دارد آن را به یک Docker registry فشار دهد.
2.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:40 0.0
برای حل این مسئله از ابزارهای سادهای مثل git و docker و متغیرهای محیطیِ CI استفاده کنید؛ در ابتدای اسکریپت set -euo pipefail قرار دهید تا روی خطاها ایست کند، شناسهی commit را با git rev-parse --short HEAD یا از متغیر CI_COMMIT_SHA بگیرید و شاخه را از CI_COMMIT_BRANCH یا git rev-parse --abbrev-ref HEAD استخراج کنید. ابتدا دستور اجرای تستها (مثلاً npm test یا pytest) را اجرا کنید و در صورت موفقیت با docker build -t myrepo:TAG . ایمیج بسازید؛ اگر شاخه main بود با docker login (با استفاده از متغیرهای DOCKER_USERNAME و DOCKER_PASSWORD) و سپس docker push آن را آپلود کنید. نکات: مقادیر حساس را از متغیرهای محیطی CI بگیرید، اسکریپت را قابل اجرا کنید (chmod +x)، و قبل از push در محیط محلی با شبیهسازی متغیرها تست کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
اجرای تستها قبل از ساخت ایمیج و استفاده از set -euo pipefail برای جلوگیری از ادامه کار در صورت خطای هر مرحله از رویکردهای رایج CI است. شناسه commit را میتوان با git rev-parse --short HEAD یا CI_COMMIT_SHA گرفت و شاخه را از CI_COMMIT_BRANCH یا git rev-parse --abbrev-ref HEAD استخراج کرد تا اسکریپت در هر محیطی کار کند. اگر شاخه main است، با docker login و DOCKER_USERNAME/DOCKER_PASSWORD وارد registry شوید و سپس docker push را انجام دهید؛ در غیر این صورت فقط ایمیج ساخته میشود. برای تست محلی، مقادیر نمونه را شبیهسازی کنید و اسکریپت را با chmod +x اجرا کنید تا از عملکرد صحیح آن مطمئن شوید.
گزارش