提问人:Bylaw 提问时间:5/23/2022 更新时间:5/24/2022 访问量:669
GitLab - 令牌的 CI/CD 模板访问问题
GitLab - CI/CD template access problem with token
问:
我的问题有点复杂,所以我试着精确地描述它:
我们在 GitLab 项目 A 中有一个 ci 模板,它包含在项目 B 中。只要我是管道的触发者,它就可以正常工作。但是当触发器是项目 B 的令牌用户(由我们创建)时,会出现无效的 yaml 错误。
给你一些观点:
如果提交到 B 的 master 分支,则自动合并作业应将 master 合并到 develop 中。这会在开发时触发一个新的管道,该管道执行自己的操作。不幸的是,开发时的新管道失败,因为令牌是触发器,并且它无法访问模板。
我们的版本控制作业也会发生类似的事情。作业使用新版本号进行提交和标记,这会触发管道,该管道失败并出现相同的错误。奇怪的是,我们用工作流规则过滤掉了这个提交,所以它不应该首先触发管道,但它确实会失败。
另一方面:
如果我在项目 B 的 yml(即不包括模板)中声明 ci 逻辑,工作流过滤器会起作用,版本控制提交不会触发管道,自动合并会在开发时触发一个管道并且运行良好。
我的想法是,当项目 B 的令牌触发某些东西时,它会查看 yml 文件,该文件在第一行包含,并且由于它无权访问项目 A,因此它会立即失败。我们的目标是在其他项目中使用项目 A 的模板。这应该是可能的,而无需向其他每个项目自己的令牌用户授予权限,对吧?
提前致谢,
大卫
答:
我们的目标是在其他项目中使用项目 A 的模板。这应该是可能的,而无需向其他每个项目自己的令牌用户授予权限,对吧?
好吧 - 文件导入和类似的东西是在每个用户级别处理的(PAT 也作为单个用户处理)。因此,如果 ProjectB 中的触发器是无权访问 ProjectA 的用户,则无法导入 CI 定义,并且会失败。
TL:DR;您需要确保: a) 项目 A 是公开的 b) 触发器具有对 ProjectA 的显式访问权限
我建议你只为CI模板创建一个可公开访问的存储库,通过使用环境变量传递所有值来泛化它们(这样你就尽可能少地向“公共视图”公开信息),然后将这些模板导入到不同的项目中。
如果您自托管一个私有但可公开访问的 GitLab 实例(只有员工有帐户,但可以从 Internet 访问),您可以创建一个“内部”存储库而不是“公共”存储库。
这将使任何登录的人(包括 PAT)都可以访问存储库,而其他人(因此没有公共访问)可以访问存储库。
评论