Testing PHP projects
- Test PHP projects using the Shell executor
- Access private packages or dependencies
- Testing things locally
Testing PHP projects
本指南涵盖了 PHP 项目的基本构建说明.
涵盖了两种测试方案:使用 Docker 执行程序和使用 Shell 执行程序.
尽管可以在任何系统上测试 PHP 应用程序,但这都需要开发人员进行手动配置. 为了克服这个问题,我们将使用可在 Docker Hub 中找到的官方 .
这将使我们能够针对不同版本的 PHP 测试 PHP 项目. 但是,并非所有事情都是即插即用的,您仍然需要手动配置一些东西.
与每项工作一样,您需要创建一个描述构建环境的有效 .
首先,让我们指定将用于作业过程的 PHP 映像(您可以在 Runner 的术语中阅读有关使用 Docker 映像的更多信息,以了解映像的含义).
首先将图像添加到您的.gitlab-ci.yml
:
官方图片很棒,但是缺少一些有用的测试工具. 我们需要首先准备构建环境. 解决此问题的一种方法是创建一个脚本,该脚本在完成实际测试之前会安装所有必备组件.
Let’s create a ci/docker_install.sh
file in the root directory of our repository with the following content:
#!/bin/bash
[[ ! -e /.dockerenv ]] && exit 0
set -xe
# Install git (the php image doesn't have it) which is required by composer
apt-get update -yqq
apt-get install git -yqq
# Install phpunit, the tool that we will use for testing
curl --location --output /usr/local/bin/phpunit https://phar.phpunit.de/phpunit.phar
chmod +x /usr/local/bin/phpunit
# Install mysql driver
# Here you can install any other extension that you need
docker-php-ext-install pdo_mysql
您可能想知道docker-php-ext-install
是什么. 简而言之,它是官方 PHP Docker 映像提供的脚本,可用于轻松安装扩展. 有关更多信息,请参阅的文档.
现在,我们创建了包含构建环境的所有先决条件的脚本,让我们将其添加到.gitlab-ci.yml
:
...
before_script:
- bash ci/docker_install.sh > /dev/null
...
...
test:app:
script:
- phpunit --configuration phpunit_myapp.xml
...
最后,提交文件并将其推送到 GitLab,以查看构建成功(或失败).
最终的.gitlab-ci.yml
应该类似于以下内容:
针对多个版本的 PHP 进行测试非常容易. 只需添加另一个具有不同 Docker 映像版本的作业,即可由跑步者完成其余工作:
before_script:
- bash ci/docker_install.sh > /dev/null
# We test PHP5.6
test:5.6:
image: php:5.6
script:
- phpunit --configuration phpunit_myapp.xml
# We test PHP7.0 (good luck with that)
test:7.0:
image: php:7.0
script:
- phpunit --configuration phpunit_myapp.xml
Custom PHP configuration in Docker builds
有时,您需要通过将.ini
文件放入来自定义 PHP 环境. 为此,添加一个before_script
动作:
before_script:
- cp my_php.ini /usr/local/etc/php/conf.d/test.ini
当然, my_php.ini
必须存在于存储库的根目录中.
Test PHP projects using the Shell executor
Shell 执行程序在服务器上的终端会话中运行您的作业. 因此,为了测试您的项目,您首先需要确保已安装所有依赖项.
例如,在运行 Debian 8 的 VM 中,我们首先更新缓存,然后安装phpunit
和php5-mysql
:
sudo apt-get update -y
sudo apt-get install -y phpunit php5-mysql
接下来,将以下代码段添加到.gitlab-ci.yml
:
最后,推送到 GitLab 并开始测试!
phpenv项目使您可以轻松管理不同版本的 PHP,每个版本都有自己的配置. 当使用 Shell 执行程序测试 PHP 项目时,这特别有用.
您必须按照在gitlab-runner
用户下将其安装在构建计算机上 .
phpenv config-add my_config.ini
*重要说明:似乎phpenv/phpenv
. madumlao / phpenv上有一个分叉,试图使该项目 . CHH / phpenv似乎也是一个不错的选择. 选择任何提到的工具将与基本 phpenv 命令一起使用. 指导您选择正确的 phpenv 不在本教程的范围内.*
Install custom extensions
由于这是 PHP 环境的裸机安装,因此您可能需要一些构建机器上当前不存在的扩展.
要安装其他扩展,只需执行以下命令:
pecl install <extension>
不建议将其添加到.gitlab-ci.yml
. 您应该只执行一次此命令,仅用于设置构建环境.
除了 PHPUnit,您可以使用任何其他工具来运行单元测试. 例如,您可以使用atoum :
before_script:
- wget http://downloads.atoum.org/nightly/mageekguy.atoum.phar
test:atoum:
script:
- php mageekguy.atoum.phar
Using Composer
大多数 PHP 项目使用 Composer 来管理其 PHP 软件包. 为了在运行测试之前执行 Composer,只需在.gitlab-ci.yml
添加以下.gitlab-ci.yml
:
Access private packages or dependencies
如果您的测试套件需要访问私有存储库,则需要配置才能克隆它.
大多数时候,您将需要一个正在运行的数据库才能运行测试. 如果您使用的是 Docker 执行器,则可以利用 Docker 链接到其他容器的功能. 使用 GitLab Runner,可以通过定义service
来实现.
CI 服务文档中涵盖了此功能.
Testing things locally
使用 GitLab Runner 1.0,您还可以在本地测试所有更改. 从您的终端执行:
# Check using docker executor
gitlab-runner exec docker test:app