2017-06-06 28 views
0

如何通过在启动时运行的init.groovy向Jenkins添加全局密码?使用init.groovy向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

下面是代码示例,应该工作。看来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(); 
+0

很棒的回答。 :+1: – chrx

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") 
); 
+0

EnvInjectGlobalPasswordEntry看起来像是正确的对象,但将它添加到globalNodeProperties不起作用。它在config.xml中创建一个记录,而不是envInject.xml。 –