Jenkins active directory找不到匹配的构造函数

Jenkins active directory找不到匹配的构造函数,jenkins,groovy,active-directory,chef-infra,rhel7,Jenkins,Groovy,Active Directory,Chef Infra,Rhel7,注意:我对EnterpriseLinux很在行,但假设我对Jenkins、jars、wars、jpis、java和groovy充其量只是一个勉强的行人。我很抱歉 我在RHEL7上设置了一个詹金斯盒子,主要是通过(公认的腐烂)厨师烹饪书,所以它是可重复的,几乎是傻瓜式的。在添加模块时,我将通过本地文件(安全站点,无网络访问)添加HPI,如下所示: 当我使用HPIs对文件部分进行预处理时,它会填充/var/lib/jenkins/plugins位置,所以我想我已经达到了目的 # ls -l /var

注意:我对EnterpriseLinux很在行,但假设我对Jenkins、jars、wars、jpis、java和groovy充其量只是一个勉强的行人。我很抱歉

我在RHEL7上设置了一个詹金斯盒子,主要是通过(公认的腐烂)厨师烹饪书,所以它是可重复的,几乎是傻瓜式的。在添加模块时,我将通过本地文件(安全站点,无网络访问)添加HPI,如下所示:

当我使用HPIs对文件部分进行预处理时,它会填充/var/lib/jenkins/plugins位置,所以我想我已经达到了目的

# ls -l /var/lib/jenkins/plugins/
total 708
drwxr-xr-x 6 jenkins jenkins     77 Aug 30 08:37 active-directory
-rwxr-xr-x 1 jenkins jenkins 583280 Aug 30 08:37 active-directory.hpi
drwxr-xr-x 4 jenkins jenkins     53 Aug 30 08:37 display-url-api
-rwxr-xr-x 1 jenkins jenkins  19478 Aug 30 08:37 display-url-api.hpi
drwxr-xr-x 4 jenkins jenkins     53 Aug 30 08:37 mailer
-rwxr-xr-x 1 jenkins jenkins 115745 Aug 30 08:37 mailer.hpi
事实上,所有三个插件似乎都在/pluginManager/installed中处于活动状态:

active directory plugin  2.8
Display URL API          2.2.0
Mailer Plugin            1.21
。。两个DEP的复选框被选中并变暗,而广告插件则被选中。这表明它们已安装并激活,但我猜

现在来配置广告插件,我想,这就是今天出现严重错误的地方

这就是我正在使用的脚本(当大脑失去线索时,谷歌是我唯一的朋友):

没有快乐,对吧?以下是最精彩的剪辑:

groovy.lang.GroovyRuntimeException: Could not find matching constructor for: hudson.plugins.active_directory.ActiveDirectorySecurityRealm(java.lang.String, java.util.ArrayList, java.lang.String, java.lang.String, java.lang.String, java.lang.String, hudson.plugins.active_directory.GroupLookupStrategy, java.lang.Boolean, java.lang.Boolean, null)
现在,在我们深入讨论这个问题之前,我想说的是,我也尝试过的其他(实际上是3或4个)脚本,比如Internet van candy,也有类似的构造函数错误。如果需要的话,我可以运行这些程序并显示错误以供比较,但我想建议的是,这似乎是一个更大的问题,我的插件并没有以某种方式加入到它们应该加入的代码中,尽管看起来一切正常。再说一次,还是在猜测

是的,在其他3-4次尝试中,我使用内部自定义数据对脚本进行了调优;这一次,由于士气低落,我甚至都没费心。但是我保证我在其余部分使用了有效的数据,如果我们能够通过构造函数错误,我们的计划是使用真实的值

