GitLab - CI/CD 令牌的模板访问问题
GitLab - CI/CD template access problem with token
我的问题有点复杂,所以我尽量先ci描述一下:
我们在 GitLab 项目 A 中有一个 ci 模板,它包含在项目 B 中。只要我是管道的触发者,它就可以正常工作。但是当触发者是项目B的token user(我们创建的)时,出现invalid yaml错误。
给你一些观点:
如果您提交到 B 的 master 分支,自动合并作业应该将 master 合并到 develop 中。这会触发一个新的开发管道,它会做自己的事情。不幸的是,开发上的新管道失败了,因为令牌是触发器,它无法访问模板。
我们的版本控制工作也发生了类似的事情。该作业使用新版本号进行提交和标记,这会触发管道,管道失败并出现相同的错误。奇怪的是我们正在使用工作流规则过滤掉这个提交,所以它不应该首先触发管道,但它确实触发了并且失败了。
另一方面:
如果我在项目 B 的 yml 中声明 ci 逻辑(即不包括模板),工作流过滤器工作,版本控制提交不会触发管道,automerge 会在开发和它运行完美。
我的想法是,当项目 B 的令牌触发某些东西时,它会查看 yml 文件,该文件的第一行包含 including,但由于它无法访问项目 A,因此失败立即地。我们的目标是在其他项目中使用项目 A 的模板。应该可以不给每个其他项目自己的令牌用户权限,对吧?
提前致谢,
大卫
Our goal is to use Project A's template in other projects. It should be possible without giving permissions to every other project's own token user, right?
嗯 - 文件导入和类似的东西在 per-user 级别处理(PAT 也作为个人用户处理)。因此,如果 ProjectB 中的触发者是无权访问 ProjectA 的用户,则无法导入 CI 定义,并且失败。
TL:DR;您需要确保:
a) ProjectA 是 public
b) Trigger 可以显式访问 ProjectA
我建议您只为 CI 模板创建一个 publicly-accessible 存储库,通过使用环境变量传递 all 值来概括它们(这样您就可以公开尽可能少地向“public 查看”提供信息),然后将这些模板导入不同的项目。
如果您是 self-hosting 私有但 public 可访问的 GitLab 实例(只有员工有帐户,但可以通过互联网访问),您可以创建一个“internal " 存储库而不是 "public" 存储库。
这将使任何登录的人(包括 PAT)都可以访问存储库,而其他任何人都无法访问(因此没有 public 访问权限)。
我的问题有点复杂,所以我尽量先ci描述一下:
我们在 GitLab 项目 A 中有一个 ci 模板,它包含在项目 B 中。只要我是管道的触发者,它就可以正常工作。但是当触发者是项目B的token user(我们创建的)时,出现invalid yaml错误。
给你一些观点:
如果您提交到 B 的 master 分支,自动合并作业应该将 master 合并到 develop 中。这会触发一个新的开发管道,它会做自己的事情。不幸的是,开发上的新管道失败了,因为令牌是触发器,它无法访问模板。
我们的版本控制工作也发生了类似的事情。该作业使用新版本号进行提交和标记,这会触发管道,管道失败并出现相同的错误。奇怪的是我们正在使用工作流规则过滤掉这个提交,所以它不应该首先触发管道,但它确实触发了并且失败了。
另一方面:
如果我在项目 B 的 yml 中声明 ci 逻辑(即不包括模板),工作流过滤器工作,版本控制提交不会触发管道,automerge 会在开发和它运行完美。
我的想法是,当项目 B 的令牌触发某些东西时,它会查看 yml 文件,该文件的第一行包含 including,但由于它无法访问项目 A,因此失败立即地。我们的目标是在其他项目中使用项目 A 的模板。应该可以不给每个其他项目自己的令牌用户权限,对吧?
提前致谢,
大卫
Our goal is to use Project A's template in other projects. It should be possible without giving permissions to every other project's own token user, right?
嗯 - 文件导入和类似的东西在 per-user 级别处理(PAT 也作为个人用户处理)。因此,如果 ProjectB 中的触发者是无权访问 ProjectA 的用户,则无法导入 CI 定义,并且失败。
TL:DR;您需要确保: a) ProjectA 是 public b) Trigger 可以显式访问 ProjectA
我建议您只为 CI 模板创建一个 publicly-accessible 存储库,通过使用环境变量传递 all 值来概括它们(这样您就可以公开尽可能少地向“public 查看”提供信息),然后将这些模板导入不同的项目。
如果您是 self-hosting 私有但 public 可访问的 GitLab 实例(只有员工有帐户,但可以通过互联网访问),您可以创建一个“internal " 存储库而不是 "public" 存储库。
这将使任何登录的人(包括 PAT)都可以访问存储库,而其他任何人都无法访问(因此没有 public 访问权限)。