Jenkins:如何在groovy脚本中获取用户LDAP组

Mar*_*ler 5 groovy ldap jenkins

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

现在我想基于当前用户的LDAP组限制部署到某些环境.

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

Jenkins Benutzer Id:maku

团体:

adm_proj_a
nexus_admin
ROLE_ADM_PROJ_XY
ROLE_BH_KK
Run Code Online (Sandbox Code Playgroud)

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

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

任何提示欢迎

Mar*_*ler 6

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

在 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
Run Code Online (Sandbox Code Playgroud)

该脚本由我的 Jenkins-Job 中的动态选择参数(脚本编写器)使用。

现在,只有adm_proj_a组内的用户可以将生产视为一种选择。


Lio*_*ana 5

User.getAuthorities() 要求调用者具有管理员权限。(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){
...
Run Code Online (Sandbox Code Playgroud)