如何在Travis CI上缓存phpunit.phar


How to cache phpunit.phar on Travis CI?

目前我使用Travis CI来测试Symfony Bundle。PHPUnit是由Composer安装的,因为PHPUnit被声明为dev依赖项:

{
    …
    "require" : {
        "php": ">=5.5",
        "symfony/symfony": "~2.7 || ~3.0"
    },
    "require-dev": {
        "doctrine/orm": "^2.4.8",
        "symfony/assetic-bundle": "~2.3",
        "symfony/monolog-bundle": "~2.4",
        "doctrine/doctrine-fixtures-bundle": "~2.3",
        "liip/functional-test-bundle": "~1.4",
        "phpunit/phpunit": "4.8.* || ~5.1"
    },
    …
}

即使我在每次构建后使用Travis CI的缓存来缓存~/.composer文件夹,使用Composer安装PHPUnit也需要一些时间,因为PHPUnit在安装之前必须检查所有依赖项。


因此,我考虑使用PHPUnit的PHAR版本,该版本可以安装在一个命令中:

wget https://phar.phpunit.de/phpunit.phar

但如果我在Travis CI上使用这个命令,PHPUnit将在每个构建中下载一次。是否有缓存此phpunit.phar文件的方法?一个简单的方法可能是将文件放在缓存中,检查该文件的日期,如果文件超过1天,则下载新版本,但可能有一个更简单的解决方案。

PHPUnit有--self-update选项,但它将在下一个主要版本中删除。

您可以将Travis配置为在构建之间保留某些目录(在其文档中称为"缓存")。

只需将以下配置添加到Travis配置文件中,/vendor目录就可以在构建中持久存在:

cache:
  directories:
    - vendor

composer.json文件发生更改时,您仍然应该在构建中包含一个composer install调用来更新依赖关系。为了进一步加快composer install进程,您还可以将composer.lock文件添加到版本控制中。


或者,您当然可以使用相同的功能在构建之间简单地保留一个下载的phpunit.phar文件。