2017-06-06 45 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。 –