我对建筑文物一詹金斯多分支管道,有分支机构的master,*-dev等等。
master
*-dev
我想在每个分支的基础上启用基于项目的安全性,即仅允许开发人员运行*-dev构建的分支作业,而不能运行其他任何分支作业,因为这样做会产生不良影响。
我知道有基于项目的安全性,但是每个分支都没有。是否存在?我们在更新Jenkins方面落后,目前正在运行Jenkins 2.46.1。
2.46.1
否则,我想我可能必须有一个单独的上游作业来调用下游作业的正确分支,并使具有特权的下游工件作业无法由开发人员运行。(这听起来像是过分杀伤力)。
还是在分支的Jenkinsfile中有什么方法可以做到这一点?
这是一些Jenkinsfile使您接近所需内容的技巧:
Jenkinsfile
// return the user id that caused this build; else empty string @NonCPS def user_id_cause() { def CAUSE = currentBuild.rawBuild.getCause( hudson.model.Cause.UserIdCause.class ); return CAUSE ? CAUSE.getUserId() : ""; } // return all groups to which the given user id belongs @NonCPS def groups(USER_ID) { return Jenkins.instance.securityRealm.loadUserByUsername(USER_ID).authorities.collect{ it.toString() }; } ... env.USER_ID_CAUSE = user_id_cause(); if (!env.BRANCH_NAME.endsWith('-dev')) { if (env.USER_ID_CAUSE) { if ('jenkins_admins' in groups(env.USER_ID_CAUSE)) { echo("INFO: user id `${env.USER_ID_CAUSE}` is in the group `jenkins_admins`."); } else { currentBuild.result = 'ABORTED'; error("user id `${env.USER_ID_CAUSE}` is not in the group `jenkins_admins`."); } } }
注意事项:
jenkins_admins
@NonCPS
java.io.NotSerializableException
参考文献: