gpt4 book ai didi

security - 每个分支基于作业的安全性 - Jenkins 多分支管道

转载 作者:行者123 更新时间:2023-12-02 20:06:03 24 4
gpt4 key购买 nike

我有一个用于构建工件的 Jenkins 多分支管道,并且有 master*-dev 等分支。

我想在每个分支的基础上启用基于项目的安全性,即只允许开发人员运行构建的 *-dev 分支作业,而不是任何其他分支作业,因为这样做会产生不良影响。

我知道有基于项目的安全性,但我没有看到每个分支。这存在吗?我们在更新 Jenkins 方面落后了,目前正在运行 Jenkins 2.46.1

否则我想我可能需要有一个单独的上游作业来调用下游作业的正确分支,并使下游工件作业无法由有权限的开发人员运行。 (这听起来有点矫枉过正)。

或者有什么方法可以在分支的 Jenkinsfile 中完成此操作吗?

最佳答案

这里有一些 Jenkinsfile groovy 将使您接近您想要的:

// 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 管理员“进程内脚本批准”的 API 函数。
  • 上面的示例假设 jenkins_admins 存在特权用户所属的组 --- 您的用户/组的情况可能非常不同。
  • 一般来说,使用 Jenkins API 函数返回的对象应该在 @NonCPS 内完成。 - 带注释的函数 --- 你面临的风险 java.io.NotSerializableException否则。

引用文献:

关于security - 每个分支基于作业的安全性 - Jenkins 多分支管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46894075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com