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

2024-01-08

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

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

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

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

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


这是一些Jenkinsfilegroovy 会让你接近你想要的:

// 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`.");
        }
    }
}

Caveats:

  • 这些技巧在很大程度上依赖于需要 Jenkins 管理员“进程内脚本批准”的 API 函数。
  • 上面的例子假设存在jenkins_admins特权用户所属的组 --- 您的用户/组的情况可能非常不同。
  • 一般来说,处理从 Jenkins API 函数返回的对象应该在@NonCPS- 带注释的函数 --- 你有风险java.io.NotSerializableException否则。

参考:

  • https://github.com/jenkinsci/workflow-cps-plugin/blob/master/README.md 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/Cause.UserCause.html
  • http://javadoc.jenkins-ci.org/hudson/model/Run.html#getCause-java.lang.Class- 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- http://javadoc.jenkins.io/hudson/security/SecurityRealm.html#loadUserByUsername-java.lang.String-
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每个分支基于作业的安全性 - Jenkins 多分支管道 的相关文章

  • 如何使用 Groovy 获取自上次成功构建以来 Jenkins 的提交信息?

    如何编写自定义 groovy 脚本以轻松操作自上次成功构建以来所有提交的数据 在 gradle maven 步骤之后添加新的构建步骤 gt 执行系统 groovy 脚本 适配代码 import com tikal jenkins plugi
  • 詹金斯管道如果其他不工作

    我正在创建一个示例詹金斯管道 这是代码 pipeline agent any stages stage test steps sh echo hello stage test1 steps sh echo TEST stage test3
  • 我仍然认为在客户端哈希密码更好。我错了吗?

    我读过这些 https hackernoon com im harvesting credit card numbers and passwords from your site here s how 9a8cb347c5b5 https
  • Netezza 中的 HASH8 函数使用哪种 Jenkins 哈希算法?一次一个/lookup2/lookup3/SpookyHash?

    我需要实现 hash8 函数 或者用 Java 模拟它的输入 输出 Netezza 的简短文档说 hash8 实现了 Jenkins 算法 但是有多种算法 修订版那个名字 http en wikipedia org wiki Jenkins
  • 如何获取 Jenkins 的 API 令牌

    我正在尝试使用詹金斯REST https en wikipedia org wiki Representational state transferAPI 说明中说我需要 API 密钥 我浏览了所有配置页面才找到它 如何获取 Jenkins
  • 如何在jenkins中使用文件参数

    我正在詹金斯中执行参数化构建来计数 有 1 个文件参数的文件中的行数 它的文件位置是pqr 脚本文件的名称是linecount sh保存在远程服务器上 当我尝试使用命令执行它时sh linecount sh文件名 它在詹金斯中完美运行 但是
  • 保护移动连接 - 存储秘密和密钥

    感谢您花时间阅读本文 我是一名年轻的开发人员 在 Web 项目和服务器端编码方面拥有一些专业经验 但我现在正在构建我的第一个移动应用程序 经过在线深入研究后 我还没有能够澄清我关于保护移动应用程序数据传输的一些问题 这是我认为我理解正确的
  • Bower 安装 self_signed_cert_in_chain

    我正在 Windows 中使用 git bash 构建一个角度应用程序 到目前为止 我已经能够使用 yo 搭建脚手架 没有问题 但是当我尝试发出以下命令时 有人可以指出我来解决这个问题吗 Bower 安装 Angular Bootstrap
  • exec()、shell_exec()、curl_exec() 的安全漏洞

    有时 我会使用 exec shell exec 和curl exec 以下是典型用途 假设其中有 PHP 变量 即第一个变量中的 html 用户有可能修改其内容 从安全漏洞的角度来看 我应该关注什么 escapeshellcmd 和 esc
  • Jenkins 管道阶段 - 传递整个文件

    运行包含多个节点的阶段的 Jenkins 管道 基于 Groovy 我需要将 stageA 上的 NodeA 上的某个文件的列表传递到 StageB 上的 NodeB 在 stageA NodeA 我运行 DEVenv readFile s
  • Jenkins:有什么方法可以清理 Jenkins 工作区吗?

    如何清理 Jenkins 中的工作区 我在用AccuRev作为版本控制工具 我创建freestyle詹金斯的项目 有一种方法可以清理 Jenkins 中的工作区 您可以在构建之前或构建之后清理工作区 首先 安装工作区清理插件 https w
  • 在 JAX-WS 中使用安全性的最佳实践是什么

    这是场景 我有一些需要保护的 Web 服务 JAX WS 目前 为了身份验证需求 我提供了额外的 SecurityWService 它为授权用户提供了一些需要在请求其他服务时描述的 userid 和 sessionid 使用一些java安全
  • 如何在 Jenkinsfile 中将 Artifactory DiscardOldBuilds 设置为 true?

    我正在努力使用 Jenkins 多分支管道来实现构建作业 最后阶段是将构建输出上传到 Artifactory 通过界面配置独立作业时 有一个选项 丢弃来自 Artifactory 的旧构建 这允许我仅保留 要保留的最大构建数 设置中指定的相
  • 我如何才能获得 Jenkins 的工作范围凭证?

    首先抱歉 如果这个问题及其解决方案存在于某处 但我找不到它 我希望能够在工作中创建凭证 并且只能在该工作中使用 这是一种工作范围凭证 目前 凭证插件仅建议全局和系统范围 因此凭证可用于所有作业 凭据绑定插件似乎也没有解决我的问题 但公平地说
  • 使用公钥时出现 InvalidKeySpecException

    我正在拼命尝试在 Android 上使用非对称公钥 私钥加密技术来加密消息 我在 Windows 上 使用 puttygen 生成了公钥和私钥 我不确定它有什么区别 但我选择了 SSH 2 RSA 这是公钥 AAAAB3NzaC1yc2EA
  • 从 Jenkinsfile 设置管道名称和描述

    我正在尝试将 jenkins 管道的 poc 作为代码 我正在使用 Github 组织文件夹插件来扫描 Github 组织并为每个分支创建作业 有没有办法显式定义从 Jenkinsfile 获取的管道作业的名称 我还想添加一些职位描述 你需
  • 有关 CredEnumerate 的帮助

    作为后续this https stackoverflow com questions 199518 how to programatically add mapped network passwords winxp我希望有人可以帮助解决这个
  • 通过 SVN 从 Jenkins 更新工作区时出现间歇性“SVNException:svn:E175002:连接重置”

    我有 Jenkins 2 138 3 在虚拟机上运行 在同一网络上的另一台 PC 上 我有一个 Visual SVN 服务器 3 9 2 结帐间歇性地 可能是 25 的时间 失败 并出现以下错误 ERROR Failed to check
  • 从 Jenkins Pipeline 发布到 Artifactory

    我正在尝试使用 Jenkins v2 7 管道发布到 Artifactory v4 5 1 实例 下面是我的脚本的摘录 问题似乎是 Artifactory 对象无法识别并被视为字符串 有人可以建议问题可能是什么吗 node error Ar
  • Jenkins 管道构建如何确定工作区文件夹?

    在 Jenkins 管道中 当在特定节点上运行构建时 会在该代理上分配工作空间 我们没有设置工作空间路径 因此它是自动确定的 据我了解 当同一作业在同一代理上同时运行时 工作区必须包含执行程序编号以隔离构建 但是 工作空间路径到底是如何构建

随机推荐