如何限制用户的管道部署?

时间:2019-05-10 16:49:49

标签: jenkins jenkins-pipeline

如何限制某些Jenkins用户在我的管道中部署到某些环境?

我有我的管道,您可以选择要将代码部署到哪个环境(服务器),但是我想要实现的是只有一定数量的用户才能部署到生产环境,以实现明显的安全性问题,尤其是在不阻止其他用户部署到任何其他环境的情况下

现在,我的管道可以正常工作,但是任何人都可以触发部署到任何环境

我发现的唯一一件事就是通过用户管理来阻止整个项目,但这并不是我想要实现的。

我想要实现的是

User1和User2可以部署到生产环境,但是User3无法触发Prod部署,或者至少将它们分组并允许Group A部署而Group B不能部署到Prod

1 个答案:

答案 0 :(得分:0)

对我有用的解决方案是将人工批准插入到管道中,该管道只能由某些组的成员通过。我已经将詹金斯与AD集成在一起,但是它也可以用于其他类型的组:

    def checkEnvPermissions() {
        if (env.ENVIRONMENT == "production") {
            userInput = input message: 'Is this deployment approved?', ok: '', submitter: 'AD_GROUP_WITH_PERMISSIONS', parameters: [
                [$class: 'hudson.model.ChoiceParameterDefinition', choices: 'Approved\nNot Approved', name: 'isApproved', description: 'This input can only be answered by users with deployment permission on this environment']
            ]
            if (userInput == "Not Approved") {
                error "Deployment to PROD is not approved"
            }
        }
    }

如果您不考虑询问其他问题,则可以执行以下操作:

def listOfGroupsAllowedToDeploy = ["group1","group2"]
def userId = currentBuild.rawBuild.getCause(Cause.UserIdCause).getUserId()
def user = hudson.model.User.getById(userId, false)
userAuthorities = user.getAuthorities()
if userAuthorities.intersect(listOfGroupsAllowedToDeploy)