使用init.groovy将全局密码添加到Jenkins

时间:2017-06-06 19:25:52

标签: jenkins groovy jenkins-plugins jenkins-api

如何通过启动时运行的init.groovy向Jenkins添加全局密码?

要明确,在Manage Jenkins中 - >配置Jenkins页面,有一个标题为“全局密码”的部分。我希望在Jenkins启动期间通过Groovy代码添加该部分中的条目。

我正在尝试使用init.groovy通过groovy代码来配置我的jenkins环境。我需要通过EnvInject plugin添加全局密码。我可以使用以下代码成功为同一插件添加路径:

def instance = Jenkins.getInstance()


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

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

但是,我无法理解以编程方式添加全局密码所需的机制。

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

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

我没有尝试过此插件,但有一个类:EnvInjectGlobalPasswordEntry

我猜它可能是这样的:

globalNodeProperties.add(
    new EnvInjectGlobalPasswordEntry("pass-name", "the-password")
);