2016-08-18 13 views
9

के साथ पैक्रेट (सीआरएएन के बजाय) में आर पैकेज स्रोत फ़ाइलों का उपयोग करना मैं R package that is an RStudio project के साथ काम कर रहा हूं, और मैं अपने प्रोजेक्ट के लिए निर्भर पैकेजों के स्रोत की स्थानीय प्रतिलिपि रखने के लिए पैक्रेट का उपयोग कर रहा हूं ।ट्रेविस-सीआई

प्रत्येक बार जब मैं प्रतिबद्ध करता हूं तो मुझे Travis-CI checking my R package मिल गया है, लेकिन हर बार ट्रैविस मेरा पैकेज बनाता है, यह मेरे packrat/ निर्देशिका में प्राप्त संस्करणों के बजाय निर्भर पैकेज का नवीनतम संस्करण प्राप्त करता है।

मैं richfitz/wood वह प्रतीत होता है कि उसकी .travis.yml फ़ाइल में इस के साथ इस लक्ष्य को हासिल किया है करने के लिए देख सकते हैं:

env: 
USE_PACKRAT=1 

और एक काफी जटिल make/packrat.mk फ़ाइल जो यह सब काम करता है।

मेरा प्रश्न यह है कि मेरी परियोजना को कॉन्फ़िगर करने का सबसे आसान तरीका क्या है (उदा। मेरी .travis.yml फ़ाइल) ट्रैविस मशीन को ग्रिबब पर packrat/ निर्देशिका से संकुल प्राप्त करने के लिए, और सीआरएएन से नहीं?

उत्तर

6

ज्यादा परीक्षण और त्रुटि और आगे पढ़ने के बाद, ऐसा लगता है कि इस यह करना होगा, एक .travis.yml फ़ाइल इस तरह के साथ:

# R for travis: see documentation at https://docs.travis-ci.com/user/languages/r 

language: R 
sudo: false 
cache: packages 
install: 
    - R -e "0" --args --bootstrap-packrat 
warnings_are_errors: false 

ऊपर फ़ाइल में महत्वपूर्ण पंक्तियां हैं:

install: 
    - R -e "0" --args --bootstrap-packrat 

यह आर शुरू करेगा, और स्थानीय पैकेज्रेट निर्देशिका में आर पैकेज बनाता है ताकि वे ट्रैविस मशीन में उपलब्ध हों।

उसके बाद, ट्रैविस जारी रहेगा और पैकेज बनाने का प्रयास करेगा, और निर्भरता प्राप्त करने के लिए संपर्क सीआरएएन की आवश्यकता नहीं होगी क्योंकि वे पहले से ही उपलब्ध हैं (माना जाता है कि पैक्रेट अपेक्षित काम कर रहा है)।

मैंने इस चाल को यहां खोजा: https://travis-ci.org/ChowHub/paper-pattern-similarity/builds/127262823 और https://github.com/rstudio/packrat/issues/158 पर। मुझे यह यहां काम कर रहा है: https://travis-ci.org/benmarwick/mjbtramp/builds/157747326

लाभ इसका लाभ यह है कि हम उसी पैकेज के साथ ट्रैविस पर निर्माण कर सकते हैं जिसे हम स्थानीय रूप से उपयोग कर रहे हैं। जब हम ट्रैविस पर निर्माण करते हैं तो हमें सीआरएएन से नवीनतम पैकेज प्राप्त करने की ज़रूरत नहीं है, अब हमारे पास पैकेज के संस्करणों का अधिक नियंत्रण हो सकता है जो ट्रैविस हमारे प्रोजेक्ट में बनाता है।

नुकसान यह है कि ट्रैविस पर निर्माण का समय काफी बढ़ गया है। पैट्रेट में स्विच करने के बाद मेरी परियोजनाओं में से एक 2-3 मिनट से 13-15 मिनट तक चला गया।


अद्यतन नीचे नोम के सवाल के बाद और Jim's comment, ऐसा लगता है हम packrat संकुल cache: इस तरह का उपयोग कर कैश कर सकते: काफी बार

# R for travis: see documentation at https://docs.travis-ci.com/user/languages/r 

language: R 
sudo: false 
cache: 
    directories: $TRAVIS_BUILD_DIR/packrat/ 
    packages: true 
install: 
    - R -e "0" --args --bootstrap-packrat 
warnings_are_errors: false 

अपने उपयोग-मामले में, यह कम हो गया है, 1-2 मिनट तक वापस।

+0

क्या यह लंबा निर्माण समय बनी रहती है? या पहले निर्माण के बाद कैश किए गए पैकेज हैं? –

+0

अच्छा सवाल, हाँ, ऐसा लगता है कि पैकर का उपयोग करते समय समय स्थिर और उच्च होता है। यहां मेरे उपयोग-मामले निर्माण सारांश हैं: https://travis-ci.org/benmarwick/mjbtramp/builds, [एक निर्माण जहां मैंने पैट्रेट बंद कर दिया] [https: // travis-ci।संगठन/बेंमारविक/एमजेबीट्रैम्प/बिल्ड/157751062) विशेष रूप से यह देखने के लिए कि समय 2 मिनट से कम समय में आता है, बाकी के साथ, पैट्रेट का उपयोग करके, 13-18 मिनट। पैकेट से बने कैशिंग पैकेज शायद मदद करेंगे! – Ben

+1

कैशिंग संभव है! मैंने यह दिखाने के लिए अपना जवाब अपडेट किया है कि – Ben