จะใส่การกำหนดค่า Gradle ได้อย่างไร (เช่นข้อมูลรับรอง) ที่ไม่ควรส่งมอบ?


155

ฉันกำลังพยายามปรับใช้สิ่งประดิษฐ์ที่สร้างโดย Gradle กับ repo Maven และฉันต้องระบุข้อมูลรับรองสำหรับสิ่งนั้น ใช้งานได้ดีในตอนนี้:

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

แต่ฉันไม่ต้องการเก็บข้อมูลประจำตัวในการควบคุมแหล่งที่มา ด้วย Maven ~/.m2/settings.xmlผมจะกำหนดค่าเซิร์ฟเวอร์และข้อมูลประจำตัวที่กำหนดในของฉัน ฉันจะทำสิ่งที่คล้ายกับ Gradle ได้อย่างไร


3
คุณรู้ว่าการใช้ admin123 เป็นรหัสผ่านไม่ถูกต้องจากมุมมองด้านความปลอดภัยใช่
ไหม

คำตอบ:


228

~ / .gradle / gradle.properties :

mavenUser=admin
mavenPassword=admin123

build.gradle :

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

2
gradle.propertiesไม่ควรเช็คอินVCSใช่หรือไม่
theblang

24
ไม่ใช่หนึ่งในบ้านผู้ใช้ Gradle (ดูเส้นทางด้านบน)
Peter Niederwieser

สำหรับบางระดับของ gradles ... ใช้ mavenPass แทน mavenPassword
Rodrigo

2
ฉันแนะนำให้ผ่านคุณสมบัติของโครงการดังต่อไปนี้การรับรองความถูกต้อง (ชื่อผู้ใช้: project.properties.mavenUser, รหัสผ่าน: project.properties.mavenPassword) สิ่งนี้จะไม่ล้มเหลวในการสร้างเมื่อไม่มีการระบุคุณสมบัติ mavenUser / รหัสผ่าน
Dmitry

ฉันต้องทำแบบเดียวกัน แต่ต้องใช้ตัวแปรสภาพแวดล้อม 2 แบบ: SONATYPE_NEXUS_USERNAME & SONATYPE_NEXUS_PASSWORD
Snicolas

94

คำตอบแรกยังใช้ได้ แต่ API มีการเปลี่ยนแปลงในอดีต เนื่องจากการแก้ไขของฉันไม่ยอมรับฉันจึงโพสต์เป็นคำตอบแยกต่างหาก

วิธีauthentication()นี้ใช้เพื่อจัดเตรียมวิธีการรับรองความถูกต้อง (เช่นพื้นฐาน) แต่ไม่ใช่ข้อมูลรับรองใด ๆ

คุณไม่ควรใช้มันเพราะมันพิมพ์ข้อมูลประจำตัวธรรมดาเมื่อล้มเหลว!

นี่มันควรเป็นอย่างไรในคุณ build.gradle

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

ใส่ในgradle.propertiesuserhome ของคุณใส่:

mavenUser=admin
mavenPassword=admin123

ตรวจสอบให้แน่ใจด้วยว่าGRADLE_USER_HOMEตั้งค่าเป็น~/.gradleมิฉะนั้นไฟล์คุณสมบัติที่นั่นจะไม่ได้รับการแก้ไข

ดูสิ่งนี้ด้วย:

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

และ

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


คุณช่วยอธิบายได้ไหมว่า OP นี้จะใช้อย่างไร? เช่นที่จะนั่งใน namespace uploadArchives {repositories {mavenDeployer {
Matt C

ขออภัยฉันไม่ได้รับคำถามของคุณ
ตอบแบบสอบถาม

4
OP ใช้การตรวจสอบภายในเนมสเปซ uploadArchives> ที่เก็บ> mavenDeployer> พื้นที่เก็บข้อมูล> การรับรองความถูกต้อง พวกเขายังคงต้องการใช้ uploadArchives ที่ฉันคิดเอาไว้ดังนั้นการกำหนดค่าบิลด์ของ OP จะดูอย่างไรเมื่อใช้โซลูชันของคุณ พวกเขาจำเป็นต้องลบการรับรองความถูกต้องและจะใช้งานได้หรือไม่
Matt C

ที่จริงฉันไม่สามารถบอกคุณได้ตั้งแต่ฉันไม่เคยใช้เนมสเปซ mavenDeployer Uploadarchives ยังคงเป็นงานที่ถูกต้อง แต่ข้อมูลประจำตัวสำหรับงานนั้นจะถูกกำหนดค่าภายในเนมสเปซ maven
ตอบแบบสอบถาม

คำตอบนี้ไม่สอดคล้องกับคำถาม มันใช้maven-publishปลั๊กอินในขณะที่คำถามใช้mavenปลั๊กอิน
Chry Cheng

16

-PmavenUser=user -PmavenPassword=passwordนอกจากนี้คุณยังสามารถจัดหาตัวแปรในบรรทัดคำสั่งด้วย

สิ่งนี้อาจมีประโยชน์คุณไม่สามารถใช้ไฟล์ gradle.properties ได้ด้วยเหตุผลบางประการ เช่นในการสร้างเซิร์ฟเวอร์ที่เรากำลังใช้ Gradle กับตัวเลือกเพื่อให้แต่ละสร้างแผนมีเป็นของตัวเอง-gGRADLE_HOME


16

หากคุณมีข้อมูลประจำตัวของผู้ใช้ที่เฉพาะเจาะจง (เช่นนักพัฒนาแต่ละคนอาจจะมีความแตกต่างกันชื่อผู้ใช้ / รหัสผ่าน) แล้วฉันจะแนะนำให้ใช้gradle-คุณสมบัติปลั๊กอิน

  1. ใส่ค่าเริ่มต้นใน gradle.properties
  2. ผู้พัฒนาแต่ละคนจะแทนที่ด้วยgradle-local.properties(ควรละเว้นคอมไพล์)

สิ่งนี้ดีกว่าการใช้$USER_HOME/.gradle/gradle.propertiesเพราะโครงการต่าง ๆ อาจมีชื่อคุณสมบัติเดียวกัน


คุณช่วยเพิ่ม MWE ที่ใช้งานได้อย่างสมบูรณ์ วิธีรวมปลั๊กอินเข้าbuild.gradleด้วยกัน จะใช้ข้อมูลรับรองในการกำหนดค่าได้uploadArchivesอย่างไร
koppor

@ koppor ไม่แน่ใจว่ายังใช้งานได้หรือไม่ แต่ฉันใช้ในโครงการโอเพ่นซอร์สของฉัน - github.com/krishnaraj/oneclipboard/blob/master/build.gradle
Krishnaraj

7

คุณสามารถใส่ข้อมูลประจำตัวในไฟล์คุณสมบัติและอ่านโดยใช้สิ่งนี้:

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

อีกวิธีหนึ่งคือการกำหนดตัวแปรสภาพแวดล้อมในระดับระบบปฏิบัติการและอ่านโดยใช้:

System.getenv()['YOUR_ENV_VARIABLE']

2

สำหรับบรรดาของคุณที่กำลังสร้างบน MacOS และไม่ต้องการทิ้งรหัสผ่านของคุณในข้อความที่ชัดเจนบนเครื่องของคุณคุณสามารถใช้เครื่องมือพวงกุญแจเพื่อเก็บข้อมูลประจำตัวแล้วฉีดเข้าไปในงานสร้าง เครดิตไปที่ Viktor Eriksson https://pilloxa.gitlab.io/posts/safer-passwords-in-gradle/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.