在 GitLab CI 脚本中使用 CURL 响应

Use CURL response in GitLab CI Script

我尝试在.gitlab-ci.yaml中获取某个GitLab项目的所有徽章,并通过找出某个徽章的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}

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

在 JavaScript 我会这样做:

const badges = ...CURL_RESPONSE...;
const versionBadge = badges.find(b => b.name === 'vBadge');

这可能吗?

要捕获对 curl 的调用结果,您可以使用 $(…) 结构:

BADGES="$(curl …)"

要 select 响应中的特定徽章 ID,您可以使用 jq

完整示例:

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