通过GitHub Action部署SpringBoot到Azure Web App时遇测试错误
解决方案:GitHub Action部署SpringBoot到Azure Web App测试失败问题
问题根源
当前错误出现在build阶段的Maven测试环节:执行mvn clean install时,Spring Boot测试类SchoolManagementAppApplicationTests尝试加载ApplicationContext,但GitHub Action的build runner中未运行MySQL服务,导致数据库连接失败,测试报错。你在deploy阶段启动MySQL的操作对build阶段的测试没有作用。
修复方案
方案1:临时跳过测试(快速解决)
修改build步骤中的Maven命令,跳过测试阶段直接构建打包:
- name: Build with Maven run: mvn clean install -DskipTests
方案2:在build阶段启动MySQL服务(保留测试)
在build job中添加MySQL服务,让测试能正常连接数据库:
jobs: build: runs-on: ubuntu-latest services: mysql: image: mysql:8.0 ports: - 3306:3306 env: MYSQL_ROOT_PASSWORD: '@Swasti123456' MYSQL_DATABASE: 'school' options: --health-cmd="mysqladmin ping -h mysql --silent" --health-interval=10s --health-timeout=5s --health-retries=3 steps: - uses: actions/checkout@v4 - name: Set up Java version uses: actions/setup-java@v4 with: java-version: '17' distribution: 'microsoft' - name: Wait for MySQL to be ready run: | until docker exec mysql mysqladmin -u root -p@Swasti123456 ping --silent; do echo "Waiting for MySQL to be ready..." sleep 5 done - name: Build with Maven run: mvn clean install - name: Upload artifact for deployment job uses: actions/upload-artifact@v4 with: name: java-app path: '${{ github.workspace }}/target/*.jar'
同时需要调整测试环境的数据库连接配置:
- 添加
application-test.properties配置文件:
spring.datasource.url=jdbc:mysql://mysql:3306/school spring.datasource.username=root spring.datasource.password=@Swasti123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect spring.jpa.hibernate.ddl-auto=update
- 在测试类上指定使用测试配置:
@SpringBootTest @ActiveProfiles("test") class SchoolManagementAppApplicationTests { // 测试代码 }
方案3:部署后的数据库连接注意事项
部署到Azure Web App后,当前配置的localhost:3306MySQL无法被云服务访问,需额外处理:
- 若使用本地MySQL:需暴露公网IP和端口,修改Azure Web App的数据库连接配置为你的公网IP,并确保本地防火墙允许Azure IP访问
- 推荐方案:将MySQL托管到Azure Database for MySQL,连接更稳定且无需暴露本地服务
内容的提问来源于stack exchange,提问作者Swasti Ranjan
相关产品推荐
相关产品推荐

