我正在使用GitHub动作做一些自动化测试,我的应用程序是在Docker中开发的。
name: Docker Image CI
on:
push:
branches: [ master]
pull_request:
branches: [ master]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build the Docker image
run: docker-compose build
- name: up mysql and apache container runs
run: docker-compose up -d
- name: install dependencies
run: docker exec myapp php composer.phar install
- name: show running container
run: docker ps
- name: run unit test
run: docker exec myapp ./vendor/bin/phpunit
在步骤“show running container”中,我可以看到所有容器都在运行,但MySQL的状态为(health:因此,我的单元测试用例都失败了,因为它需要连接到MySQL。所以我可以知道是否有一种方法可以只在MySQL容器的状态正常时启动单元用例吗?
5条答案
按热度按时间j5fpnvbx1#
我想提供一个解决方案,不是一个聪明的,但它需要最低限度的配置和准备去,只是使用GitHub行动的睡眠。
假设:您的Mysql服务器将在30秒内启动并运行。
zsbz8rwp2#
你可以使用 * thegabriele 97/dockercompose-health-action*
aij0ehis3#
正如documentation所述:
若要处理此问题,请将应用程序设计为在失败后尝试重新建立与数据库的连接。如果应用程序重试连接,它最终可以连接到数据库。
如果你现在不能实现这个,你可以写一些简单的脚本,在数据库上无限期地尝试一个简单的语句。一旦脚本成功,你退出循环并开始你的单元测试。检查我提供的文档链接,你会发现有这样的脚本(
wait-for-it.sh
)的例子。5n0oy7gb4#
我的方法是用途:
1.在我
docker-compose.yml
文件中:1.在我的Github操作工作流程中:
zbdgwd5y5#
如文件所述:
在Linux和macOS运行程序上,使用sleep命令:
在Windows runner上,使用"开始-睡眠"命令: