235.md 9.6 KB
Newer Older
Lab机器人's avatar
readme  
Lab机器人 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
# Testing PHP projects

> 原文:[https://docs.gitlab.com/ee/ci/examples/php.html](https://docs.gitlab.com/ee/ci/examples/php.html)

*   [Test PHP projects using the Docker executor](#test-php-projects-using-the-docker-executor)
    *   [Test against different PHP versions in Docker builds](#test-against-different-php-versions-in-docker-builds)
    *   [Custom PHP configuration in Docker builds](#custom-php-configuration-in-docker-builds)
*   [Test PHP projects using the Shell executor](#test-php-projects-using-the-shell-executor)
    *   [Test against different PHP versions in Shell builds](#test-against-different-php-versions-in-shell-builds)
    *   [Install custom extensions](#install-custom-extensions)
*   [Extend your tests](#extend-your-tests)
    *   [Using atoum](#using-atoum)
    *   [Using Composer](#using-composer)
*   [Access private packages or dependencies](#access-private-packages-or-dependencies)
*   [Use databases or other services](#use-databases-or-other-services)
*   [Testing things locally](#testing-things-locally)
*   [Example project](#example-project)

# Testing PHP projects[](#testing-php-projects "Permalink")

本指南涵盖了 PHP 项目的基本构建说明.

涵盖了两种测试方案:使用 Docker 执行程序和使用 Shell 执行程序.

## Test PHP projects using the Docker executor[](#test-php-projects-using-the-docker-executor "Permalink")

尽管可以在任何系统上测试 PHP 应用程序,但这都需要开发人员进行手动配置. 为了克服这个问题,我们将使用可在 Docker Hub 中找到的官方[PHP Docker 映像](https://hub.docker.com/_/php) .

这将使我们能够针对不同版本的 PHP 测试 PHP 项目. 但是,并非所有事情都是即插即用的,您仍然需要手动配置一些东西.

与每项工作一样,您需要创建一个描述构建环境的有效`.gitlab-ci.yml` .

首先,让我们指定将用于作业过程的 PHP 映像(您可以在 Runner 的术语中阅读有关[使用 Docker 映像的](../docker/using_docker_images.html#what-is-an-image)更多信息,以了解映像的含义).

首先将图像添加到您的`.gitlab-ci.yml`

```
image: php:5.6 
```

官方图片很棒,但是缺少一些有用的测试工具. 我们需要首先准备构建环境. 解决此问题的一种方法是创建一个脚本,该脚本在完成实际测试之前会安装所有必备组件.

Let’s create a `ci/docker_install.sh` file in the root directory of our repository with the following content:

```
#!/bin/bash

# We need to install dependencies only for Docker
[[ ! -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 映像提供的脚本,可用于轻松安装扩展. 有关更多信息,请参阅[https://hub.docker.com/_/php 上](https://hub.docker.com/_/php)的文档.

现在,我们创建了包含构建环境的所有先决条件的脚本,让我们将其添加到`.gitlab-ci.yml`

```
...

before_script:
  - bash ci/docker_install.sh > /dev/null

... 
```

最后一步,使用`phpunit`运行实际测试:

```
...

test:app:
  script:
    - phpunit --configuration phpunit_myapp.xml

... 
```

最后,提交文件并将其推送到 GitLab,以查看构建成功(或失败).

最终的`.gitlab-ci.yml`应该类似于以下内容:

```
# Select image from https://hub.docker.com/_/php
image: php:5.6

before_script:
# Install dependencies
  - bash ci/docker_install.sh > /dev/null

test:app:
  script:
    - phpunit --configuration phpunit_myapp.xml 
```

### Test against different PHP versions in Docker builds[](#test-against-different-php-versions-in-docker-builds "Permalink")

针对多个版本的 PHP 进行测试非常容易. 只需添加另一个具有不同 Docker 映像版本的作业,即可由跑步者完成其余工作:

```
before_script:
# Install dependencies
  - 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[](#custom-php-configuration-in-docker-builds "Permalink")

有时,您需要通过将`.ini`文件放入`/usr/local/etc/php/conf.d/`来自定义 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[](#test-php-projects-using-the-shell-executor "Permalink")

Shell 执行程序在服务器上的终端会话中运行您的作业. 因此,为了测试您的项目,您首先需要确保已安装所有依赖项.

例如,在运行 Debian 8 的 VM 中,我们首先更新缓存,然后安装`phpunit``php5-mysql`

```
sudo apt-get update -y
sudo apt-get install -y phpunit php5-mysql 
```

接下来,将以下代码段添加到`.gitlab-ci.yml`

```
test:app:
  script:
    - phpunit --configuration phpunit_myapp.xml 
```

最后,推送到 GitLab 并开始测试!

### Test against different PHP versions in Shell builds[](#test-against-different-php-versions-in-shell-builds "Permalink")

[phpenv](https://github.com/phpenv/phpenv)项目使您可以轻松管理不同版本的 PHP,每个版本都有自己的配置. 当使用 Shell 执行程序测试 PHP 项目时,这特别有用.

您必须按照[上游安装指南](https://github.com/phpenv/phpenv#installation)`gitlab-runner`用户下将其安装在构建计算机[](https://github.com/phpenv/phpenv#installation) .

使用 phpenv 还可以通过以下方式轻松配置 PHP 环境:

```
phpenv config-add my_config.ini 
```

***重要说明:**似乎`phpenv/phpenv` [被放弃了](https://github.com/phpenv/phpenv/issues/57) . [madumlao / phpenv](https://github.com/madumlao/phpenv)上有一个分叉,试图使该项目[复活](https://github.com/madumlao/phpenv) . [CHH / phpenv](https://github.com/CHH/phpenv)似乎也是一个不错的选择. 选择任何提到的工具将与基本 phpenv 命令一起使用. 指导您选择正确的 phpenv 不在本教程的范围内.*

### Install custom extensions[](#install-custom-extensions "Permalink")

由于这是 PHP 环境的裸机安装,因此您可能需要一些构建机器上当前不存在的扩展.

要安装其他扩展,只需执行以下命令:

```
pecl install <extension> 
```

不建议将其添加到`.gitlab-ci.yml` . 您应该只执行一次此命令,仅用于设置构建环境.

## Extend your tests[](#extend-your-tests "Permalink")

### Using atoum[](#using-atoum "Permalink")

除了 PHPUnit,您可以使用任何其他工具来运行单元测试. 例如,您可以使用[atoum](https://github.com/atoum/atoum)

```
before_script:
  - wget http://downloads.atoum.org/nightly/mageekguy.atoum.phar

test:atoum:
  script:
    - php mageekguy.atoum.phar 
```

### Using Composer[](#using-composer "Permalink")

大多数 PHP 项目使用 Composer 来管理其 PHP 软件包. 为了在运行测试之前执行 Composer,只需在`.gitlab-ci.yml`添加以下`.gitlab-ci.yml`

```
...

# Composer stores all downloaded packages in the vendor/ directory.
# Do not use the following if the vendor/ directory is committed to
# your git repository.
cache:
  paths:
    - vendor/

before_script:
# Install composer dependencies
  - wget https://composer.github.io/installer.sig -O - -q | tr -d '\n' > installer.sig
  - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
  - 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;"
  - php composer-setup.php
  - php -r "unlink('composer-setup.php'); unlink('installer.sig');"
  - php composer.phar install

... 
```

## Access private packages or dependencies[](#access-private-packages-or-dependencies "Permalink")

如果您的测试套件需要访问私有存储库,则需要配置[SSH 密钥](../ssh_keys/README.html)才能克隆它.

## Use databases or other services[](#use-databases-or-other-services "Permalink")

大多数时候,您将需要一个正在运行的数据库才能运行测试. 如果您使用的是 Docker 执行器,则可以利用 Docker 链接到其他容器的功能. 使用 GitLab Runner,可以通过定义`service`来实现.

[CI 服务](../services/README.html)文档中涵盖了此功能.

## Testing things locally[](#testing-things-locally "Permalink")

使用 GitLab Runner 1.0,您还可以在本地测试所有更改. 从您的终端执行:

```
# Check using docker executor
gitlab-runner exec docker test:app

# Check using shell executor
gitlab-runner exec shell test:app 
```

## Example project[](#example-project "Permalink")

为了方便起见,我们建立了一个[示例 PHP 项目](https://gitlab.com/gitlab-examples/php) ,该[项目](https://gitlab.com/gitlab-examples/php)使用我们的公共[共享](../runners/README.html)运行器在[GitLab.com](https://gitlab.com)上运行.

想要破解吗? 只需对其进行分叉,提交并推送您的更改. 稍后,公共跑步者将选择更改并开始工作.