ग्रैडल कॉन्फ़िगरेशन (यानी क्रेडेंशियल) कहां रखा जाना चाहिए जो प्रतिबद्ध नहीं होना चाहिए?


155

मैं एक मावेल रेपो के लिए ग्रैडल-निर्मित कलाकृतियों को तैनात करने की कोशिश कर रहा हूं, और मुझे इसके लिए क्रेडेंशियल्स निर्दिष्ट करने की आवश्यकता है। यह अब के लिए ठीक काम करता है:

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "http://.../nexus/content/repositories/snapshots/") {
                authentication(userName: "admin", password: "admin123")
            }
        }
    }
}

लेकिन मुझे स्रोत नियंत्रण में क्रेडेंशियल्स स्टोर करना पसंद नहीं है। मावेन के साथ, मैं एक सर्वर कॉन्फ़िगरेशन को परिभाषित करता हूं, और अपने में क्रेडेंशियल असाइन करता हूं ~/.m2/settings.xml। मैं ग्रैडल के साथ कुछ ऐसा कैसे करूं?


3
आपको पता है कि admin123 को पासवर्ड के रूप में उपयोग करना सुरक्षा दृष्टिकोण से बुरा है;)
jwatkins

जवाबों:


228

~ / .gradle / gradle.properties :

mavenUser=admin
mavenPassword=admin123

build.gradle :

...
authentication(userName: mavenUser, password: mavenPassword)

2
gradle.propertiesमें जाँच नहीं की जानी चाहिए VCS?
दिबांग

24
ग्रैडल उपयोगकर्ता के घर में कोई नहीं है (ऊपर पथ देखें)।
पीटर निडरविसेर

Gradles के कुछ संस्करणों के लिए ... mavenPass के बजाय mavenPassword का उपयोग करें
रोड्रिगो

2
मैं प्रमाणीकरण के रूप में पास परियोजना के गुणों की सलाह देता हूं (userName: project.properties.mavenUser, पासवर्ड: project.properties.mavenPassword) यह कोई निर्माण विफल नहीं होगा जब कोई गुण mavenUser / पासवर्ड निर्दिष्ट नहीं किए जाते हैं।
दिमित्री

मुझे ऐसा ही करना था लेकिन 2 अलग-अलग पर्यावरण चर का उपयोग करने के लिए: SONATYPE_NEXUS_USERNAME & SONATYPE_NEXUS_PASSWORD
Snicolas

94

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

इस विधि authentication()का उपयोग केवल प्रमाणीकरण विधि (जैसे मूल) प्रदान करने के लिए किया जाता है, लेकिन कोई प्रमाणिकता नहीं।

तुम भी इसका इस्तेमाल नहीं करना चाहिए , क्योंकि यह विफलता पर सादे साख मुद्रण रहा है!

यह उसका है कि यह आपके जैसा कैसे दिखना चाहिए build.gradle

    maven {
        credentials {
            username "$mavenUser"
            password "$mavenPassword"
        }
        url 'https://maven.yourcorp.net/'
   }

में gradle.propertiesअपने userhome dir पुट में:

mavenUser=admin
mavenPassword=admin123

यह भी सुनिश्चित करें कि वहाँ GRADLE_USER_HOMEसेट है ~/.gradleअन्यथा गुण फ़ाइल वहाँ हल नहीं होगी।

यह सभी देखें:

https://docs.gradle.org/current/userguide/build_environment.html

तथा

https://docs.gradle.org/current/userguide/d dependency_management.html (23.6.4.1)


