使用`$ CI_JOB_TOKEN`“包含”私有项目文件

sha*_*wat 3 gitlab

到目前为止,我可以通过PAT进行身份验证并包含外部CI脚本,但是$CI_JOB_TOKEN更安全的方法是使用访问权限,因为它更安全且受限制。我正在研究是否可以通过这种方式完成-

include 'https://gitlab-ci-token:${CI_JOB_TOKEN}@raw-file-url'

我曾尝试在虚拟脚本作业中以这种格式卷曲,但是无法获取文件。

显然,可以使用文件API和$ CI_JOB_TOKEN(https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/2346/diffs)导入外部脚本,但是我正在研究include功能是否也支持此功能。任何有关如何实现这一目标的建议都值得赞赏。

Jon*_*art 7

不幸的是,CI_JOB_TOKEN范围非常有限。截至今天(GitLab 11.0),您只能用它做两件事:

  • 使用GitLab容器(Docker)注册表进行身份验证
  • 进行身份验证以触发多项目管道(仅适用于EE)

参考文献:

所以,你不能使用CI_JOB_TOKEN从另一个仓库,无论是通过原始端点(下载文件/raw/<ref>/<path>),也不是API。

不幸的是,部署密钥也无济于事-它们仅适用于SSH。

我想出的唯一可行的解​​决方案是使用一个单独的用户:

  • 创建一个具有Reporter角色的新用户。
  • /profile/personal_access_tokens为具有api和read_repository权限的该用户创建个人访问令牌()。
  • 将此令牌作为秘密变量添加到项目CI / CD设置中。称它为BUILD_USER_TOKEN。
  • 使用$BUILD_USER_TOKEN你的CI脚本访问API或项目文件。

这是一个巨大的黑客,我真的希望看到GitLab制作CI_JOB_TOKEN一个具有指定资源权限的一流的只读(?)令牌。

  • 他们在令牌描述中添加了“下载从属存储库”,他们可能扩展了功能! (2认同)