测试 PHP 项目
- Tier: 基础版, 专业版, 旗舰版
- Offering: JihuLab.com, 私有化部署
本指南涵盖了 PHP 项目的基本构建说明。
涵盖了两种测试场景:使用 Docker executor 和使用 Shell executor。
使用 Docker executor 测试 PHP 项目
虽然可以在任何系统上测试 PHP 应用程序,但这需要开发人员手动配置。为了解决这个问题,我们使用官方的 PHP Docker 镜像,可以在 Docker Hub 上找到。
这使我们能够针对不同版本的 PHP 测试 PHP 项目。然而,并不是所有的东西都是即插即用的,您仍然需要手动配置一些内容。
与每个任务一样,您需要创建一个有效的 .gitlab-ci.yml 来描述构建环境。
首先指定用于任务处理的 PHP 镜像。(您可以通过阅读关于 使用 Docker 镜像 的内容了解镜像的含义。)
首先将镜像添加到您的 .gitlab-ci.yml 中:
yamlimage: php:5.6
官方镜像很棒,但缺少一些有用的测试工具。我们需要首先准备构建环境。解决这个问题的一种方法是创建一个脚本,在实际测试之前安装所有必要条件。
让我们在我们存储库的根目录中创建一个 ci/docker_install.sh 文件,内容如下:
shell1#!/bin/bash 2 3# We need to install dependencies only for Docker 4[[ ! -e /.dockerenv ]] && exit 0 5 6set -xe 7 8# Install git (the php image doesn't have it) which is required by composer 9apt-get update -yqq 10apt-get install git -yqq 11 12# Install phpunit, the tool that we will use for testing 13curl --location --output /usr/local/bin/phpunit "https://phar.phpunit.de/phpunit.phar" 14chmod +x /usr/local/bin/phpunit 15 16# Install mysql driver 17# Here you can install any other extension that you need 18docker-php-ext-install pdo_mysql
您可能想知道 docker-php-ext-install 是什么。简而言之,它是由官方 PHP Docker 镜像提供的脚本,您可以用它轻松安装扩展。
现在我们创建了包含构建环境所有先决条件的脚本,让我们将其添加到 .gitlab-ci.yml 中:
yamlbefore_script: - bash ci/docker_install.sh > /dev/null
最后一步,使用 phpunit 运行实际测试:
yamltest:app: script: - phpunit --configuration phpunit_myapp.xml
最后,提交您的文件并推送到极狐 GitLab 以查看您的构建是否成功(或失败)。
最终的 .gitlab-ci.yml 应类似于以下内容:
yaml1default: 2 # Select image from https://hub.docker.com/_/php 3 image: php:5.6 4 before_script: 5 # Install dependencies 6 - bash ci/docker_install.sh > /dev/null 7 8test:app: 9 script: 10 - phpunit --configuration phpunit_myapp.xml
在 Docker 构建中针对不同的 PHP 版本进行测试
针对多个 PHP 版本进行测试非常简单。只需添加另一个具有不同 Docker 镜像版本的任务,runner 会完成其余的工作:
yaml1default: 2 before_script: 3 # Install dependencies 4 - bash ci/docker_install.sh > /dev/null 5 6# We test PHP5.6 7test:5.6: 8 image: php:5.6 9 script: 10 - phpunit --configuration phpunit_myapp.xml 11 12# We test PHP7.0 (good luck with that) 13test:7.0: 14 image: php:7.0 15 script: 16 - phpunit --configuration phpunit_myapp.xml
在 Docker 构建中自定义 PHP 配置
有时,您需要通过将 .ini 文件放入 /usr/local/etc/php/conf.d/ 来自定义 PHP 环境。为此添加一个 before_script 操作:
yamlbefore_script: - cp my_php.ini /usr/local/etc/php/conf.d/test.ini
当然,my_php.ini 必须存在于您的存储库的根目录中。
使用 Shell executor 测试 PHP 项目
shell executor 在您的服务器上的终端会话中运行您的任务。要测试您的项目,您必须首先确保所有依赖项都已安装。
例如,在运行 Debian 8 的虚拟机中,首先更新缓存,然后安装 phpunit 和 php5-mysql:
shellsudo apt-get update -y sudo apt-get install -y phpunit php5-mysql
接下来,将以下代码片段添加到您的 .gitlab-ci.yml 中:
yamltest:app: script: - phpunit --configuration phpunit_myapp.xml
最后,推送到极狐 GitLab 并让测试开始!
在 Shell 构建中针对不同的 PHP 版本进行测试
phpenv 项目允许您管理不同版本的 PHP,每个版本都有自己的配置。这在使用 Shell executor 测试 PHP 项目时特别有用。
使用 phpenv 还允许您通过以下方式配置 PHP 环境:
shellphpenv config-add my_config.ini
重要提示: 似乎 phpenv/phpenv 已被废弃。有一个分支 madumlao/phpenv 尝试将项目复活。CHH/phpenv 似乎也是一个不错的选择。选择任何提到的工具都可以使用基本的 phpenv 命令。指导您选择正确的 phpenv 超出了本教程的范围。*
安装自定义扩展
由于这是 PHP 环境的一个相当基础的安装,您可能需要一些当前构建机器上没有的扩展。
要安装其他扩展,请执行:
shellpecl install <extension>
不建议将此添加到 .gitlab-ci.yml 中。您应该只执行一次此命令,以设置构建环境。
扩展您的测试
使用 atoum
除了 PHPUnit,您可以使用任何其他工具来运行单元测试。例如,您可以使用 atoum:
yamltest:atoum: before_script: - wget http://downloads.atoum.org/nightly/mageekguy.atoum.phar script: - php mageekguy.atoum.phar
使用 Composer
大多数 PHP 项目使用 Composer 来管理他们的 PHP 软件包。要在运行测试之前执行 Composer,请将以下内容添加到您的 .gitlab-ci.yml 中:
yaml1# Composer stores all downloaded packages in the vendor/ directory. 2# Do not use the following if the vendor/ directory is committed to 3# your git repository. 4default: 5 cache: 6 paths: 7 - vendor/ 8 before_script: 9 # Install composer dependencies 10 - wget https://composer.github.io/installer.sig -O - -q | tr -d '\n' > installer.sig 11 - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" 12 - php -r "if (hash_file('SHA384', 'composer-setup.php') === file_get_contents('installer.sig')) { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" 13 - php composer-setup.php 14 - php -r "unlink('composer-setup.php'); unlink('installer.sig');" 15 - php composer.phar install
访问私有软件包或依赖项
如果您的测试套件需要访问私有存储库,您需要配置 SSH 密钥 以便能够克隆它。
使用数据库或其他服务
大多数时候,您需要一个正在运行的数据库才能运行测试。如果您使用的是 Docker executor,您可以利用 Docker 链接到其他容器。使用极狐 GitLab Runner,这可以通过定义一个 service 来实现。
此功能在CI 服务文档中有介绍。