使用gitlab CI yaml和多行bash命令(例如,带有json头的curl)

oiopk7p5  于 4个月前  发布在  Git
关注(0)|答案(2)|浏览(89)

有时我在最愚蠢的地方挣扎..但我如何从gitlab ci的yaml文件发出多行curl?我尝试了以下方法:

curl --request POST \
    --header 'Content-Type: application/json' \
    --header "JOB-TOKEN: $CI_JOB_TOKEN" \
    --data "{ \
      \"name\": \"$CI_PROJECT_NAME\", \
    }" \
    "$CI_API_V4_URL/projects/$CI_PROJECT_ID/releases"

字符串
其产生:

An error has occurred and reported in the system's low-level error handler.


现在我认为这是更具体的bash,所以我尝试使用单引号:

curl --request POST \
    --header 'Content-Type: application/json' \
    --header 'JOB-TOKEN: $CI_JOB_TOKEN' \
    --data '{
      "name": "$CI_PROJECT_NAME"
    }' \
    "$CI_API_V4_URL/projects/$CI_PROJECT_ID/releases"


这是有效的(它给了我一个服务器响应),但是bash现在将按字面意思接受变量,所以$CI_JOB_TOKEN没有被替换,也没有$CI_PROJECT_NAME。
我怎么才能让它工作?

wb1gzix0

wb1gzix01#

尝试下面的

script:
    - >
      curl --fail -X "POST"
      "$CI_API_V4_URL/projects/$CI_PROJECT_ID/releases"
      -H "Content-Type: application/json"
      -H "JOB-TOKEN: $CI_JOB_TOKEN"
      --data '{
        "name": "$CI_PROJECT_NAME"
      }'

字符串

scyqe7ek

scyqe7ek2#

使用envsubst找到了一个很好的解决方法:

script:
    - >
      echo '{
          "name": "will be replaced -> ${CI_COMMIT_SHORT_SHA}",
          "tag_name": "v0.6",
          "description": "Super nice release",
          "ref": "master",
          "assets": {
            "links": [{
              "name": "hoge",
              "url": "https://google.com",
              "direct_asset_path": "/binaries/linux-amd64",
              "link_type":"other"
            }]
          }
        }' > payload.json
    - |
      curl \
        --header 'Content-Type: application/json' \
        --header "JOB-TOKEN: $CI_JOB_TOKEN" \
        --data "$(cat payload.json | envsubst)" \
        --request POST "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases"

字符串
只需将apk add gettext添加到您的阿尔卑斯山图像

相关问题