Добавление глобального пароля в Jenkins с помощью init.groovy

Как я могу добавить глобальные пароли в Jenkins через init.groovy, который запускается при запуске?

Чтобы было ясно, на странице Manage Jenkins -> Configure Jenkins есть раздел под названием «Глобальные пароли». Я хотел бы добавить записи в этот раздел с помощью кода Groovy во время запуска Jenkins.

Я пытаюсь подготовить свою среду jenkins с помощью заводного кода, используя 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