我维护一个访问数据库的 PHP 库。 我使用 Gitlab CI 设置了自动化单元测试,他们使用测试矩阵来测试数据库引擎和 PHP 版本的各种组合。 我的
.gitlab-ci
配置文件目前看起来有点像这个:
test-php:
stage: test
parallel:
matrix:
- PHPVERSION: ["7.3", "7.4", "8.0", "8.2", "8.3"]
DBSERVICE: ["mysyql:8.0", "mysql:8.4", "mariadb:latest"]
image: php:$PHPVERSION
services:
- $DBSERVICE
before_script:
- ./tests/setup/mysql.sh
script:
- ./tests/run.sh
我想排除一种测试组合 - 特别是 PHP 7.3 与 MySQL 8.4 的测试,因为本机密码身份验证存在问题。 (我知道这些问题可以解决,但由于各种原因,我目前不想在这个测试套件中这样做:我只想排除那个测试。)
我知道我可以通过在
$PHPVERSION
脚本(或等效地在配置文件中)测试 $DBSERVICE
和 run.sh
来完成此操作,但这仍然会导致安装容器,这可能需要几分钟的时间。 由于与启动和配置 Docker 容器的成本相比,测试速度很快,因此我根本不想为排除的组合启动容器。
一个解决方案可以使用多个条目,如下所示:
test-php:
stage: test
parallel:
matrix:
- DBSERVICE: "mysql:8.4"
PHPVERSION: ["7.4", "8.0", "8.2", "8.3"]
- DBSERVICE: ["mysyql:8.0", "mariadb:latest"]
PHPVERSION: ["7.3", "7.4", "8.0", "8.2", "8.3"]
image: php:$PHPVERSION
services:
- $DBSERVICE
before_script:
- ./tests/setup/mysql.sh
script:
- ./tests/run.sh
通过这种方式,您可以选择与特定版本的数据库一起运行的 php 版本。在parallel:matrix的示例部分中做了类似的事情。