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

BitBucket Pipeline输出文件未创建/保存问题排查

问题描述

以下是我的BitBucket YML文件中的质量检查步骤定义:

- step: &check_code_quality
    name: Run Quality Check
    script:
      - echo $BITBUCKET_COMMIT
      - git fetch origin --no-tags --depth=100 "+refs/heads/*:refs/remotes/origin/*"
      - git diff origin/master... --name-only
      - git diff origin/master...$BITBUCKET_COMMIT --name-only > diff.txt
      - cat diff.txt
      - chmod +x ./scripts/python/cicd/generate_pmd_target.py
      - export TARGET=$(python ./scripts/python/cicd/generate_pmd_target.py ./diff.txt)
      - export SAFE_BRANCH=$(echo ${BITBUCKET_BRANCH} | tr '/' '_')
      - export OUTPUT_FILENAME="./scripts/pmd_${SAFE_BRANCH}.html"
      - touch "$OUTPUT_FILENAME"
      - echo pwd
      - echo "OUTPUT_FILENAME $OUTPUT_FILENAME"
      - sf scanner run --format html --target $TARGET --engine pmd,eslint-lwc --category Best Practices,Error Prone,Performance,Security,problem --outfile $OUTPUT_FILENAME
    after-script:
      - cat "$OUTPUT_FILENAME"
    artifacts:
      - "$OUTPUT_FILENAME"

日志显示“Rule violations were written to pmd_release_LanguagePicker-Test-4.csv”,但指定的HTML输出文件既未出现在artifacts区域,也不存在于scripts文件夹中,请问问题出在哪里?

排查与解决方案

核心问题是sf scanner run命令未按预期生成HTML文件,导致后续artifacts无法捕获目标文件,具体排查方向如下:

1. 检查引擎对HTML格式的支持性

Salesforce Scanner的eslint-lwc引擎不支持HTML输出格式,当你同时指定pmd和eslint-lwc两个引擎时,scanner会因格式不兼容自动 fallback 到默认的CSV格式输出。

解决方法:

  • 拆分命令分别生成对应格式的报告:
    # 为pmd生成HTML报告
    sf scanner run --format html --target $TARGET --engine pmd --category Best Practices,Error Prone,Performance,Security,problem --outfile ./scripts/pmd_${SAFE_BRANCH}.html
    # 为eslint-lwc生成它支持的格式(比如JSON)
    sf scanner run --format json --target $TARGET --engine eslint-lwc --category problem --outfile ./scripts/eslint_${SAFE_BRANCH}.json
    
  • 或者仅使用支持HTML格式的pmd引擎执行扫描。

2. 验证$TARGET变量的有效性

如果generate_pmd_target.py脚本生成的$TARGET为空,scanner会扫描整个代码库,可能触发格式参数异常。你可以在脚本中添加日志验证变量值:

echo "扫描目标路径:$TARGET"

若$TARGET为空,需检查diff.txt是否有内容,以及generate_pmd_target.py脚本的解析逻辑是否正确。

3. 修正路径与权限问题

  • 你当前用echo pwd无法打印实际工作目录,应替换为pwd,确认当前路径是否与预期一致:
    # 替换原echo pwd
    pwd
    
  • 检查./scripts目录的写入权限:
    ls -ld ./scripts
    echo "当前执行用户:$(whoami)"
    
    若权限不足,可添加chmod +w ./scripts赋予写入权限。

4. 捕获命令执行错误

在sf scanner run命令后添加错误检查,判断命令是否执行成功,避免因命令失败导致文件未生成:

sf scanner run --format html --target $TARGET --engine pmd,eslint-lwc --category Best Practices,Error Prone,Performance,Security,problem --outfile $OUTPUT_FILENAME
# 检查命令执行状态
if [ $? -ne 0 ]; then
  echo "扫描命令执行失败"
  exit 1
fi

5. 优化Artifacts配置

若文件确实生成但未出现在artifacts中,可尝试使用绝对路径配置:

artifacts:
  - "$(pwd)/scripts/pmd_${SAFE_BRANCH}.html"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:13:12