2015-06-05 11 views
5

क्या यह रत्न कैश करना संभव है, ताकि bundle install प्रत्येक निर्माण के लिए रत्नों का गुच्छा स्थापित नहीं करेगा? इसमें प्रत्येक निर्माण पर 5 मिनट लगते हैं, जो बहुत अधिक है।CircleCI रत्न कैशिंग

मैं circle.yml config को यह जोड़ दिया है:

dependencies: 
    cache_directories: 
    - "/home/ubuntu/.rvm/gems/ruby-2.1.2/gems/" 

यह आम निर्देशिका जहां सभी सिस्टम जवाहरात डाल रहे हैं जो bundle show gem_name से प्रदान की जाती है।

इस अलावा प्रणाली के बाद जैसे लॉग लिखते हैं:

restoring cache v4/company/repo_name/dependency/circle-ci/42/mGWhlYQIxyOy0GZtt4QmCw__.tar.gz 
restoring home/ubuntu/repo_name/vendor/bundle, home/ubuntu/.m2, home/ubuntu/.ivy2, home/ubuntu/.go_workspace, home/ubuntu/.gradle, home/ubuntu/.rvm/gems/ruby-2.1.2/gems 

तो, जहाँ तक मैं समझता हूँ, यह प्रणाली रत्न और जवाहरात vendor/bundle में स्थापित पुनर्स्थापित करता है, फिर भी, मैं अभी भी यह देखने (और इस का एक बहुत लेता है समय):

Installing rake 10.4.2 
Installing i18n 0.7.0 
Installing json 1.8.2 
Installing minitest 5.5.1 
... 
बजाय

using rake 10.4.2 
using i18n 0.7.0 
using json 1.8.2 
using minitest 5.5.1 
... 

इसलिए, यह se ईएमएस, यह काम करना चाहिए, लेकिन यह नहीं है। क्या गलत हो सकता है?

+0

मुझे पहले से ही समाधान मिल गया है। बाद में जवाब देंगे। – kovpack

+0

क्या मैं आपके द्वारा प्राप्त समाधान के लिए पूछ सकता हूं? धन्यवाद। – stmllr

+0

मैंने अभी जवाब – kovpack

उत्तर

17

समाधान सरल है: सर्कलसीआई डिफ़ॉल्ट रूप से कुछ कमांड चलाता है और vendor/bundle में डिफ़ॉल्ट रूप से कैश रत्न भी चलाता है, इसलिए cache_directories पर कुछ भी जोड़ने की आवश्यकता नहीं है।

उन डिफ़ॉल्ट आदेशों में से bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3 है, जो कैश निर्देशिका में रत्न की उपस्थिति की जांच करता है और यदि वे वहां नहीं हैं तो उन्हें इंस्टॉल करता है।

मेरे मामले में मेरे पास कई अनुप्रयोगों (मुख्य अनुप्रयोग, सामान्य यूआई, एपीआई क्लाइंट और एपीआई नकली) शामिल थे जिसमें 4 अलग-अलग रिपोज़ में विभाजित था। उनमें से अधिकांश को bundle install आदेशों की आवश्यकता थी।

मुझे केवल एक ही चीज है जो bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3 के साथ मेरे सभी bundle install कमांड (जो हमेशा रत्न स्थापित करता है) को प्रतिस्थापित करना है। ऐसे मामले में सभी रत्न केवल पहली बार स्थापित होते हैं जब मैं परीक्षण चलाता हूं और निम्नलिखित सभी पहले कैश किए गए रत्नों का उपयोग करते हैं।

+1

जोड़ा है, मुझे यह जवाब नहीं समझा है। मेरी 'circle.yml' फ़ाइल में' बंडल इंस्टॉल 'कमांड नहीं है, तो मैं इसे कैसे बदलूं? –

+2

@ PeterH.Boling मैं उस मामले में मान रहा हूं कि आपकी circle.yml फ़ाइल अनुमानित आदेश चला रही है और आपने उन्हें ओवरराइट नहीं किया है .. ओवरराइड निर्दिष्ट करें और यह अनुमानित आदेशों पर इसका उपयोग करेगा। –

+0

देशी एक्सटेंशन के रूप में रत्नों को छोड़कर काम करने लगता है – pean

संबंधित मुद्दे