You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab Job执行curl报unmatched brace in URL position 1错误

GitLab CI执行curl命令报unmatched brace错误排查

问题现象

执行GitLab Job时,curl上传文件步骤报错:

curl: (3) unmatched brace in URL position 1: { ^

使用的原始CI配置如下:

upload: 
  stage: upload
  dependencies:
    - checkout
    - detect-mx-version
    - build

  needs: [ "checkout", "detect-mx-version", "build" ]  
  before_script:
    - apk add curl
    - apk add jq

  script:  
    - >
      curl -v -F "file=@/<<LOCATION_OF_PACKAGE>>.mda" -X POST -H "Username: ${PROJECTS_SVN_USER}" -H "ApiKey: ${API_KEY}" "https:<<URL_TO_BE_UPLOADED/upload?name=${BRANCH}-${REVISION}-${CI_PIPELINE_ID}.mda" 
        {
          read body
          read code
          echo $code
          echo $body
        } >> out.json

转义双引号后问题仍未解决。

错误原因

  • YAML多行语法使用错误:script下用了>折叠标量,该语法会将所有换行替换为空格,原本单独写的大括号代码块会被直接拼接到curl命令的末尾,被curl识别为URL位置的参数,触发括号不匹配报错。
  • Shell语法缺失:curl命令和后续大括号包裹的响应读取代码块之间没有管道符|连接,即使YAML解析正常,shell也会把大括号识别为curl的传入参数,而非后续执行的命令组。
  • Shell命令组语法不符合规范:shell中{}作为命令组使用时,{后必须加空格,组内最后一个命令后必须加分号或换行,原写法不满足语法要求。
  • URL格式错误:curl请求地址中https:后缺少双斜杠//,正确前缀应为https://。

修正后的配置

upload: 
  stage: upload
  dependencies:
    - checkout
    - detect-mx-version
    - build

  needs: [ "checkout", "detect-mx-version", "build" ]  
  before_script:
    # 加--no-cache避免拉取索引时的冗余网络请求
    - apk add --no-cache curl
    - apk add --no-cache jq

  script:  
    # 换用|块标量保留shell命令的换行结构,避免命令被拼接错乱
    - |
      curl -v -F "file=@/<<LOCATION_OF_PACKAGE>>.mda" -X POST \
        -H "Username: ${PROJECTS_SVN_USER}" \
        -H "ApiKey: ${API_KEY}" \
        # 修正URL前缀为https://
        "https://<<URL_TO_BE_UPLOADED/upload?name=${BRANCH}-${REVISION}-${CI_PIPELINE_ID}.mda" \
        # 加管道符将curl输出传递给后续命令组
        | {
          read body
          read code
          echo "$code"
          echo "$body"
        } >> out.json

额外注意

如果需要同时获取curl的HTTP状态码和完整响应体,上述用read按行读取的方式只能拿到前两行内容,更稳妥的写法是通过curl内置参数实现:

# 示例:将响应体写入out.json,同时返回HTTP状态码
curl -v -F "file=@/<<LOCATION_OF_PACKAGE>>.mda" -X POST \
  -H "Username: ${PROJECTS_SVN_USER}" \
  -H "ApiKey: ${API_KEY}" \
  -o out.json \
  -w "%{http_code}" "https://<<URL_TO_BE_UPLOADED/upload?name=${BRANCH}-${REVISION}-${CI_PIPELINE_ID}.mda"

内容的提问来源于stack exchange,提问作者Wat7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.15 16:16:01