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

CircleCI脚本问题:权限拒绝、Token解码错误及退出码1

问题解决思路与方案

针对你CircleCI脚本中出现的多个错误,逐个给出修复方案:

1. apt权限错误(Permission denied)

报错原因

CircleCI默认运行用户不是root,执行apt update时没有权限修改系统包管理目录。

修复方案

在apt命令前添加sudo,修改为:

sudo apt update && sudo apt install -y curl jq

2. Token解码错误(invalid number of segments)

报错原因

脚本中cx scan create命令的--apikey {api_key}是占位符,未替换为实际的Checkmarx API密钥。JWT格式的API密钥是三段式(用.分隔),占位符不符合格式要求,导致解码失败。

修复方案

  1. 在CircleCI项目的环境变量中添加Checkmarx API密钥(比如命名为CX_API_KEY)
  2. 将脚本中的{api_key}替换为环境变量引用,同时用双引号包裹避免特殊字符问题:
--apikey "$CX_API_KEY"

3. 脚本语法与逻辑问题

3.1 Maven命令换行错误

原脚本中mvn命令的-Dexpression参数被拆分到两行,会导致Maven无法识别参数。修复为单行命令:

VERSION=$(mvn org.apache.maven.plugins:maven-help-plugin:3.1.0:evaluate -Dexpression=project.version -q -DforceStdout)
ARTIFACT_ID=$(mvn org.apache.maven.plugins:maven-help-plugin:3.1.0:evaluate -Dexpression=project.artifactId -q -DforceStdout)

3.2 Jira Fix Version处理逻辑优化

当Jira工单没有fixVersions字段时,jq会返回null,后续sort处理会出错。修改curl命令,确保无数据时返回空值:

JIRA_FIX_VERSION=$(curl -u xy@xxx.co:$DEV_JIRA_TOKEN -X GET https://xxx.yyy.net/rest/api/latest/issue/$JIRA_ID | jq -r '.fields.fixVersions[]?.name // empty')

同时调整判断逻辑,处理空值情况:

if [[ -z "$FIX_VERSION" || "$FIX_VERSION" == "null" ]]; then
  echo "No fix version tagged in Jira ticket thus using the default value"
  export FIX_VERSION="abc"
fi

3.3 脚本语法闭合问题

原脚本中if [ -f "$HOME/jira_id.txt" ]; then块缺少对应的fi,会导致脚本语法错误,需要在bash -c命令前添加fi闭合if语句。

3.4 变量引用的空格处理

bash -c中的变量(如$ARTIFACT_ID、$FIX_VERSION)如果包含空格,会被拆分为多个参数,需要用双引号包裹:

bash -c "./cx scan create -s ~/repo --project-name \"$ARTIFACT_ID\" --project-tags \"$FIX_VERSION\" --branch \"$CIRCLE_BRANCH\" --apikey \"$CX_API_KEY\"; E_CODE=\$?; if [[ \$E_CODE -eq 0 ]] || [[ \$E_CODE -eq 156 ]]; then echo Success with code \$E_CODE; exit 0; else echo Fail with code \$E_CODE; exit 1; fi"

修复后的完整脚本片段示例

- run:
    name: cxone - Capture FIX_VERSION
    command: |
      if [ -f "$HOME/jira_id.txt" ]; then
        JIRA_ID=$(cat $HOME/jira_id.txt)
        sudo apt update && sudo apt install -y curl jq
        VERSION=$(mvn org.apache.maven.plugins:maven-help-plugin:3.1.0:evaluate -Dexpression=project.version -q -DforceStdout)
        ARTIFACT_ID=$(mvn org.apache.maven.plugins:maven-help-plugin:3.1.0:evaluate -Dexpression=project.artifactId -q -DforceStdout)
        curl -sLJO https://github.com/Checkmarx/ast-cli/releases/download/2.0.52/ast-cli_linux_x64.tar.gz
        tar -xzvf ast-cli_linux_x64.tar.gz
        rm -rf ast-cli_linux_x64.tar.gz
        JIRA_FIX_VERSION=$(curl -u xy@xxx.co:$DEV_JIRA_TOKEN -X GET https://xxx.yyy.net/rest/api/latest/issue/$JIRA_ID | jq -r '.fields.fixVersions[]?.name // empty')
        FIX_VERSION=$(echo "$JIRA_FIX_VERSION" | sort -V | head -n 1)
        if [[ -z "$FIX_VERSION" || "$FIX_VERSION" == "null" ]]; then
          echo "No fix version tagged in Jira ticket thus using the default value"
          export FIX_VERSION="abc"
        fi
        bash -c "./cx scan create -s ~/repo --project-name \"$ARTIFACT_ID\" --project-tags \"$FIX_VERSION\" --branch \"$CIRCLE_BRANCH\" --apikey \"$CX_API_KEY\"; E_CODE=\$?; if [[ \$E_CODE -eq 0 ]] || [[ \$E_CODE -eq 156 ]]; then echo Success with code \$E_CODE; exit 0; else echo Fail with code \$E_CODE; exit 1; fi"
      fi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:53:18