
本文详解如何在 GitHub Actions 中可靠执行 Quarkus 应用的自动化测试,避免 quarkus:test 命令导致的 CI 无限挂起问题,并推荐符合 CI 场景的标准 Maven 生命周期调用方式。
本文详解如何在 github actions 中可靠执行 quarkus 应用的自动化测试,避免 `quarkus:test` 命令导致的 ci 无限挂起问题,并推荐符合 ci 场景的标准 maven 生命周期调用方式。
Quarkus 提供了强大的开发时体验(如热重载与持续测试),但其 quarkus:test 目标本质上是为本地交互式开发设计的——它会启动一个长期运行的测试服务器,监听源码变更并自动重跑相关测试。这种行为在 GitHub Actions 等无交互、短生命周期的 CI 环境中会导致作业卡在命令行提示符(如 Press [q] to quit, [r] to restart, [h] for help >),最终超时失败。
✅ 正确做法:完全弃用 ./mvnw quarkus:test,改用标准 Maven 生命周期目标
Quarkus 项目默认已将测试集成到 test 阶段(通过 quarkus-junit5 等扩展)。只要确保 pom.xml 中配置了正确的测试插件(如 maven-surefire-plugin),以下任一命令即可在 CI 中完整、非交互式地运行所有测试并正常退出:
- name: Run tests (standard Maven way) run: mvn test -B
或更推荐使用 verify(包含测试 + 验证阶段,适合 CI 完整门禁):
- name: Verify with tests run: mvn verify -B
⚠️ 注意事项:
快速、无JavaScript的GitHub浏览器,为AI代理优化。浏览公开仓库、读取文件、查看README,加载时间<500ms。PRO版通过GitHub OAuth支持私有仓库。
-
-B(Batch Mode)参数必须显式添加,它禁用所有交互式提示,强制 Maven 以非阻塞方式运行; -
quarkus.test.continuous-testing=disabled是quarkus:dev模式下的有效属性,对quarkus:test命令无效,且quarkus.test.disable-continuous-testing=true并非合法配置项,不应出现在 CI 脚本中; - 若你已在
mvn package步骤中完成构建,则package默认已触发test阶段(除非<skiptests></skiptests>显式启用),因此单独的test步骤通常非必需;但为清晰表达意图与便于调试,建议显式执行mvn test或mvn verify; - 如需跳过测试(仅限特殊场景),应使用
-Dmaven.test.skip=true(跳过编译测试类)或-DskipTests(跳过执行),而非尝试禁用不存在的 Quarkus 属性。
? 推荐优化后的完整工作流示例(含 JDK 17、Maven 缓存与验证):
name: Quarkus CI Pipeline
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin' # 替代已废弃的 'adopt'
- name: Cache Maven dependencies
uses: actions/cache@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- name: Build and run tests
run: mvn verify -B -Dquarkus.profile=test
# 可选:指定 Quarkus profile(如 test)以加载对应配置
- name: Package artifact (optional)
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
run: mvn package -B -DskipTests? 总结:GitHub Actions 的核心原则是确定性、可终止、无交互。Quarkus 的 quarkus:test 违背了这一原则,而标准 Maven 生命周期(test/verify)天然适配 CI。删除冗余的 quarkus:test 步骤,坚持使用 mvn verify -B,即可获得稳定、快速、可预期的 Quarkus 测试流水线。

















