GitLab - 令牌的 CI/CD 模板访问问题

GitLab - CI/CD template access problem with token

提问人:Bylaw 提问时间:5/23/2022 更新时间:5/24/2022 访问量:669

问:

我的问题有点复杂,所以我试着精确地描述它:

我们在 GitLab 项目 A 中有一个 ci 模板,它包含在项目 B 中。只要我是管道的触发者,它就可以正常工作。但是当触发器是项目 B 的令牌用户(由我们创建)时,会出现无效的 yaml 错误。

给你一些观点:

如果提交到 B 的 master 分支,则自动合并作业应将 master 合并到 develop 中。这会在开发时触发一个新的管道,该管道执行自己的操作。不幸的是,开发时的新管道失败,因为令牌是触发器,并且它无法访问模板。

我们的版本控制作业也会发生类似的事情。作业使用新版本号进行提交和标记,这会触发管道,该管道失败并出现相同的错误。奇怪的是,我们用工作流规则过滤掉了这个提交,所以它不应该首先触发管道,但它确实会失败。

另一方面:

如果我在项目 B 的 yml(即不包括模板)中声明 ci 逻辑,工作流过滤器会起作用,版本控制提交不会触发管道,自动合并会在开发时触发一个管道并且运行良好。

我的想法是,当项目 B 的令牌触发某些东西时,它会查看 yml 文件,该文件在第一行包含,并且由于它无权访问项目 A,因此它会立即失败。我们的目标是在其他项目中使用项目 A 的模板。这应该是可能的,而无需向其他每个项目自己的令牌用户授予权限,对吧?

提前致谢,

大卫

模板 gitlab yaml cicd

评论


答:

0赞 aljaxus 5/24/2022 #1

我们的目标是在其他项目中使用项目 A 的模板。这应该是可能的,而无需向其他每个项目自己的令牌用户授予权限,对吧?

好吧 - 文件导入和类似的东西是在每个用户级别处理的(PAT 也作为单个用户处理)。因此,如果 ProjectB 中的触发器是无权访问 ProjectA 的用户,则无法导入 CI 定义,并且会失败。

TL:DR;您需要确保: a) 项目 A 是公开的 b) 触发器具有对 ProjectA 的显式访问权限


我建议你只为CI模板创建一个可公开访问的存储库,通过使用环境变量传递所有值来泛化它们(这样你就尽可能少地向“公共视图”公开信息),然后将这些模板导入到不同的项目中。


如果您自托管一个私有但可公开访问的 GitLab 实例(只有员工有帐户,但可以从 Internet 访问),您可以创建一个“内部”存储库而不是“公共”存储库。

这将使任何登录的人(包括 PAT)都可以访问存储库,而其他人(因此没有公共访问)可以访问存储库。

评论

1赞 Bylaw 5/24/2022
感谢您详细而快速的回答!我们的情况是后者,“内部”可见性设置似乎是一个合适的解决方案,我们将尝试一下。非常感谢!