InfoGrab Docs

PHP 프로젝트 테스트

요약

이 가이드는 PHP 프로젝트에 대한 기본 빌드 지침을 다룹니다. 두 가지 테스트 시나리오를 다룹니다: Docker executor 사용과 Shell executor 사용. PHP 앱을 모든 시스템에서 테스트할 수 있지만 개발자의 수동 구성이 필요합니다.

이 가이드는 PHP 프로젝트에 대한 기본 빌드 지침을 다룹니다.

두 가지 테스트 시나리오를 다룹니다: Docker executor 사용과 Shell executor 사용.

Docker executor를 사용한 PHP 프로젝트 테스트#

PHP 앱을 모든 시스템에서 테스트할 수 있지만 개발자의 수동 구성이 필요합니다. Docker Hub에 있는 공식 PHP Docker 이미지를 사용하여 이를 극복할 수 있습니다.

이를 통해 다양한 버전의 PHP에 대해 PHP 프로젝트를 테스트할 수 있습니다. 그러나 일부 사항은 여전히 수동으로 구성해야 합니다.

모든 잡과 마찬가지로 빌드 환경을 설명하는 유효한 .gitlab-ci.yml을 만들어야 합니다.

먼저 잡 프로세스에 사용할 PHP 이미지를 지정합니다. (러너 용어로 이미지가 무엇을 의미하는지 Docker 이미지 사용에서 더 읽을 수 있습니다.)

.gitlab-ci.yml에 이미지를 추가하는 것으로 시작합니다:

image: php:5.6

공식 이미지는 훌륭하지만 일부 테스트 도구가 부족합니다. 먼저 빌드 환경을 준비해야 합니다. 이를 위해 실제 테스트가 시작되기 전에 모든 사전 요구사항을 설치하는 스크립트를 만듭니다.

리포지터리의 루트 디렉토리에 다음 내용으로 ci/docker_install.sh 파일을 만듭니다:

#!/bin/bash

# You 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 you 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

마지막 단계는 phpunit을 사용하여 실제 테스트를 실행하는 것입니다:

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

마지막으로 파일을 커밋하고 GitLab에 푸시하여 빌드가 성공하는지(또는 실패하는지) 확인합니다.

최종 .gitlab-ci.yml은 다음과 유사해야 합니다:

default:
  # 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

Docker 빌드에서 다양한 PHP 버전에 대한 테스트#

PHP의 여러 버전에 대한 테스트는 매우 쉽습니다. 다른 Docker 이미지 버전을 가진 다른 잡을 추가하기만 하면 러너가 나머지를 처리합니다:

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

# Test PHP5.6
test:5.6:
  image: php:5.6
  script:
    - phpunit --configuration phpunit_myapp.xml

# Test PHP7.0 (good luck with that)
test:7.0:
  image: php:7.0
  script:
    - phpunit --configuration phpunit_myapp.xml

Docker 빌드에서 커스텀 PHP 구성#

.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는 리포지터리의 루트 디렉토리에 있어야 합니다.

Shell executor를 사용한 PHP 프로젝트 테스트#

Shell executor는 서버의 터미널 세션에서 잡을 실행합니다. 프로젝트를 테스트하려면 먼저 모든 의존성이 설치되어 있는지 확인해야 합니다.

예를 들어, Debian 8을 실행하는 VM에서 먼저 캐시를 업데이트한 다음 phpunitphp5-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에 푸시하고 테스트를 시작합니다!

Shell 빌드에서 다양한 PHP 버전에 대한 테스트#

phpenv 프로젝트를 사용하면 각각 자체 구성을 가진 다양한 PHP 버전을 관리할 수 있습니다. 이는 Shell executor로 PHP 프로젝트를 테스트할 때 특히 유용합니다.

업스트림 설치 가이드에 따라 gitlab-runner 사용자로 빌드 머신에 설치해야 합니다.

phpenv를 사용하면 다음을 통해 PHP 환경을 구성할 수도 있습니다:

phpenv config-add my_config.ini

중요 참고: phpenv/phpenv더 이상 유지 관리되지 않는 것 같습니다. 프로젝트를 다시 살리려는 시도인 포크 madumlao/phpenv가 있습니다. CHH/phpenv도 좋은 대안인 것 같습니다. 언급된 도구 중 하나를 선택하면 기본 phpenv 명령으로 작동합니다. 올바른 phpenv를 선택하는 방법을 안내하는 것은 이 튜토리얼의 범위를 벗어납니다.

