कैपिस्ट्रानो - पुराने रिलीज को साफ करें


125

आमतौर पर कैपिस्ट्रानो का उपयोग करते समय, मैं जाऊंगा और एक तैनात एप्लिकेशन से पुराने रिलीज को मैन्युअल रूप से हटा दूंगा। मैं समझता हूं कि आप दौड़ सकते हैं cap deploy:cleanupलेकिन फिर भी 5 रिलीज छोड़ देंगे । क्या यह अभीष्ट उद्देश्य है? क्या सिर्फ 1 पिछली तैनाती के लिए पुराने रिलीज को साफ करने का एक और तरीका है?


कुछ पिछले रिलीज को रखना कभी भी एक अच्छा विचार है, तो यदि आप अंतिम तैनाती करते हैं तो आप एक बड़ी गलती कर सकते हैं जब तक आप इसे ठीक नहीं करते तब तक पिछले रिलीज के लिए कैपिस्ट्रानो (कैप तैनाती: रोलबैक) के साथ तेजी से रोलबैक कर सकते हैं।
डेमोसाइजर

जवाबों:


155

आप :keep_releases5 के डिफ़ॉल्ट को ओवरराइड करने के लिए चर का उपयोग कर सकते हैं । इसे देखें ।


2
यह ध्यान देने योग्य हो सकता है कि भले ही afterहुक के माध्यम से कॉल करने पर कुछ फ़ाइलों को हटाने के लिए find + rm कमांड विफल हो जाए, लेकिन कार्य सफलतापूर्वक "सफल" हो जाता है । इसे सीधे कॉल करना त्रुटियों को दर्शाता है ... मुझे इसका एहसास तब हुआ जब मैं डिस्क स्थान से भागना शुरू कर रहा था।
Cony

8
@ जोश आपने इस उत्तर को स्वीकार कर लिया है, लेकिन आपको जांचना चाहिए कि क्या आपने "तैनाती: सफाई" के लिए कॉलबैक निर्धारित किया है, जैसा कि मैंने नीचे कहा है, क्योंकि यह डिफ़ॉल्ट रूप से नहीं चलता है।
डिएगो प्लेंट्ज़

131

आप इसे अपने परिनियोजन में सेट करके स्वचालित रूप से कर सकते हैं

set :keep_releases, 1
after "deploy:update", "deploy:cleanup" 

अतीत में (मुझे ठीक से पता नहीं है कि कौन सा संस्करण है) यह कॉलबैक डिफ़ॉल्ट था, लेकिन बाद में डेवलपर ने इसे तय करने के लिए उपयोगकर्ता को छोड़ने का फैसला किया। कैपिस्ट्रानो 3 में इसे डिफ़ॉल्ट तैनाती प्रवाह में वापस जोड़ा गया था।


1
धन्यवाद, डिएगो। Capistrano v2.14.1 में आपका उत्तर सही ढंग से काम करता है।
स्कार्वर 2


41

यदि आप अंतिम 3 को छोड़कर सभी रिलीज़ हटाना चाहते हैं उदाहरण के लिए आप चला सकते हैं:

cap deploy:cleanup -s keep_releases=3

7
काम नहीं करता है। optionParser::InvalidOption: invalid option: s
स्नोमैन

0

मुझे भी ऐसी ही समस्या का समाधान करना पड़ा था। मैं सामान्य रिलीज के लिए 5 रिलीज रखना चाहता था, लेकिन कुछ स्थितियों के लिए सभी पिछले रिलीज को हटाने में सक्षम होना चाहिए।

मैं एक कस्टम कार्य के साथ ऐसा करने में सक्षम था। एक फ़ाइल बनाएं lib/capistrano/tasks/cleanup.rakeऔर निम्नलिखित कोड जोड़ें।

desc "Remove all but the last release"
task :cleanup_all do
    set :keep_releases, 1
    invoke "deploy:cleanup"
end

उपयोग चलाने के लिए bundle exec cap staging cleanup_allयाcap staging cleanup_all

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.