【问题标题】:How to use curl in gitlab-ci file?如何在 gitlab-ci 文件中使用 curl?
【发布时间】:2018-08-10 16:56:33
【问题描述】:

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

请问你有什么想法吗?

【问题讨论】:

    标签: curl gitlab-ci


    【解决方案1】:

    我不太确定这是否可行;因为 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。

    最大的问题是找出所有需要转义的特殊字符。

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

    【讨论】:

    • 就我而言,我必须输入curl -X POST "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases" \ --header "PRIVATE-TOKEN:${CI_PRIVATE_TOKEN}" ...,其余的都可以
    • 我现在注意到的下一件事是 http 而不是 https 在乞求时
    【解决方案2】:

    这是如何在 2021 年轻松地在 GitLab CI 中使用 curl:示例 CI 管道触发远程应用程序构建和部署在 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
        - 'eval "$DEPLOY_CURL_COMMAND"'
    

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

    该变量也使用外推的repository level variables 作为秘密。

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

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

    【讨论】:

      【解决方案3】:

      在脚本中你可以像 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
      

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          我修改了一些变通方法和带有变量的 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"
          

          【讨论】:

            【解决方案6】:

            这是关于脚本中 curl 的官方 Gitlab 文档:https://docs.gitlab.com/ee/ci/yaml/script.html

            有时,脚本命令必须用单引号或双引号括起来。例如,包含冒号 (:) 的命令必须用单引号 (') 括起来。 YAML 解析器需要将文本解释为字符串而不是“键:值”对。

            您有时必须使用单引号。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2022-08-14
              • 2021-01-15
              • 2018-02-26
              • 2017-06-16
              • 2022-01-09
              • 1970-01-01
              • 1970-01-01
              • 2019-01-02
              相关资源
              最近更新 更多