نسخهها و بازگشت
هر بار که سرویس ساخته میشود، یک ساخت (ایمیج آماده) به وجود میآید. وقتی آن ساخت همراه با متغیرهای همان لحظه اجرا شود، یک نسخه منتشر شده است. همهٔ اینها در زبانهٔ «استقرارها»ی سرویس فهرست شدهاند.
وضعیتها
| وضعیت | یعنی |
|---|---|
| در صف | منتظر نوبت ساخت |
| در حال ساخت | کد دریافت و ایمیج ساخته میشود |
| آماده | ساخت تمام شده و ایمیجش موجود است |
| در حال استقرار | نسخهٔ تازه اجرا شده و گردو منتظر است برنامه جواب بدهد |
| فعال | همین نسخه الان ترافیک را میگیرد |
| جایگزینشده | قبلاً فعال بوده و نسخهٔ تازهتری جایش را گرفته |
| ناموفق | ساخت یا استقرار شکست خورد؛ «توضیح خطا» را بزنید |
| لغو شد | پیش از پایان متوقف شد |
برای هر ساخت «گزارش ساخت» و برای هر نسخه «گزارش استقرار» را میتوانید باز کنید.
بازگشت به نسخهٔ قبل
نسخهٔ تازه مشکل دارد؟ بالای زبانهٔ «استقرارها» دکمهٔ «بازگشت به نسخهٔ قبلی» را بزنید، یا کنار یکی از ساختهای قدیمیتر «بازگردانی به این ساخت» را بزنید و تأیید کنید. گردو بدون ساخت دوباره همان ایمیج قبلی را اجرا میکند، پس بازگشت در حد چند ثانیه تا یکی دو دقیقه طول میکشد.
چند نکته:
- بازگشت فقط کد را برمیگرداند. دادههای دیتابیس و فایلهای دیسک همانطور که هستند میمانند. اگر نسخهٔ خراب ساختار دیتابیس را تغییر داده (migration)، ممکن است کد قدیمی با دیتابیس تازه کار نکند.
- با بازگشت، استقرار خودکار متوقف نمیشود. push بعدی روی شاخه دوباره نسخهٔ تازه میسازد. اگر میخواهید روی نسخهٔ قدیمی بمانید تا مشکل را درست کنید، استقرار خودکار را موقتاً خاموش کنید.
- ایمیج ساختهای قدیمیتر از حدود یک هفته که دیگر اجرا نمیشوند پاک میشوند. برای برگشتن به چنین نسخهای باید همان کامیت را دوباره بسازید.
انتقال نسخه به محیط دیگر
اگر اپلیکیشن چند محیط دارد (مثلاً staging و production)، میتوانید ساختی را که در staging آزمودهاید بدون ساخت دوباره به production ببرید. در زبانهٔ استقرارها، از «انتخاب محیط مقصد…» محیط را انتخاب کنید. ایمیج همان است؛ متغیرهای محیط مقصد روی آن اعمال میشوند.
Deploy Hook
Deploy Hook یک آدرس مخفی است که با صدا زدنش سرویس دوباره ساخته و منتشر میشود. به درد اینها میخورد:
- استقرار بعد از موفق شدن تستها در GitHub Actions یا GitLab CI؛
- استقرار خودکار برای مخزنهای GitLab یا آدرس دستی؛
- استقرار وقتی محتوای یک CMS عوض میشود.
آدرس را در زبانهٔ «تنظیمات» سرویس، بخش گیت، پیدا و کپی کنید. هر کسی این آدرس را داشته باشد میتواند سرویس را دوباره منتشر کند، پس مثل رمز نگهش دارید. اگر لو رفت، «تولید مجدد» را بزنید؛ آدرس قبلی همان لحظه از کار میافتد.
آدرس به /api/webhooks/deploy/<token> ختم میشود و هم با GET کار میکند و هم با POST:
curl -X POST "<آدرس Deploy Hook>"نمونه در GitHub Actions، با آدرس در Secret به نام GERDOO_DEPLOY_HOOK:
- name: Deploy to Gerdoo
run: curl -fsS -X POST "${{ secrets.GERDOO_DEPLOY_HOOK }}"پاسخ موفق کد 202 است و یعنی استقرار شروع شده، نه اینکه تمام شده. وضعیت را در پنل یا با gerdoo service status <سرویس> دنبال کنید. اگر پاسخ 404 با deploy hook not found or service busy بود، یا آدرس عوض شده، یا سرویس همین الان وسط یک استقرار دیگر است؛ کمی بعد دوباره صدا بزنید.
لغو استقرار
استقراری که هنوز تمام نشده را میتوانید از دستیار هوشمند پنل («استقرار فعلی را لغو کن») یا API لغو کنید. نسخهای که الان فعال است دست نمیخورد.
بعد از تغییر متغیرها یا تنظیمات هم یک نسخهٔ تازه منتشر میشود (با همان ایمیج، بدون ساخت دوباره)، چون هر نسخه عکسی از تنظیمات همان لحظه است.