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
相关产品推荐
相关产品推荐

