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

at0kjp5o  于 9个月前  发布在  Git
关注(0)|答案(6)|浏览(155)

在我的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.*$/

字符串
请问你有什么想法吗?

oug3syen

oug3syen1#

我不太确定这是否有效;因为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"

字符串
这个脚本将使用gitlab API生成一个版本,所以比你所请求的更花哨一点。
请注意,CI_COMMIT_TAG_MESSAGE是我的变量,希望能添加到GitLab中。
最大的问题是找出所有需要转义的特殊字符。
此外,您还交换了content参数中的(和$;)

h43kikqp

h43kikqp2#

这是如何在GitLab CI YAML脚本中使用curl,在2021年没有麻烦。
以下示例CI管道使用curl触发远程应用程序构建,并在数字海洋应用平台上部署,以实现真实的用例。
在这里,curl使用来自GitLab variables的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"'

字符串
管道将命令的参数放入变量中。然后eval变量。注意单引号 Package 变量值和eval命令。它们是主要的。
该变量还使用外推的存储库级别变量来表示秘密。
请注意,GitLab YAML不会抱怨一个单独的:冒号符号。它抱怨:-一个冒号后跟空格符号。所以上面的例子普遍适用于这两种情况。但是当命令行中冒号后面没有空格时,按照@Mavichow答案的简单实现会很好。
还要注意,您可以使用curl body参数,该参数需要 Package 在单个配额中。请注意,在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"

jutyujz0

jutyujz03#

在脚本中,您可以使用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

字符串

mo49yndu

mo49yndu4#

可以使用|(多行脚本)来绕过这个:

....................
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.*$/

字符串

t5fffqht

t5fffqht5#

我已经修改了一些变通办法和CURL变量和工程为我与下面的脚本:

testing:
  only:
    - master
  script:
    - curl --request GET --header "Authorization:cpanel user:$CPANEL_API_TOKEN" "$CPANEL_URL/execute/VersionControl/update?repository_root=%2Fhome%2Ftesting%2Fpublic_html%2Ftesting.domain.com&branch=master"

字符串

cclgggtu

cclgggtu6#

以下是关于脚本中curl的官方Gitlab文档:https://docs.gitlab.com/ee/ci/yaml/script.html
有时,脚本命令必须用单引号或双引号括起来。例如,包含冒号(:)的命令必须用单引号(')括起来。YAML解析器需要将文本解释为字符串,而不是“key:value”对。
有时必须使用单引号。

相关问题