还有问题,按照非常特殊的顺序:

  • groovy创建该AD配置的已知良好调用是什么?最新的代码库似乎在不断变化
  • 有没有其他人在类似的ish设置中看到groovy构造函数的问题
  • 有什么能让我更接近胜利的提示吗

  • 谢谢你读到这里,我希望你的一天过得很好

    Jenkins中的所有Groovy脚本都是实际Java对象上非常薄的一层,因此要找到正确的构造函数,我们需要查看插件的代码:

    如果我们以第一个构造函数为例:

    ActiveDirectorySecurityRealm(String domain, String site, String bindName, String bindPassword, String server)
    
    你可以这样称呼它:

    def securityRealm = new ActiveDirectorySecurityRealm("Example_Domain_Name_2", null, null, null,  "Example_Domain_Controller_2")
    

    或者类似的东西。

    因此Jenkins中的所有Groovy脚本都是实际Java对象上非常薄的一层,因此要找到正确的构造函数,我们需要查看插件的代码:

    如果我们以第一个构造函数为例:

    ActiveDirectorySecurityRealm(String domain, String site, String bindName, String bindPassword, String server)
    
    你可以这样称呼它:

    def securityRealm = new ActiveDirectorySecurityRealm("Example_Domain_Name_2", null, null, null,  "Example_Domain_Controller_2")
    

    或者类似的东西。

    首先,记得在添加插件后重新启动Jenkins!这似乎是一件需要强调的大事

    按照诺亚的提示,以下是对我有效的方法:

    import hudson.plugins.active_directory.*
    import jenkins.model.*
    
    def instance = Jenkins.getInstance();
    // public ActiveDirectorySecurityRealm(String domain, String site, String bindName, String bindPassword, String server)
    def securityRealm = new ActiveDirectorySecurityRealm(
    'myRealm',
    'Default-First-Site-Name',
    'bindaddr@myRealm,
    'bindpassword_cleartext',
    'ad_server1fqdn,ad_server2fqdn'
    )
    
    securityRealm.getDomains().each({
        it.site = securityRealm.site
        it.bindName = securityRealm.bindName
        it.bindPassword = securityRealm.bindPassword
    })
    
    instance.setSecurityRealm(securityRealm)
    instance.save()
    
    注意,我在这里也添加了来自Konstantinos的

    。。成功了!我想。没有警报。直到我了解到缺少保护代码和清理块,它才不断地刷新不需要的位,并且永远不会删除它应该删除的位,也就是说,在我在自动化中使用它的地方,我们肯定不喜欢永久保留这种模式。所以我一直在复制配置,但至少我有生成配置的模型。仍然是美好的一天

    今后:

  • 从中查找最佳构造函数
  • 使用它在脚本中形成最简单的调用
  • 检查Konstantinos的调整是否仍然需要

  • 非常感谢康斯坦蒂诺斯和诺亚。显然我不能推荐你给他们荣誉,但我非常感激。

    首先,记得在添加插件后重新启动Jenkins!这似乎是一件需要强调的大事

    按照诺亚的提示,以下是对我有效的方法:

    import hudson.plugins.active_directory.*
    import jenkins.model.*
    
    def instance = Jenkins.getInstance();
    // public ActiveDirectorySecurityRealm(String domain, String site, String bindName, String bindPassword, String server)
    def securityRealm = new ActiveDirectorySecurityRealm(
    'myRealm',
    'Default-First-Site-Name',
    'bindaddr@myRealm,
    'bindpassword_cleartext',
    'ad_server1fqdn,ad_server2fqdn'
    )
    
    securityRealm.getDomains().each({
        it.site = securityRealm.site
        it.bindName = securityRealm.bindName
        it.bindPassword = securityRealm.bindPassword
    })
    
    instance.setSecurityRealm(securityRealm)
    instance.save()
    
    注意,我在这里也添加了来自Konstantinos的

    。。成功了!我想。没有警报。直到我了解到缺少保护代码和清理块,它才不断地刷新不需要的位,并且永远不会删除它应该删除的位,也就是说,在我在自动化中使用它的地方,我们肯定不喜欢永久保留这种模式。所以我一直在复制配置,但至少我有生成配置的模型。仍然是美好的一天

    今后:

  • 从中查找最佳构造函数
  • 使用它在脚本中形成最简单的调用
  • 检查Konstantinos的调整是否仍然需要

  • 非常感谢康斯坦蒂诺斯和诺亚。显然,我不能建议你给予他们信任,但我非常感谢。

    你没有得到代表的评论和投票。另外,请参见和。而且这些评论似乎已经过时了,你没有得到评论投票的代表。另外,请参见和。这些评论似乎已经消失了