使用GitLabCI构建脚本中的GitLab API

ETL*_*ETL 15 gitlab gitlab-ci gitlab-ci-runner

我有一个像这样的GitLab CI构建脚本:

create release:
  stage: deploy
  tags:
    - basic
  only:
    - tags
  script:
    - GITLOG=$(echo "# Changes Log"; git log `git tag | tail -2 | head -1`..${CI_BUILD_TAG} --pretty=format:" - %s")
    - curl -X POST -d "private_token=$CI_BUILD_TOKEN&description=$GITLOG" "http://git.example.com/api/v3/projects/${CI_PROJECT_ID}/repository/tags/${CI_BUILD_TAG}/release"
Run Code Online (Sandbox Code Playgroud)

此步骤的目的是在GitLab发行版部分中自动从Git添加更改日志.

如果我在命令行上手动运行它并输入变量,那么这是有效的...

问题是CI_BUILD_TOKEN构建运行器中的值不是有效的GitLab专用令牌 - 它只是连接到Docker注册表的令牌 - 根据文档.

有没有办法获得一个有效的GitLab API令牌,构建运行器可以使用它来访问它正在运行构建的项目的API?似乎这应该是可能的.

GitLab Runner:

gitlab-runner -v
Version:      1.2.0
Git revision: 3a4fcd4
Git branch:   HEAD
GO version:   go1.6.2
Built:        Sun, 22 May 2016 20:05:30 +0000
OS/Arch:      linux/amd64
Run Code Online (Sandbox Code Playgroud)

Dan*_*nny 15

您可以使用来自跑步者的API 进行只读访问,但前提是您添加了带有CI_JOB_TOKEN的标头.

例如

curl -H "JOB_TOKEN: $CI_JOB_TOKEN" "https://gitlab.com/api/v4/projects/2828837/repository/tags
Run Code Online (Sandbox Code Playgroud)

只有当项目是公共每个人都访问同一项目.

如果您想要访问私人项目和/或写访问权限,请向上投票GitLab问题#29566和/或#41084.

作为目前的替代方案,您可以在gitlab上创建一个访问令牌,并将其添加到项目设置/ ci_cd下的秘密变量中,尽管并不是真的建议这样做,因为触发这项工作的每个人都会使用您的个人访问令牌.

  • 请注意,此标头的名称应为“JOB-TOKEN”,而不是“JOB_TOKEN”。即`curl -H "JOB-TOKEN: $CI_JOB_TOKEN" "https://gitlab.com/api/v4/projects/2828837/repository/tags` (3认同)
  • 无论令牌是什么,任何公开的内容都会对`repository / tags'做出响应-我认为令牌在这里没有做任何事情。 (2认同)

Sig*_*ist 1

您是否尝试过使用秘密变量?您可以在设置中定义,然后在构建脚本中使用。