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

Adding Global Password to Jenkins with init.groovy

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

明确地说,在“管理 Jenkins”->“配置 Jenkins”页面中,有一个标题为 "Global Passwords" 的部分。我想在 Jenkins 启动期间通过 Groovy 代码在该部分中添加条目。

我正在尝试使用 init.groovy. I need to add global passwords through the EnvInject plugin 通过 groovy 代码配置我的 jenkins 环境。我可以使用以下代码成功地将路径添加到同一插件的文件中:

def instance = Jenkins.getInstance()


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

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

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

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

我没试过这个插件,但是有一个 class : EnvInjectGlobalPasswordEntry

我想可能是这样的:

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

下面是应该有效的代码示例。似乎 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();