Jenkins角色策略插件和多分支流水线

4
我们有两种类型的项目,即自由样式和多分支管道。我想要一个“开发人员”角色,只能获取作业的读取权限,以分析管道日志和存档工件。对于自由样式项目,这很好用,但对于多分支项目,处于开发人员角色的用户无法看到任何内容,出现了“此文件夹为空”的消息,并且触发的构建不出现。有人可以帮忙吗?
以下是一些配置截图: 全局角色 项目角色

你能分享一些你的配置截图吗? - JRichardsz
抱歉,您指的是哪个配置? - Gois
1
角色策略配置 - JRichardsz
2个回答

3
我遇到了同样的问题,没有找到完美的解决方案,但目前这个方法可以运作。
一个要求是,在GIT中分支命名应该是持久的,并带有额外的前缀。例如:feat/branchName。然后你可以通过这个前缀值来过滤它。更多关于git flow中分支命名的信息请查看分支命名
作为输入参数,你有项目和其中的多分支管道。例如:
  • Product1 -> Multibranch_pipeline_Product1 -> 不同的分支 带有前缀 feat, bug, infra, 等等。 (例如: infra/PRJ-135-reciepts-issues, feat/PRJ-337-new-customer,等等)

  • Product2 -> Multibranch_pipeline_Product2 -> 不同的分支 带有前缀 feat, bug, infra, 等等。 (例如: infra/PRJ-876-new-env, feat/PRJ-999-entity-creation,等等)

并且你想将它们分开给不同的用户:
  • Developer1 - 只能访问Project1和其中多分支管道中的分支
  • Developer2 - 只能访问Project2和其中多分支管道中的分支
  • Developer3 - 访问Project1和Project2中的多分支管道
因此,你需要在基于角色的插件中进行以下配置:
项目角色:
  • Product1 pattern - ^Product1*|.*_Product1*|(.*)feat(.*)|(.*)bug(.*)|(.*)hotfix(.*)|(.*)infra(.*)|(.*)develop(.*)

  • Product2 pattern - ^Product2*|.*_Product2*|(.*)feat(.*)|(.*)bug(.*)|(.*)hotfix(.*)|(.*)infra(.*)|(.*)develop(.*)

其中:
  • ^Product1* - 将允许访问文件夹Product1
  • .*_Product1* - 将允许访问文件夹(多分支项目)- Multibranch_pipeline_Product2
  • (.*)feat(.*)|(.*)bug(.*)|(.*)hotfix(.*)|(.*)infra(.*)|(.*)develop(.*) - 将允许访问此多分支项目中具有前缀featbughotfixinfradevelop的所有分支。

对于Product2,您也应该这样做。

总之,您应该有: - Developer1拥有Product1角色 - Developer2拥有Product2角色 - Developer3具有Product1和Product2两个角色

我测试了这个解决方案,并且使用这样的配置权限不会相互交叉(Developer1将无法访问Product2中的分支,Developer2将无法访问Product1中的分支)。


3
这个解决方案对我很有用。我不想通过分支来限制它,所以我只是使用表达式 ^my-job-name(.*) 来匹配作业下的所有分支。 - zoidberg

-1

您可以使用单个Jenkinsfile创建两个不同的作业,其中分支“develop”执行特定任务(如SonarQube、单元测试等)。而“release”分支则执行集成任务。

例如:

stage 'Init'
node {
   checkout scm
   sh 'echo $ BRANCH_NAME'
}
if (env.BRANCH_NAME == 'develop') {
   stage 'Only on develop'
   println 'This happens only on develop'
} else {
   stage 'Other branches'
   println "Current branch $ {env.BRANCH_NAME}"
}

请将此链接作为参考


1
我不明白这如何帮助我解决问题。问题在于开发人员无法看到多分支管道作业内部的任何内容,包括分支、拉请求和标记……甚至连构建日志或生成的工件都看不到,这才是真正的问题!(顺便说一下,我会考虑你提出的将端对端测试阶段剥离出来并且仅在拉请求上运行的建议) - Gois

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接