'包括'私有项目文件使用`$ CI_JOB_TOKEN`

时间:2018-06-15 12:58:07

标签: 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功能是否也支持此功能。关于如何实现这一点的任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:4)

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

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

参考文献:

因此,您不能使用CI_JOB_TOKEN既不通过原始端点(/raw/<ref>/<path>)也不通过API从另一个存储库下载文件。

不幸的是,部署密钥也没有帮助-它们仅适用于SSH。

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

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

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

答案 1 :(得分:0)

仍然不支持CI_JOB_TOKEN具有有用的API访问权限。但他们正在为此https://gitlab.com/groups/gitlab-org/-/epics/3559