การเพิ่มรหัสผ่านสากลให้กับ Jenkins ด้วย init.groovy

ฉันจะเพิ่มรหัสผ่านส่วนกลางให้กับ Jenkins ผ่าน init.groovy ที่ทำงานเมื่อเริ่มต้นได้อย่างไร

เพื่อให้ชัดเจน ในหน้าจัดการเจนกินส์ -> กำหนดค่าเจนกินส์ มีส่วนชื่อ "รหัสผ่านสากล" ฉันต้องการเพิ่มรายการในส่วนนั้นผ่านโค้ด Groovy ระหว่างการเริ่มต้นของ Jenkins

ฉันกำลังพยายามจัดเตรียมสภาพแวดล้อมเจนกินส์ของฉันผ่านโค้ด Groovy โดยใช้ init เยี่ยมมาก. ฉันต้องเพิ่มรหัสผ่านส่วนกลางผ่าน ปลั๊กอิน EnvInject ฉันสามารถเพิ่มเส้นทางไปยังไฟล์สำหรับปลั๊กอินเดียวกันได้สำเร็จโดยใช้รหัสนี้:

def instance = Jenkins.getInstance()


DescribableList<NodeProperty<?>, NodePropertyDescriptor> globalNodeProperties = 
    instance.getGlobalNodeProperties();

globalNodeProperties.add(
    new EnvInjectNodeProperty(false, "/var/lib/jenkins/secret.properties")
);

อย่างไรก็ตาม ฉันไม่เข้าใจกลไกที่จำเป็นในการเพิ่มรหัสผ่านส่วนกลางโดยทางโปรแกรม


person Victor 'Chris' Cabral    schedule 06.06.2017    source แหล่งที่มา


คำตอบ (2)


นี่คือตัวอย่างโค้ดที่ควรใช้งานได้ ดูเหมือนว่าเมธอด save() จะเพิ่มลงใน GlobalNodeProperties ด้วย ดังนั้นคุณไม่จำเป็นต้องเพิ่มลงในคอลเลกชันนั้นด้วยตนเอง

import jenkins.model.*
import hudson.util.*
import hudson.slaves.NodeProperty
import hudson.slaves.NodePropertyDescriptor
import org.jenkinsci.plugins.envinject.*


def instance = Jenkins.getInstance()


DescribableList<NodeProperty<?>, NodePropertyDescriptor> globalNodeProperties 
                 = instance.getGlobalNodeProperties();

envInjectNodeProperty= new EnvInjectNodeProperty(false, "/var/lib/jenkins/secret.properties" 
propDescriptor = envInjectNodeProperty.getDescriptor()

//password entry
def passEntry = new EnvInjectGlobalPasswordEntry("some_username", "password")
//password entries list, add you global password here
List<EnvInjectGlobalPasswordEntry> envInjectGlobalPasswordEntriesList= [passEntry];
propDescriptor.envInjectGlobalPasswordEntries = 
          envInjectGlobalPasswordEntriesList.toArray(
          new EnvInjectGlobalPasswordEntry[envInjectGlobalPasswordEntriesList.size()]
         );
propDescriptor.save();
person imuchnik    schedule 07.06.2017
comment
คำตอบที่ดี :+1: - person chrx; 14.09.2017

https://github.com/jenkinsci/envinject-plugin/tree/master/src/main/java/org/jenkinsci/plugins/envinject

ฉันไม่ได้ลองใช้ปลั๊กอินนี้ แต่มีคลาส : EnvInjectGlobalPasswordEntry

ฉันเดาว่ามันอาจเป็นเช่นนี้:

globalNodeProperties.add(
    new EnvInjectGlobalPasswordEntry("pass-name", "the-password")
);
person daggett    schedule 07.06.2017
comment
ดูเหมือนว่า EnvInjectGlobalPasswordEntry จะเป็นวัตถุที่ถูกต้อง แต่การเพิ่มลงใน globalNodeProperties ไม่ทำงาน โดยจะสร้างบันทึกภายใน config.xml และแทนที่จะเป็น envInject.xml - person Victor 'Chris' Cabral; 07.06.2017