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

CodePipeline运行时buildspec.yml用jq处理JSON报错 关联SonarQube质量门禁校验

问题根因

报错的核心是shell命令逻辑写法错误:

  • AWS CodeBuild的$CODEBUILD_BUILD_SUCCEEDING是只读的状态标识变量,默认值为1,你直接在条件分支内写$CODEBUILD_BUILD_SUCCEEDING -eq 0等价于执行1 -eq 0,shell会把1当做命令去查找,自然会抛出1: not found的报错。
  • 你原本想实现的「标记构建失败、终止流程」逻辑,不能通过修改该变量实现,需要直接返回非0退出码触发CodeBuild的失败机制。
修复方案

直接替换build段里的条件判断行即可,优化后的逻辑还会额外处理接口请求失败、result.json格式异常的场景,避免漏判:

pre_build:
  commands:
    - echo Logging in to Amazon ECR...
    - $(aws ecr get-login --no-include-email --region $AWS_DEFAULT_REGION)
build:
  commands:
    - wget # 此处补充你原本的sonar-scanner安装包下载地址
    - apt-get update && apt-get install -y lcov jq
    - unzip sonar-scanner-4.6.2.2472-linux-caratlane.zip
    - export PATH=$PATH:./sonar-scanner-4.6.2.2472-linux/bin/
    - sonar-scanner -Dsonar.projectKey=<proj_key> -Dsonar.sources=. -Dsonar.host.url=<你的SonarQube服务地址>
    - sleep 10
    - curl <sonarqube_api_to_get_quality_gate_check> > result.json
    - cat result.json
    # 替换原有判断行为以下两行逻辑
    - QUALITY_GATE_STATUS=$(jq -r '.projectStatus.status' result.json)
    - if [ "$QUALITY_GATE_STATUS" = "ERROR" ] || [ "$QUALITY_GATE_STATUS" = "null" ]; then exit 1; fi
    - echo Build started on `date`
    - echo Building the Docker image...
优化说明
  • 先把jq的解析结果存入变量,避免重复执行jq
  • 给比较的字符串加双引号,避免jq返回空值时出现shell语法错误
  • 新增$QUALITY_GATE_STATUS = "null"的判断:如果SonarQube接口请求失败、result.json格式异常,jq会返回null,此时也直接终止构建,避免质量门禁校验被绕过
  • 直接用exit 1返回非0退出码,CodeBuild会自动识别为构建失败,终止后续流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:36:03