如何在gitlab-ci文件中使用curl?

use*_*342 2 curl gitlab-ci

在我的gitlab-ci文件中,我想使用命令curl获取页面结果并验证其内容,但是我不知道如何使用它。

....................
server:check-quality:
  <<: *all-settings
  stage: check-quality
  <<: *tags_definition
  script:
  - echo "APPEL de CURL"
  - content=($curl http://example.com/sonar/api/qualitygates/project_status?projectKey=com.orange.catalog:feature-m752-conditionequals)
  - echo "content"
  - exit 0
  only:
  - develop
  - /^feature.*$/
  - /^hotfix.*$/
Run Code Online (Sandbox Code Playgroud)

你有什么主意吗?

Val*_*Shi 22

这是如何使用curl这是2021 年如何在 GitLab CI YAML 脚本中轻松

以下示例 CI 管道用于curl触发远程应用程序构建并部署在 Digital Ocean App Platform 上,以实现真实用例。

这里curl使用来自GitLab 变量的URL 参数,并通过请求传递 JSON 正文:

deploy:
  stage: deploy
  variables:
    DEPLOY_CURL_COMMAND_BODY: "'{\"force_build\":true}'"
    DEPLOY_CURL_COMMAND: 'curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $DO_APP_PLATFORM_API_TOKEN" --data $DEPLOY_CURL_COMMAND_BODY https://api.digitalocean.com/v2/apps/$DO_APP_PLATFORM_STAGE_FRONT_APP_ID/deployments'
  script:
    # The following echoes are just a debug output
    - echo "Stage Deploy to DigitalOcean App Platform"
    - echo "$DO_APP_PLATFORM_API_TOKEN"
    - echo "$DO_APP_PLATFORM_STAGE_FRONT_APP_ID"
    - echo $DEPLOY_CURL_COMMAND
    # This line actually executes curl command saved within the variable.
    - 'eval "$DEPLOY_CURL_COMMAND"'
Run Code Online (Sandbox Code Playgroud)

管道将命令的参数放入变量中。然后是eval变量。请注意包裹变量值和命令的单引号eval。他们是校长。

该变量还使用秘密的推断存储库级别变量DO_APP_PLATFORM_API_TOKEN(即,DO_APP_PLATFORM_STAGE_FRONT_APP_ID)。

请注意,GitLab YAML 不会抱怨单独的:冒号。它抱怨: - 冒号后跟空格符号。所以上面的例子普遍适用于这两种情况。但是,当命令行中冒号后没有空格时,按照@Mavichow答案进行的更简单的实现会很好。

另请注意,您可以使用body需要包装在单个配额本身中的curl 参数。请注意,变量内容中的逗号后面没有空格body

避免: (冒号后跟空格)问题的其他一些方法:

  after_script:
    # Note how the single quotes eliminate colon+space issue
    - 'MESSAGE="Tests finished with status: ${CI_JOB_STATUS}"'
    # Here pipe operator allows using colon+space on the next line
    - |
      curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"$MESSAGE\"}" "$SOME_URL"    

Run Code Online (Sandbox Code Playgroud)

  • “请注意,GitLab YAML 不会抱怨单独的 : 冒号。它抱怨 : “ 对我来说是关键。谢谢! (3认同)

oli*_*ver 5

我不确定这是否行得通;因为YAML解释器会吞噬各种特殊字符,例如该http中的:。经过数小时的努力使其工作,这是我找到的解决方案。

    - |
      curl --fail --output "/dev/null" --silent --show-error --write-out "HTTP response: ${http_code}\n\n" \
        --data "{\"tag_name\": \"${CI_COMMIT_TAG}\", \"name\": \"${CI_PROJECT_NAME} ${CI_COMMIT_TAG}\", \"description\": \"${CI_COMMIT_TAG_MESSAGE:-No release notes.}\"}" \
        --header "Content-Type: application/json" \
        --header "Private-Token: ${CI_PRIVATE_TOKEN}" \
        --request POST \
        "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases"
Run Code Online (Sandbox Code Playgroud)

该脚本将使用gitlab api生成一个发行版,因此比您所要求的要花些钱。

请注意,CI_COMMIT_TAG_MESSAGE是我的变量,希望可以将其添加到GitLab中。

最大的问题是弄清楚所有需要转义的特殊字符。

另外,您交换了您的(和$在内容参数中;)


Tal*_*aid 4

在脚本中你可以像这样使用curl

script:
  - echo "APPEL de CURL"
  - curl http://example.com/sonar/api/qualitygates/project_status?projectKey=com.orange.catalog:feature-m752-conditionequals
  - echo "content"
  - exit 0
Run Code Online (Sandbox Code Playgroud)