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

带Token的Curl API调用Mac正常,Linux(Jenkins)下报404求助

问题

在MacBook上通过带Token认证的Curl调用SonarQube API可正常执行,但在Linux(Jenkins)环境下返回404错误。已尝试两种URL构造方式,均在Mac上生效但Linux下失败。

相关脚本

#!/bin/bash
# set -v -e -o pipefail
sonar_api() {
    #WORKS ON MAC but fails on LINUX
    # sq_url='https://sonar-sw.company.com/api/'
    # url="${sq_url}qualitygates/project_status?projectKey=aiinfra-pba&pullRequest=${GERRIT_CHANGE_NUMBER}-${GERRIT_PATCHSET_NUMBER}"
    sq_url='https://sonar-sw.company.com/api/qualitygates/project_status'
    url=$sq_url
    curl -vvv -u "${TOKEN}": \
        -G $url \
        --data-urlencode projectKey="pba" \
        --data-urlencode pullRequest="${GERRIT_CHANGE_NUMBER}-${GERRIT_PATCHSET_NUMBER}"
}
sonar_api

Jenkins日志片段

{ [5 bytes data]
* Mark bundle as not supporting multiuse
< HTTP/1.1 404 
< Server: nginx/1.12.2
< Date: Fri, 24 Mar 2023 19:05:15 GMT
< Content-Type: application/json
< Content-Length: 102
< Connection: keep-alive
< 
{ [102 bytes data]

100   102  100   102    0     0    126      0 --:--:-- --:--:-- --:--:--   126
100   102  100   102    0     0    126      0 --:--:-- --:--:-- --:--:--   126
* Connection #0 to host sonar-sw.company.com left intact
[Pipeline] echo
{"errors":[{"msg"
[Pipeline] }

修复方案与排查思路

核心问题

Linux环境下的curl命令处理未加引号的URL变量时,若后续参数拼接出现特殊字符,或Jenkins环境变量未正确解析,会导致URL被拆分,请求路径错误触发404。

代码修复

给URL变量添加双引号,避免变量解析时的拆分问题,修正后的脚本如下:

#!/bin/bash
# set -v -e -o pipefail
sonar_api() {
    sq_url='https://sonar-sw.company.com/api/qualitygates/project_status'
    curl -vvv -u "${TOKEN}": \
        -G "$sq_url" \
        --data-urlencode "projectKey=pba" \
        --data-urlencode "pullRequest=${GERRIT_CHANGE_NUMBER}-${GERRIT_PATCHSET_NUMBER}"
}
sonar_api

额外排查步骤

  • 验证Jenkins环境变量:在任务中添加echo "GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER, GERRIT_PATCHSET_NUMBER=$GERRIT_PATCHSET_NUMBER",确认变量值是否正确传递
  • 打印最终请求URL:在curl命令前添加echo "Final URL: $sq_url?projectKey=pba&pullRequest=${GERRIT_CHANGE_NUMBER}-${GERRIT_PATCHSET_NUMBER}",对比Mac和Linux环境下的URL是否一致
  • 检查Linux环境curl版本:执行curl --version确认版本,不同版本的-G参数处理可能存在差异,必要时更新curl

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:32:46