从GitLabCI构建脚本使用GitLabAPI

从GitLabCI构建脚本使用GitLabAPI,gitlab,gitlab-ci,gitlab-ci-runner,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 "priva

我有一个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"
此步骤的目的是在GitLab Releases部分自动从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

你有没有试着用这个?您可以在设置中定义,然后在构建脚本中使用。

您可以通过运行程序中的API进行只读访问,但前提是添加带有CI\u作业\u标记的标头

e、 g

只有当项目是公共的时,每个人都可以从同一个项目访问

如果您想要访问私人项目和/或写访问权限,请进行投票和/或


作为暂时的替代方案,您可以在project settings/ci_cd下创建一个访问令牌,并将其添加到secret variables中,尽管不建议这样做,因为触发作业的每个人都将使用您的个人访问令牌。

如本文所述,您是否有gitlab runner 1.2?()是的,我有GitLab 1.2.0-链接的文章是关于访问Docker注册表的,我正在尝试访问GitLab的API。访问GitLab Docker注册表确实有效。似乎
CI\u BUILD\u TOKEN
主要用于访问注册表,而不是用于使用GitLab API。如果他们可以将其作为CI变量包含,那就太好了。请注意,此标题的名称应该是
JOB-TOKEN
,而不是
JOB\u TOKEN
。也就是说,
curl-H“JOB-TOKEN:$CI\u JOB\u TOKEN”https://gitlab.com/api/v4/projects/2828837/repository/tags
事实上,这是真的吗?我在文档中看不到任何迹象表明作业令牌可用于a之外的身份验证。@bgamari我刚刚验证了我的代码:
sprintf(headertoken,“作业令牌:%s”,cJSON\u get\u key(env_json,“CI_JOB_TOKEN”)
,我用于发布任何公共内容的文件都会响应
存储库/标记
,而不管标记-我认为标记在这里没有做任何事情。@Danny它可能(仍然?)工作,但根据他们的文档,标题名确实是
JOB-TOKEN
,而不是
JOB_TOKEN
curl -H "JOB_TOKEN: $CI_JOB_TOKEN" "https://gitlab.com/api/v4/projects/2828837/repository/tags