Jenkins:使用Groovy配置ActiveDirectorySecurityRealm插件

Jenkins:使用Groovy配置ActiveDirectorySecurityRealm插件,jenkins,groovy,jenkins-plugins,Jenkins,Groovy,Jenkins Plugins,我目前正在花一些时间使用Jenkins AD SecurityRealm()插件(v2.6)设置一个通用配置,但遇到了一个棘手的问题:我的(自动)设置有效广告连接的方法(遵循相应的)似乎根本不起作用。每次我重新初始化Jenkins实例时,都会提供一个不完整的config.xml文件-始终缺少“bindName”属性(xml节点)。此属性是我将使用的ad服务器所必需的,因此我必须手动重写配置以解决此问题 我一点也不知道为什么这种情况还会发生 我的groovy代码(节选) 我的config.xml结

我目前正在花一些时间使用Jenkins AD SecurityRealm()插件(v2.6)设置一个通用配置,但遇到了一个棘手的问题:我的(自动)设置有效广告连接的方法(遵循相应的)似乎根本不起作用。每次我重新初始化Jenkins实例时,都会提供一个不完整的config.xml文件-始终缺少“bindName”属性(xml节点)。此属性是我将使用的ad服务器所必需的,因此我必须手动重写配置以解决此问题

我一点也不知道为什么这种情况还会发生

我的groovy代码(节选)

我的config.xml结果(摘录)


my-primary-ad-server-running.acme.org
我的主广告服务器运行.acme.org:3268
{#######-奇妙的加密超级密码,没有人能再解密了-####
真的
自动的
假的
信任所有证书
需要my config.xml(节选)


my-primary-ad-server-running.acme.org
我的主广告服务器运行.acme.org:3268
广告绑定用户
{#######-奇妙的加密超级密码,没有人能再解密了-####
真的
自动的
假的
信任所有证书

如果查看源代码,您将看到
bindName
标记为transient,因此它不会作为配置XML的一部分持久化


获得所需config.xml的唯一解决方案是通过提供自定义静态config.xml而不是使用init脚本来强制使用config.xml。

我能够通过在末尾添加以下代码来解决这个问题(在2.6和2.8上测试)。您还需要确保您的凭据有效,因为插件正在进行初始连接检查

谢谢@kosta。 下面的脚本也可以使用active directory 2.10和jenkins 2.150.1 这还包括站点信息

import hudson.plugins.active_directory.ActiveDirectoryDomain
import hudson.plugins.active_directory.ActiveDirectorySecurityRealm
import hudson.plugins.active_directory.GroupLookupStrategy

String _domain = 'dev.test.com'
String _site = 'HQ'
String _bindName = 'dev\jenkins'
String _bindPassword = 'test'
String _server = 'dev.test.com:2328'

def hudsonActiveDirectoryRealm = new ActiveDirectorySecurityRealm(_domain, _site, _bindName, _bindPassword, _server)
hudsonActiveDirectoryRealm.getDomains().each({
    it.bindName = hudsonActiveDirectoryRealm.bindName
    it.bindPassword = hudsonActiveDirectoryRealm.bindPassword
    it.site = hudsonActiveDirectoryRealm.site
})
def instance = Jenkins.getInstance()
instance.setSecurityRealm(hudsonActiveDirectoryRealm)
instance.save()

检查此屏幕截图:

我以前尝试过使用静态xml,但每次我的jenkins再次初始化时,此文件都会被修改-因此我是否应该在此时阻止使用(所有)初始化脚本?除了我的active directory安装程序之外,我还使用了一些。我已经更新了我的jenkins启动过程(删除了所有groovy init脚本),现在使用的是static config.xml。。。现在一切都很好:)@PatrickPaechnatz-你如何以Jenkins可以接受的方式对bindpassword进行加密,并且在重新启动时不会被覆盖(从而修改文件并破坏not_if)?
<securityRealm class="hudson.plugins.active_directory.ActiveDirectorySecurityRealm" plugin="active-directory@2.6">
    <domains>
      <hudson.plugins.active__directory.ActiveDirectoryDomain>
        <name>my-primary-ad-server-running.acme.org</name>
        <servers>my-primary-ad-server-running.acme.org:3268</servers>
        <bindPassword>{###-fancy-crypted-super-password-nobody-can-decrypt-anymore-###}</bindPassword>
      </hudson.plugins.active__directory.ActiveDirectoryDomain>
    </domains>
    <startTls>true</startTls>
    <groupLookupStrategy>AUTO</groupLookupStrategy>
    <removeIrrelevantGroups>false</removeIrrelevantGroups>
    <tlsConfiguration>TRUST_ALL_CERTIFICATES</tlsConfiguration>
</securityRealm>
<securityRealm class="hudson.plugins.active_directory.ActiveDirectorySecurityRealm" plugin="active-directory@2.6">
    <domains>
      <hudson.plugins.active__directory.ActiveDirectoryDomain>
        <name>my-primary-ad-server-running.acme.org</name>
        <servers>my-primary-ad-server-running.acme.org:3268</servers>
        <bindName>ad-bind-user</bindName>
        <bindPassword>{###-fancy-crypted-super-password-nobody-can-decrypt-anymore-###}</bindPassword>
      </hudson.plugins.active__directory.ActiveDirectoryDomain>
    </domains>
    <startTls>true</startTls>
    <groupLookupStrategy>AUTO</groupLookupStrategy>
    <removeIrrelevantGroups>false</removeIrrelevantGroups>
    <tlsConfiguration>TRUST_ALL_CERTIFICATES</tlsConfiguration>
</securityRealm>
hudsonActiveDirectoryRealm.getDomains().each({
    it.bindName = hudsonActiveDirectoryRealm.bindName
    it.bindPassword = hudsonActiveDirectoryRealm.bindPassword
})
instance.setSecurityRealm(hudsonActiveDirectoryRealm)
instance.save()
import hudson.plugins.active_directory.ActiveDirectoryDomain
import hudson.plugins.active_directory.ActiveDirectorySecurityRealm
import hudson.plugins.active_directory.GroupLookupStrategy

String _domain = 'dev.test.com'
String _site = 'HQ'
String _bindName = 'dev\jenkins'
String _bindPassword = 'test'
String _server = 'dev.test.com:2328'

def hudsonActiveDirectoryRealm = new ActiveDirectorySecurityRealm(_domain, _site, _bindName, _bindPassword, _server)
hudsonActiveDirectoryRealm.getDomains().each({
    it.bindName = hudsonActiveDirectoryRealm.bindName
    it.bindPassword = hudsonActiveDirectoryRealm.bindPassword
    it.site = hudsonActiveDirectoryRealm.site
})
def instance = Jenkins.getInstance()
instance.setSecurityRealm(hudsonActiveDirectoryRealm)
instance.save()