在 GitLab CI 脚本中使用 CURL 响应

Mic*_*142 6 gitlab gitlab-ci gitlab-api

我尝试获取 .gitlab-ci.yaml 中某个 GitLab 项目的所有徽章,并按name找出某个徽章的id。我有以下脚本,我尝试使用 curl 调用徽章 api 并将 json 结果存储在名为BADGES的变量中:

build-backend:
  stage: build
  script:
    - BADGES='curl --header "PRIVATE-TOKEN:$GITLAB_API_TOKEN" "https://gitlab.example.com/api/v4/projects/${CI_PROJECT_ID}/badges"'
    - echo ${BADGES}
Run Code Online (Sandbox Code Playgroud)

当然,现在echo ${BADGES}将输出卷曲,因为我将其存储在变量的字符串中,但我不知道如何执行此操作。

在 JavaScript 中我会这样做:

const badges = ...CURL_RESPONSE...;
const versionBadge = badges.find(b => b.name === 'vBadge');
Run Code Online (Sandbox Code Playgroud)

这有可能吗?

sla*_*uth 9

要捕获调用的结果,curl您可以使用以下$(\xe2\x80\xa6)结构:

\n
BADGES="$(curl \xe2\x80\xa6)"\n
Run Code Online (Sandbox Code Playgroud)\n

要在响应中选择特定的徽章 ID,您可以使用jq.

\n

完整示例:

\n
get_badge_id:\n  image: alpine\n  before_script:\n    - apk add --no-cache curl jq\n  script:\n    - \'BADGE_ID="$(curl -s -H "PRIVATE-TOKEN: $GITLAB_API_TOKEN" $CI_API_V4_URL/projects/${CI_PROJECT_ID}/badges | jq ".[] | select(.name == \\"vBadge\\") | .id")"\'\n    - echo BADGE_ID is $BADGE_ID\n
Run Code Online (Sandbox Code Playgroud)\n