2016-02-16 10 views
7

मैं एक एंड्रॉइड प्रोजेक्ट के लिए सर्किल सीआई बिल्ड स्थापित कर रहा हूं, और सोच रहा हूं कि gradle.properties फ़ाइल को मेरे प्रोजेक्ट बिल्ड में कैसे जोड़ना है। मैं अपनी एपीआई कुंजी और संवेदनशील डेटा स्टोर करने के लिए स्थानीय gradle.properties का उपयोग करता हूं। अन्य सीआई उपकरण (यानी, जेनकींस) आपको सभी बिल्डों में उपयोग करने के लिए gradle.properties फ़ाइल अपलोड करने की अनुमति देता है, लेकिन मैं सर्किल सीआई में ऐसा करने का कोई तरीका नहीं ढूंढ पा रहा हूं।मंडल सीआई संदर्भ gradle.properties प्रमाण पत्र कर सकते हैं?

ऐसा लगता है कि पर्यावरण चर एकमात्र तरीका है सर्कल सीआई आपको अपनी परियोजना में गुप्त प्रमाण-पत्र जोड़ने की अनुमति देता है।

सर्कल सीआई बिल्ड पर gradle.properties से प्रमाण पत्र का उपयोग करने का कोई तरीका है?

उत्तर

11

मुझे सर्किल सीआई के माध्यम से gradle.properties पर क्रेडेंशियल्स/एपीआई कुंजी जोड़ने का कोई तरीका मिला है। यह एंड्रॉइड प्रोजेक्ट को gradle.properties को स्थानीय और CircleCI बिल्ड के लिए क्रेडेंशियल्स के संदर्भ में संदर्भित करने की अनुमति देता है।

पहला कदम, अपने सर्किल सीआई परियोजना सेटिंग्स में पर्यावरण चर के रूप में अपने क्रेडेंशियल स्टोर करें, जिन्हें निजी होने की गारंटी है। सर्किल सीआई जीयूआई में, अपनी प्रोजेक्ट पर जाएं, फिर ऊपरी दाएं कोने में "प्रोजेक्ट सेटिंग्स" का चयन करें। बाईं तरफ के मेनू में "पर्यावरण चर" पर क्लिक करें जो "ट्वीक्स" हेडर के नीचे है। यहां आप अपने क्रेडेंशियल्स को नाम मूल्य जोड़ी के रूप में जोड़ सकते हैं।

अगला, अपने एंड्रॉइड प्रोजेक्ट में एक बैश स्क्रिप्ट बनाएं जो आपके सर्किल सीआई पर्यावरण चर को स्थानीय gradle.properties फ़ाइल में लिख देगा। मैंने ऐसी लिपि और posted it here as gist लिखा है।

function copyEnvVarsToGradleProperties { 
    GRADLE_PROPERTIES=$HOME"/.gradle/gradle.properties" 
    export GRADLE_PROPERTIES 
    echo "Gradle Properties should exist at $GRADLE_PROPERTIES" 

    if [ ! -f "$GRADLE_PROPERTIES" ]; then 
     echo "Gradle Properties does not exist" 

     echo "Creating Gradle Properties file..." 
     touch $GRADLE_PROPERTIES 

     echo "Writing TEST_API_KEY to gradle.properties..." 
     echo "TEST_API_KEY=$TEST_API_KEY_ENV_VAR" >> $GRADLE_PROPERTIES 
    fi 
} 

यह स्क्रिप्ट केवल एक सर्किल सीआई निर्माण के दौरान कहा जाता है, और नहीं स्थानीय बनाता दौरान: यहाँ विधि है जो काम करता है। , अपने circle.yml फ़ाइल में एक पूर्व प्रक्रिया निर्भरता के रूप में इस स्क्रिप्ट आह्वान ताकि आपके gradle.properties वास्तविक Gradle निर्माण से पहले लिखा है शुरू होता है:

dependencies: 
    pre: 
     - source environmentSetup.sh && copyEnvVarsToGradleProperties 

आप आप के रूप में सिर्फ build.gradle में एपीआई कुंजी का उपयोग करने के लिए जारी रहेगा हमेशा:

buildConfigField("String", "THIS_TEST_API_KEY", "\"" + TEST_API_KEY + "\"")

+0

थेरेस कोई रास्ता नहीं gradle.properties बजाय env चर से गुण पढ़ने के लिए? क्योंकि यदि आपको एक वेरिएबल को जोड़ने या निकालने की ज़रूरत है तो बहुत सी चीजें संपादित होती हैं ... – Caipivara

+4

अच्छा समाधान! छूने से पहले मुझे 'mkdir ~/.gradle -p' जोड़ना पड़ा क्योंकि वे अभी भी' .gradle' निर्देशिका नहीं बनाते हैं। – WindRider

+0

मैं इस https://gist.github.com/danielgomezrico/461bf74a24dd5efd28abef1bebc0f05d – Caipivara

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