Menambahkan Kata Sandi Global ke Jenkins dengan init.groovy

Bagaimana cara menambahkan kata sandi global ke Jenkins melalui init.groovy yang berjalan saat startup?

Supaya lebih jelas, pada halaman Manage Jenkins -> Configure Jenkins, terdapat bagian yang berjudul "Global Passwords". Saya ingin menambahkan entri di bagian itu melalui kode Groovy selama startup Jenkins.

Saya mencoba menyediakan lingkungan jenkins saya melalui kode asyik dengan menggunakan init. asyik. Saya perlu menambahkan kata sandi global melalui plugin EnvInject. Saya berhasil menambahkan jalur ke file untuk plugin yang sama menggunakan kode ini:

def instance = Jenkins.getInstance()


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

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

Namun, saya gagal memahami mekanisme yang diperlukan untuk menambahkan kata sandi global secara terprogram.


person Victor 'Chris' Cabral    schedule 06.06.2017    source sumber


Jawaban (2)


Berikut adalah contoh kode yang seharusnya berfungsi. Tampaknya metode save() juga menambahkannya ke GlobalNodeProperties, jadi Anda tidak perlu menambahkan koleksi itu secara manual.

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
Jawaban yang bagus. :+1: - person chrx; 14.09.2017

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

Saya tidak mencoba plugin ini, tetapi ada kelasnya : EnvInjectGlobalPasswordEntry

menurutku bisa jadi seperti ini:

globalNodeProperties.add(
    new EnvInjectGlobalPasswordEntry("pass-name", "the-password")
);
person daggett    schedule 07.06.2017
comment
EnvInjectGlobalPasswordEntry sepertinya objek yang tepat tetapi menambahkannya ke globalNodeProperties tidak berhasil. Ini membuat catatan di dalam config.xml dan bukannya envInject.xml. - person Victor 'Chris' Cabral; 07.06.2017