在 CI 管道内使用 CI_JOB_TOKEN 进行 API 调用返回 404

问题描述 投票:0回答:1

我的管道中只有这两项工作。第二个应该检索所有以前作业的列表。

stages:
  - build
  - test

build:
  stage: build
  script:
   -  echo "build"

test_job:
  image: bash:latest
  stage: test
  script:
    - apk add curl
    - |
      curl --header "Job-Token: $CI_JOB_TOKEN" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/pipelines/${CI_PIPELINE_ID}/jobs"

我的问题是第二个作业返回 404。

{
  "message": "404 Project Not Found"
}

这一定是因为授权问题,因为该项目确实存在。不过,我正在尝试通过 API 从项目本身访问该项目,并根据 docs:

“默认情况下,任何项目的白名单仅包含其自身。”

这意味着

CI_JOB_TOKEN
应该有足够的访问权限。

此外,这让我更加困惑,当我用

"Job-Token: $CI_JOB_TOKEN"
替换
"Private-Token: $CI_JOB_TOKEN"
时,curl 命令返回:

{
  "error": "invalid_token",
  "error_description": "Token was revoked. You have to re-authorize from the user."
}

哪些设置可能设置不正确或者我使用的 API 错误?

注意:我使用个人访问令牌测试了curl,它按预期工作

gitlab continuous-integration gitlab-ci token
1个回答
0
投票

工作令牌的 API 访问权限有限。您不能将此作业 API 与作业令牌一起使用。即使添加到白名单中,作业令牌仍然仅限于特定端点,其中不包括作业list API(尽管您可以使用作业令牌获取作业工件)。

您将需要使用另一种方法来对此 API 进行身份验证,例如项目访问令牌、组访问令牌或类似方法。

© www.soinside.com 2019 - 2024. All rights reserved.