Travis CI是否检测多个.travis.yml?构建因PHPUnit报错失败求排查
首先,从你的构建日志能看出,PHPUnit执行时输出了使用说明并以退出码2结束——这个错误通常意味着PHPUnit找不到要运行的测试文件/目录,或者缺少必要的配置文件。下面帮你拆解问题并给出排查和解决步骤:
核心原因分析
Travis CI针对PHP项目的默认构建流程中,当你没有在.travis.yml里指定script步骤时,会自动执行phpunit命令。但这个命令需要明确知道要测试的内容:要么项目根目录存在phpunit.xml或phpunit.xml.dist配置文件(用来定义测试目录、规则等),要么你直接指定测试文件/目录路径。你的项目显然缺少这两者之一,导致PHPUnit无法正常执行测试。
排查与解决步骤
1. 先排除多.travis.yml的可能性
从Travis识别的配置内容来看,它已经正确加载了你根目录的配置文件(匹配你写的php:7.1、sudo: false等设置),所以多配置文件导致问题的概率很低。如果你还是怀疑,可以在本地仓库执行以下命令排查:
find . -name ".travis.yml"
如果只有根目录的那一个,就可以排除这个因素。
2. 解决PHPUnit执行的核心问题
你可以选择以下两种方案之一:
方案A:添加PHPUnit配置文件
在项目根目录创建phpunit.xml.dist文件,示例内容如下(根据你的项目结构调整测试目录):
<?xml version="1.0" encoding="UTF-8"?> <phpunit bootstrap="vendor/autoload.php" verbose="true" colors="true"> <testsuites> <testsuite name="Project Test Suite"> <directory>./tests</directory> </testsuite> </testsuites> </phpunit>
这个文件会告诉PHPUnit去tests目录下查找测试文件,同时使用Composer的自动加载文件。
方案B:在.travis.yml中明确指定测试路径
修改你的.travis.yml,添加script步骤,直接指定PHPUnit要运行的测试目录或文件:
sudo: false language: php php: - '7.1' script: phpunit tests/
(这里假设你的测试文件都放在tests目录下,根据实际情况调整路径)
3. 更稳妥的做法:使用项目依赖的PHPUnit
为了避免全局PHPUnit版本和项目不兼容的问题,建议你把PHPUnit添加为项目的开发依赖:
- 在
composer.json中添加:
"require-dev": { "phpunit/phpunit": "^6.4" }
(6.4版本和你日志里的版本一致,也可以根据PHP7.1兼容的版本调整)
2. 修改.travis.yml的script步骤,使用项目本地的PHPUnit:
script: ./vendor/bin/phpunit
这样Travis会在构建时通过composer install安装依赖,然后使用项目专属的PHPUnit版本,避免版本兼容问题。
内容的提问来源于stack exchange,提问作者MikeiLL