커스텀 확장 설치#

이것은 PHP 환경의 상당히 기본적인 설치이기 때문에 빌드 머신에 현재 없는 일부 확장이 필요할 수 있습니다.

추가 확장을 설치하려면 다음을 실행합니다:

pecl install <extension>

이것을 .gitlab-ci.yml에 추가하는 것은 권장하지 않습니다. 빌드 환경을 설정하기 위해 이 명령을 한 번만 실행해야 합니다.

테스트 확장#

atoum 사용#

PHPUnit 대신 다른 도구를 사용하여 단위 테스트를 실행할 수 있습니다. 예를 들어 atoum을 사용할 수 있습니다:

test:atoum:
  before_script:
    - wget http://downloads.atoum.org/nightly/mageekguy.atoum.phar
  script:
    - php mageekguy.atoum.phar

Composer 사용#

대부분의 PHP 프로젝트는 PHP 패키지를 관리하기 위해 Composer를 사용합니다. 테스트를 실행하기 전에 Composer를 실행하려면 .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.
default:
  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

비공개 패키지 또는 의존성 접근#

테스트 스위트가 비공개 리포지터리에 접근해야 하는 경우 클론할 수 있도록 SSH 키를 구성해야 합니다.

데이터베이스 또는 기타 서비스 사용#

대부분의 경우 테스트를 실행하려면 실행 중인 데이터베이스가 필요합니다. Docker executor를 사용하는 경우 Docker를 활용하여 다른 컨테이너에 연결할 수 있습니다. GitLab Runner를 사용하면 service를 정의하여 이를 달성할 수 있습니다.

이 기능은 CI 서비스 문서에서 다룹니다.

예시 프로젝트#

편의를 위해 공개적으로 사용 가능한 인스턴스 러너를 사용하여 GitLab.com에서 실행되는 PHP 예시 프로젝트가 있습니다.

직접 수정해보고 싶으신가요? 포크하고 커밋하고 변경 사항을 푸시하면 됩니다. 잠시 후 변경 사항이 공용 러너에 의해 선택되고 잡이 시작됩니다.

PHP 프로젝트 테스트

Tier: Free, Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기
요약

이 가이드는 PHP 프로젝트에 대한 기본 빌드 지침을 다룹니다. 두 가지 테스트 시나리오를 다룹니다: Docker executor 사용과 Shell executor 사용. PHP 앱을 모든 시스템에서 테스트할 수 있지만 개발자의 수동 구성이 필요합니다.

이 가이드는 PHP 프로젝트에 대한 기본 빌드 지침을 다룹니다.

두 가지 테스트 시나리오를 다룹니다: Docker executor 사용과 Shell executor 사용.

Docker executor를 사용한 PHP 프로젝트 테스트#

PHP 앱을 모든 시스템에서 테스트할 수 있지만 개발자의 수동 구성이 필요합니다. Docker Hub에 있는 공식 PHP Docker 이미지를 사용하여 이를 극복할 수 있습니다.

이를 통해 다양한 버전의 PHP에 대해 PHP 프로젝트를 테스트할 수 있습니다. 그러나 일부 사항은 여전히 수동으로 구성해야 합니다.

모든 잡과 마찬가지로 빌드 환경을 설명하는 유효한 .gitlab-ci.yml을 만들어야 합니다.

먼저 잡 프로세스에 사용할 PHP 이미지를 지정합니다. (러너 용어로 이미지가 무엇을 의미하는지 Docker 이미지 사용에서 더 읽을 수 있습니다.)

.gitlab-ci.yml에 이미지를 추가하는 것으로 시작합니다:

image: php:5.6

공식 이미지는 훌륭하지만 일부 테스트 도구가 부족합니다. 먼저 빌드 환경을 준비해야 합니다. 이를 위해 실제 테스트가 시작되기 전에 모든 사전 요구사항을 설치하는 스크립트를 만듭니다.

리포지터리의 루트 디렉토리에 다음 내용으로 ci/docker_install.sh 파일을 만듭니다:

#!/bin/bash

# You 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 you 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

마지막 단계는 phpunit을 사용하여 실제 테스트를 실행하는 것입니다:

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

마지막으로 파일을 커밋하고 GitLab에 푸시하여 빌드가 성공하는지(또는 실패하는지) 확인합니다.

