一尘不染

Jenkins可扩展选择,根据用户角色提供用户特定的项目

jenkins

我有一种情况,我想在Jenkins参数化的版本中更改选择参数的内容。

就我而言,我想要一个用于部署应用程序“ Deploy My
App”的项目。在构建该项目时,将为用户提供一个选择参数。我想根据用户角色更改此列表的内容。例如,具有“
dev_deploy”角色的人将能够看到开发环境,而具有“ test_deploy”角色的人将能够看到测试环境等。

我当前正在使用可扩展选择参数插件和基于角色的授权策略插件。

我知道我可以编写一些棘手的脚本来生成供选择的列表项。

def result = ["-------"]

def roles=??????

if(roles.get('dev_deploy') {
    //Add dev environments
    result.add('dev1')
    ....
}
if(roles.get('test_deploy') {
    //Add test environments
    result.add('test1')
    ....
}

return result

我只是不知道该由谁来担任用户角色?

有谁知道我该怎么做,或者对问题有不同的解决方案?

非常感谢


阅读 246

收藏
2020-07-25

共1个答案

一尘不染

好的,再经过几次搜索后,我发现了源代码(https://github.com/jenkinsci/role-strategy-
plugin/tree/master/src/main/java/com/michelin/cio/hudson/plugins/rolestrategy)

经过进一步的阅读和一些玩耍之后,我想到了这个…

import com.michelin.cio.hudson.plugins.rolestrategy.*

def result = ["-- Please Select --"]
def authStrategy = jenkins.model.Jenkins.instance.getAuthorizationStrategy()

if(authStrategy instanceof RoleBasedAuthorizationStrategy){
    def currentUser = jenkins.model.Jenkins.instance.getAuthentication().getName();
    def roleMap= authStrategy.roleMaps.get("globalRoles")

    def sids= roleMap.getSidsForRole("Manage_Dev")
    if(sids != null && sids.contains(currentUser)) {
        result.add("dev1")
        ...
    }

    sids= roleMap.getSidsForRole("Manage_Test")
    if(sids != null && sids.contains(currentUser)) {
        result.add("tst1")
        ...
    }
    ...
}

return result

哪个对我有用。当您知道如何时就轻松!

2020-07-25