क्या आप यह स्पष्ट कर सकते हैं कि इसका उपयोग ओपी द्वारा कैसे किया जाएगा? यानी यह नामस्थान अपलोड में कहाँ बैठेगा। अभिलेखागार {रिपॉजिटरी {मावेनडिप्लोअर {
मैट सी

क्षमा करें, लेकिन मैं अपने प्रश्न न हो
प्रश्नावली

4
OP नाम अपलोड अपलोड के भीतर प्रमाणीकरण का उपयोग करता है। अभिलेखागार> रिपॉजिटरी> मावेनडेप्लोअर> रिपॉजिटरी> प्रमाणीकरण। वे अभी भी अपलोड का उपयोग करना चाहते हैं। मैं जो मान लेता हूं, तो आपके समाधान के साथ ओपी का बिल्ड कॉन्फ़िगरेशन कैसे लागू होगा? क्या उन्हें प्रमाणीकरण हटाने की आवश्यकता है, और यह काम करेगा?
मैट सी

वास्तव में मैं आपको बता नहीं सकता क्योंकि मैंने कभी भी mavenDeployer नाम स्थान का उपयोग नहीं किया था। Uploadarchives अभी भी एक वैध कार्य है लेकिन उस कार्य के लिए क्रेडेंशियल मावेन नेमस्पेस में कॉन्फ़िगर किए गए हैं।
प्रश्नावली

यह उत्तर प्रश्न से असंगत है। यह maven-publishप्लगइन का उपयोग कर रहा है जबकि सवाल mavenप्लगइन का उपयोग कर रहा है ।
चेंज

16

आप कमांड लाइन पर चर भी दे सकते हैं -PmavenUser=user -PmavenPassword=password

यह उपयोगी हो सकता है आप किसी कारण के लिए gradle.properties फ़ाइल का उपयोग नहीं कर सकते। जैसे कि एक बिल्ड सर्वर पर हम ग्रेड के साथ -gविकल्प का उपयोग कर रहे हैं ताकि प्रत्येक बिल्ड प्लान के पास अपना हो GRADLE_HOME


16

यदि आपके पास उपयोगकर्ता विशिष्ट क्रेडेंशियल हैं (अर्थात प्रत्येक डेवलपर के पास अलग-अलग उपयोगकर्ता नाम / पासवर्ड हो सकते हैं) तो मैं वर्गीकृत-गुण-प्लगइन का उपयोग करने की सलाह दूंगा

  1. में चूक रखो gradle.properties
  2. प्रत्येक डेवलपर के साथ ओवरराइड होता है gradle-local.properties(इसे अनदेखा किया जाना चाहिए)।

यह ओवरराइड करने से बेहतर है $USER_HOME/.gradle/gradle.propertiesक्योंकि विभिन्न परियोजनाओं में समान संपत्ति के नाम हो सकते हैं।


क्या आप एक पूर्ण कार्य करने वाला MWE जोड़ सकते हैं। प्लगइन को कैसे शामिल करें build.gradleuploadArchivesकॉन्फ़िगरेशन में क्रेडेंशियल्स का उपयोग कैसे करें ?
कोपर

@koppor सुनिश्चित नहीं है कि यह अभी भी काम करता है, लेकिन मैंने इसे अपने ओपन सोर्स प्रोजेक्ट में उपयोग किया है - github.com/krishnaraj/oneclipboard/blob/master/build.gradle
कृष्णराज

7

आप गुण फ़ाइल में क्रेडेंशियल्स डाल सकते हैं और इसे कुछ इस तरह से पढ़ सकते हैं:

Properties props = new Properties() 
props.load(new FileInputStream("yourPath/credentials.properties")) 
project.setProperty('props', props)

एक और तरीका यह है कि ओएस स्तर पर पर्यावरण चर को परिभाषित करें और उनका उपयोग करके पढ़ें:

System.getenv()['YOUR_ENV_VARIABLE']

2

आप में से जो एक MacOS पर निर्माण कर रहे हैं, और अपने मशीन पर स्पष्ट पाठ में अपना पासवर्ड छोड़ना पसंद नहीं करते हैं, आप क्रेडेंशियल्स को संग्रहीत करने के लिए किचेन टूल का उपयोग कर सकते हैं और फिर इसे बिल्ड में इंजेक्ट कर सकते हैं। क्रेडिट विक्टर एरिकसन को जाता है। https://pilloxa.gitlab.io/posts/safer-passwords-in-gradle/

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