최종 .gitlab-ci.yml은 다음과 유사해야 합니다:

default:
  # 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

Docker 빌드에서 다양한 PHP 버전에 대한 테스트#

PHP의 여러 버전에 대한 테스트는 매우 쉽습니다. 다른 Docker 이미지 버전을 가진 다른 잡을 추가하기만 하면 러너가 나머지를 처리합니다:

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

# Test PHP5.6
test:5.6:
  image: php:5.6
  script:
    - phpunit --configuration phpunit_myapp.xml

# Test PHP7.0 (good luck with that)
test:7.0:
  image: php:7.0
  script:
    - phpunit --configuration phpunit_myapp.xml

Docker 빌드에서 커스텀 PHP 구성#

.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는 리포지터리의 루트 디렉토리에 있어야 합니다.

Shell executor를 사용한 PHP 프로젝트 테스트#

Shell executor는 서버의 터미널 세션에서 잡을 실행합니다. 프로젝트를 테스트하려면 먼저 모든 의존성이 설치되어 있는지 확인해야 합니다.

예를 들어, Debian 8을 실행하는 VM에서 먼저 캐시를 업데이트한 다음 phpunitphp5-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에 푸시하고 테스트를 시작합니다!

Shell 빌드에서 다양한 PHP 버전에 대한 테스트#

phpenv 프로젝트를 사용하면 각각 자체 구성을 가진 다양한 PHP 버전을 관리할 수 있습니다. 이는 Shell executor로 PHP 프로젝트를 테스트할 때 특히 유용합니다.

업스트림 설치 가이드에 따라 gitlab-runner 사용자로 빌드 머신에 설치해야 합니다.

phpenv를 사용하면 다음을 통해 PHP 환경을 구성할 수도 있습니다:

phpenv config-add my_config.ini

중요 참고: phpenv/phpenv더 이상 유지 관리되지 않는 것 같습니다. 프로젝트를 다시 살리려는 시도인 포크 madumlao/phpenv가 있습니다. CHH/phpenv도 좋은 대안인 것 같습니다. 언급된 도구 중 하나를 선택하면 기본 phpenv 명령으로 작동합니다. 올바른 phpenv를 선택하는 방법을 안내하는 것은 이 튜토리얼의 범위를 벗어납니다.

커스텀 확장 설치#

이것은 PHP 환경의 상당히 기본적인 설치이기 때문에 빌드 머신에 현재 없는 일부 확장이 필요할 수 있습니다.

추가 확장을 설치하려면 다음을 실행합니다:

pecl install <extension>

이것을 .gitlab-ci.yml에 추가하는 것은 권장하지 않습니다. 빌드 환경을 설정하기 위해 이 명령을 한 번만 실행해야 합니다.

테스트 확장#

atoum 사용#

PHPUnit 대신 다른 도구를 사용하여 단위 테스트를 실행할 수 있습니다. 예를 들어 atoum을 사용할 수 있습니다:

test:atoum:
  before_script:
    - wget http://downloads.atoum.org/nightly/mageekguy.atoum.phar
  script:
    - php mageekguy.atoum.phar

Composer 사용#

대부분의 PHP 프로젝트는 PHP 패키지를 관리하기 위해 Composer를 사용합니다. 테스트를 실행하기 전에 Composer를 실행하려면 .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.
default:
  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

비공개 패키지 또는 의존성 접근#

테스트 스위트가 비공개 리포지터리에 접근해야 하는 경우 클론할 수 있도록 SSH 키를 구성해야 합니다.

데이터베이스 또는 기타 서비스 사용#

대부분의 경우 테스트를 실행하려면 실행 중인 데이터베이스가 필요합니다. Docker executor를 사용하는 경우 Docker를 활용하여 다른 컨테이너에 연결할 수 있습니다. GitLab Runner를 사용하면 service를 정의하여 이를 달성할 수 있습니다.

이 기능은 CI 서비스 문서에서 다룹니다.

예시 프로젝트#

편의를 위해 공개적으로 사용 가능한 인스턴스 러너를 사용하여 GitLab.com에서 실행되는 PHP 예시 프로젝트가 있습니다.

직접 수정해보고 싶으신가요? 포크하고 커밋하고 변경 사항을 푸시하면 됩니다. 잠시 후 변경 사항이 공용 러너에 의해 선택되고 잡이 시작됩니다.