当前位置: 首页 > 面试题库 >

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

丁毅庵
2023-03-14
问题内容

我对建筑文物一詹金斯多分支管道,有分支机构的master*-dev等等。

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

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

否则,我想我可能必须有一个单独的上游作业来调用下游作业的正确分支,并使具有特权的下游工件作业无法由开发人员运行。(这听起来像是过分杀伤力)。

还是在分支的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`.");
        }
    }
}

注意事项:

  • 这些技巧在很大程度上依赖于需要詹金斯管理员进行“进程内脚本批准”的API函数。
  • 上面的示例假定jenkins_admins特权用户所属的组的存在-–您的用户/组的情况可能大不相同。
  • 通常,使用从Jenkins API函数返回的对象进行播放应在带@NonCPS注释的函数中进行,java.io.NotSerializableException否则会有风险。

参考文献:

  • https://github.com/jenkinsci/workflow-cps-plugin/blob/master/README.md
  • http://javadoc.jenkins-ci.org/hudson/model/Cause.UserCause.html
  • http://javadoc.jenkins-ci.org/hudson/model/Run.html#getCause-java.lang.Class-
  • http://javadoc.jenkins.io/hudson/security/SecurityRealm.html#loadUserByUsername-java.lang.String-


 类似资料:
  • 现在多分支管道作业类型已经成熟,还有什么理由再使用简单的管道作业类型吗?即使您现在只有一个分支,考虑到未来多个分支的可能性可能是明智的,那么假设您将Jenkins管道存储在SCM中,那么为您的Jenkins管道使用管道作业类型与始终使用多分支管道作业类型的动机是什么?现在这两种作业类型之间是否存在功能平价?

  • 问题内容: 我正在尝试让詹金斯(Jenkins)的多分支管道工作来以类似于分支的方式构建标签。在Jenkins 2.73(不确定何时添加功能)中,可以将Multibranch项目配置为从源存储库中检索分支和标签。最初,我认为这将非常适合我的需求(我的Jenkinsfile现在可以在Jenkins的同一位置进行开发或生产构建)。 配置了标签发现的多分支作业 我已经使用脚本管道成功构建并运行了构建过程

  • 我有一个场景,但我有两个项目(a和B),都在Jenkins中配置了多分支管道作业,问题是项目B依赖于项目a。 所以我发现有时候当我在项目A中签入代码时,我也需要在项目A构建后构建项目B。现在,在我开始调查管道构建之前,我将每个分支都有一个作业,然后在Jenkins中为相应的分支触发项目B的适当作业。 我想在Jenkins文件中设置什么,这样当ProjectA/develop执行时,它就会触发Pro

  • 是否有人知道从文件中设置作业属性(特别是构建触发器)的正确方法?(多分支管道作业中的声明性管道脚本)。 为了清晰起见,我需要为多分支项目中的底层作业设置特定的构建触发器。我可以在GUI中配置总体多分支项目的触发器。 尝试过这里列出的方法:Jenkins多分支管道和指定上游项目 詹金斯:在上游更改时触发多分支管道 如何使用Jenkins管道属性步骤? 从v0开始,我就听到这样的错误。8我应该使用选项

  • 我正试图在詹金斯建立一个多分支管道项目。理想情况下,我希望在开发人员推出新代码后构建分支管道。例如,如果开发人员推送到“dev”分支,那么“dev”管道将自动生成。 我知道在“扫描多分支管道触发器”选项下,您可以设置Jenkins查找更改的频率,但我更希望是相反的方式,这意味着一旦分支中有新代码,Jenkins将构建管道。 我配置了我的Jenkinsfile,并在我的GitHub项目中设置了Web

  • 是否有可能通过一个作业DSL创建多分支管道作业,该作业通过“管道脚本”而不是每个Git存储库包含的Jenkinsfile来定义作业? 我们希望避免在100个Git存储库中生成和维护相同的Jenkins文件(除了一些参数)。 目前,我们正在使用管道作业和工厂作业播种的作业DSL,但目前我们在多分支构建(功能分支)方面受到限制。因此,我们希望切换到多分支管道作业,但在播种方面我们受到了限制。 我知道我