GitLab CI/CD 中的合并请求 API 返回未经授权的错误
Merge Request API in GitLab CI/CD returning unauthorized error
我找到了答案:
但是没有回复请求:
$CI_API_V4_URL/projects/$CI_PROJECT_ID/merge_requests/$CI_MERGE_REQUEST_IID
我添加了一个 header:
PRIVATE-TOKEN: $TOKEN
其中 $TOKEN - CI_BUILD_TOKEN 或 CI_JOB_TOKEN,但答案:
HTTPCode: 401
更新。
我创建了脚本:
#!/usr/bin.env bash
# -*- coding: utf-8 -*-
urlBase="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/merge_requests/${CI_MERGE_REQUEST_IID}
echo "[--] urlBase: ${urlBase}"
echo "[--] key + build"
curl "${urlBase}?private_token=${CI_BUILD_TOKEN}"
echo "[--] key + job"
curl "${urlBase}?private_token=${CI_JOB_TOKEN}"
echo "[--] header + build"
curl --header "PRIVATE-TOKEN: ${CI_BUILD_TOKEN}" "${urlBase}"
echo "[--] header + job"
curl --header "PRIVATE-TOKEN: ${CI_JOB_TOKEN}" "${urlBase}"
echo "[--] header2 + build"
curl --header "Authorization: Bearer ${CI_BUILD_TOKEN}" "${urlBase}"
echo "[--] header2 + job"
curl --header "Authorization: Bearer ${CI_JOB_TOKEN}" "${urlBase}"
但输出:
{"message":"401 Unauthorized"}
假设您使用 cURL 调用 GitLab API,您需要显式传递 API 令牌。仔细阅读 GitLab Documentation,因为有很多问题。
cURL 命令中的凭据
以下是在 cURL 命令中传递凭据的一些常用方法:
作为参数:
curl "$CI_API_V4_URL/projects/$CI_PROJECT_ID/merge_requests/$CI_MERGE_REQUEST_IID?private_token=<your_access_token>"
作为 header:
curl --header "PRIVATE-TOKEN: <your_access_token>" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/merge_requests/$CI_MERGE_REQUEST_IID"
CI 工作令牌
GitLab documentation 指定可以使用 $CI_JOB_TOKEN
进行哪些 API 调用:
With a few API endpoints you can use a GitLab CI/CD job token to authenticate with the API: Packages, Artifacts, Pipeline Triggers, Release Creation, Terraform Plan.
请注意,合并请求 不在该列表中,因此不会起作用。
CI 构建令牌
根据这个 issue,$CI_BUILD_TOKEN
在 GitLab 9.x 中被弃用并重命名为 $CI_JOB_TOKEN
,所以这也不起作用。
个人访问令牌
您可以使用 Personal Access Tokens, or PATs. First, create your PAT using these instructions. Make sure you select api as the scope. Then, add the token to a GitLab variable following these instructions 向 GitLab API 进行身份验证。确保启用“掩码变量”,这样您的令牌就不会暴露在日志中。现在,在 gitlab-ci.yml
中,您创建的变量将作为环境变量使用。
我找到了答案:
但是没有回复请求:
$CI_API_V4_URL/projects/$CI_PROJECT_ID/merge_requests/$CI_MERGE_REQUEST_IID
我添加了一个 header:
PRIVATE-TOKEN: $TOKEN
其中 $TOKEN - CI_BUILD_TOKEN 或 CI_JOB_TOKEN,但答案:
HTTPCode: 401
更新。 我创建了脚本:
#!/usr/bin.env bash
# -*- coding: utf-8 -*-
urlBase="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/merge_requests/${CI_MERGE_REQUEST_IID}
echo "[--] urlBase: ${urlBase}"
echo "[--] key + build"
curl "${urlBase}?private_token=${CI_BUILD_TOKEN}"
echo "[--] key + job"
curl "${urlBase}?private_token=${CI_JOB_TOKEN}"
echo "[--] header + build"
curl --header "PRIVATE-TOKEN: ${CI_BUILD_TOKEN}" "${urlBase}"
echo "[--] header + job"
curl --header "PRIVATE-TOKEN: ${CI_JOB_TOKEN}" "${urlBase}"
echo "[--] header2 + build"
curl --header "Authorization: Bearer ${CI_BUILD_TOKEN}" "${urlBase}"
echo "[--] header2 + job"
curl --header "Authorization: Bearer ${CI_JOB_TOKEN}" "${urlBase}"
但输出:
{"message":"401 Unauthorized"}
假设您使用 cURL 调用 GitLab API,您需要显式传递 API 令牌。仔细阅读 GitLab Documentation,因为有很多问题。
cURL 命令中的凭据
以下是在 cURL 命令中传递凭据的一些常用方法:
作为参数:
curl "$CI_API_V4_URL/projects/$CI_PROJECT_ID/merge_requests/$CI_MERGE_REQUEST_IID?private_token=<your_access_token>"
作为 header:
curl --header "PRIVATE-TOKEN: <your_access_token>" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/merge_requests/$CI_MERGE_REQUEST_IID"
CI 工作令牌
GitLab documentation 指定可以使用 $CI_JOB_TOKEN
进行哪些 API 调用:
With a few API endpoints you can use a GitLab CI/CD job token to authenticate with the API: Packages, Artifacts, Pipeline Triggers, Release Creation, Terraform Plan.
请注意,合并请求 不在该列表中,因此不会起作用。
CI 构建令牌
根据这个 issue,$CI_BUILD_TOKEN
在 GitLab 9.x 中被弃用并重命名为 $CI_JOB_TOKEN
,所以这也不起作用。
个人访问令牌
您可以使用 Personal Access Tokens, or PATs. First, create your PAT using these instructions. Make sure you select api as the scope. Then, add the token to a GitLab variable following these instructions 向 GitLab API 进行身份验证。确保启用“掩码变量”,这样您的令牌就不会暴露在日志中。现在,在 gitlab-ci.yml
中,您创建的变量将作为环境变量使用。