
在 github actions 中运行 allure + testng 自动化测试时,因 allure-results 目录权限不足导致报告写入失败(permission denied),本文提供精准、可复现的修复步骤与最佳实践。
在 github actions 中运行 allure + testng 自动化测试时,因 allure-results 目录权限不足导致报告写入失败(permission denied),本文提供精准、可复现的修复步骤与最佳实践。
当 Allure 在 GitHub Actions 的 Ubuntu 运行器上尝试向 allure-results/ 目录写入 JSON 测试容器文件(如 xxx-container.json)时,抛出 java.io.FileNotFoundException: ... (Permission denied) 异常,根本原因在于:Maven Surefire 插件启动的 JVM 进程默认无权在当前工作目录下创建或写入该路径下的文件——尤其当 allure-results 目录尚未被显式创建、或由不同用户(如 root 与 runner)上下文混用时,Linux 文件系统权限机制会阻止写操作。
关键修复:显式创建目录并赋予写权限
仅靠 mvn test 命令无法保证 allure-results 目录在 CI 环境中被正确初始化并具备写权限。必须在 mvn test 执行后、Allure 报告生成前,主动创建目标目录结构并设置宽松但安全的权限:
- name: Update allure-results folder permissions
run: |
mkdir -p allure-results/Reports/
chmod 777 -R allure-results/Reports/✅ mkdir -p 确保路径存在(含嵌套子目录),避免因目录缺失导致后续写入失败;
✅ chmod 777 -R 赋予所有用户读、写、执行权限(仅限 CI 临时环境,无安全风险);
⚠️ 注意:777 在本地开发环境不推荐,但在 GitHub Actions 的隔离、一次性 runner 实例中是安全且必要的——它解决了 Java 进程与文件系统之间因 UID/GID 不一致引发的权限壁垒。
完整修正后的 workflow 片段(关键步骤高亮):
CNB 云原生构建平台的 Git 操作技能,支持代码克隆、提交、推送、分支管理、Merge Request 管理、流水线触发与结果读取。初次使用需收集用户的 Git 用户名和邮箱。
- name: Build with Maven
run: mvn test -P placeOrder_stage -Denv=stage
# ? 必须添加:确保 Allure 结果目录可写
- name: Update allure-results folder permissions
run: |
mkdir -p allure-results/Reports/
chmod 777 -R allure-results/Reports/
- name: Generate Allure Report
uses: simple-elf/allure-report-action@master
if: always()
with:
allure_results: allure-results/Reports/*
gh_pages: gh-pages
allure_report: allure-report
allure_history: allure-history
- name: Deploy to GitHub Pages
if: always()
uses: peaceiris/actions-gh-pages@v2
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_branch: gh-pages
publish_dir: ./allure-history额外建议(提升稳定性):
- ✅ 在 pom.xml 中显式配置 Allure 结果输出路径(避免依赖默认值):
<plugin> <groupId>io.qameta.allure</groupId> <artifactId>allure-maven</artifactId> <version>2.11.2</version> <configuration> <resultsDirectory>allure-results/Reports</resultsDirectory> </configuration> </plugin> - ✅ 使用 actions/setup-java@v4 替代 v3(更稳定),并确认 allure-commandline 是否需显式安装(部分插件版本依赖 CLI);
- ❌ 避免在 run 步骤中使用 sudo——GitHub Actions runner 默认无 root 权限,且 sudo 可能引发不可预期的环境差异。
通过上述权限修复与配置优化,Allure 报告将在 GitHub Actions 中稳定生成并成功部署至 GitHub Pages,彻底解决 Could not write Allure test result container 错误。

















