我已经为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的方法。
欢迎任何提示
答案 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”部分中的脚本