【问题标题】:Jenkins: How to get a users LDAP groups in groovy-scriptJenkins:如何在 groovy-script 中获取用户 LDAP 组
【发布时间】:2018-10-23 14:45:21
【问题描述】:

我已经为 Jenkins 中的自助服务部署设置了一个参数化作业。 用户可以选择要部署到的应用程序版本和环境。 目前显示给用户的可用环境只是一个静态的字符串列表(选择参数)。

现在我想根据当前用户的 LDAP 组将部署限制在某些环境中。

jenkins 中的用户页面显示如下:

詹金斯·贝努策 ID:maku

组:

adm_proj_a
nexus_admin
ROLE_ADM_PROJ_XY
ROLE_BH_KK

如何在 groovy 脚本中获取这些组?

我尝试使用 动态选择参数 (scriptler) 并使用 groovy 脚本获取 LDAP 组,但没有通过 Jenkins-API 找到方法。

欢迎任何提示

【问题讨论】:

    标签: groovy jenkins ldap


    【解决方案1】:

    User.getAuthorities() 要求调用者具有 ADMINISTER 权限。 (http://javadoc.jenkins-ci.org/hudson/model/User.html#getAuthorities())

    另一种方法是直接查询 SecurityRealm。

    import hudson.model.*
    import jenkins.model.*
    
    def userid = User.current().id
    def auths = Jenkins.instance.securityRealm.loadUserByUsername(userid)
                .authorities.collect{a -> a.authority}
    if("adm_proj_a" in auths){
    ...
    

    【讨论】:

    • 谢谢莱昂内尔!这当然是更好的解决方案。
    • 我也有同样的问题:Scripts not permitted to use staticMethod hudson.model.User current. Administrators can decide whether to approve or reject this signature.
    【解决方案2】:

    我找到了解决方案。以防万一有人感兴趣:

    在 scriptler 中,我创建了一个与此类似的脚本 groovy-script:

    import hudson.model.*
    
    def allowed_environments = ["dev","test","test-integration"]  
    
    if ("adm_proj_a" in User.current().getAuthorities() ) 
    {
       allowed_environments.add("production")
    }
    
     return allowed_environments
    

    此脚本由我的 Jenkins-Job 中的 动态选择参数 (scriptler) 使用。

    现在只有 adm_proj_a 组中的用户可以将 production 视为一种选择。

    【讨论】:

    • getAuthorities 要求用户拥有 Jenkins Administer privs,这使得限制基于 LDAP 组的执行变得有用,就像 jenkins 中的管理员权限一样,他们可以执行所有操作!
    【解决方案3】:

    like ffghfgh 写的 getAuthorities 方法需要管理员权限。使用如下:

    def auth = hudson.model.User.current().impersonate().getAuthorities().collect {it.getAuthority()}
    if ("adm_proj_a" in auth){
       // do something
    }
    

    Jenkins 可能会要求管理员帐户在“scriptApproval”部分批准脚本

    【讨论】:

      猜你喜欢
      • 2017-05-12
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-23
      • 2017-06-01
      • 1970-01-01
      相关资源
      最近更新 更多