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

时间:2014-06-18 07:49:23

标签: groovy jenkins ldap

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

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

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

Jenkins Benutzer Id:maku

组:

adm_proj_a
nexus_admin
ROLE_ADM_PROJ_XY
ROLE_BH_KK

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

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

欢迎任何提示

3 个答案:

答案 0 :(得分:3)

我找到了解决方案。以防任何人感兴趣:

在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 组中的用户才能看到生产作为选择。

答案 1 :(得分:3)

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){
...

答案 2 :(得分:1)

ffghfgh那样写的getAuthorities方法需要管理员许可。使用以下命令:

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

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