PHP 프로젝트 테스트

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

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

두 가지 테스트 시나리오가 다루어집니다: Docker 실행기 및 셸 실행기 사용.

Docker 실행기를 사용하여 PHP 프로젝트 테스트

PHP 앱을 어떤 시스템에서든 테스트할 수 있지만, 개발자가 매뉴얼으로 구성해야 합니다. 이를 극복하기 위해 Docker Hub에서 찾을 수 있는 공식 PHP Docker 이미지를 사용합니다.

이를 통해 PHP 프로젝트를 다양한 PHP 버전에 대해 테스트할 수 있습니다. 그러나 모든 것이 플러그 앤 플레이는 아닙니다. 여전히 일부 구성이 매뉴얼으로 필요합니다.

모든 작업과 마찬가지로 빌드 환경을 설명하는 유효한 .gitlab-ci.yml을 작성해야 합니다.

먼저 작업 프로세스에 사용되는 PHP 이미지를 지정합니다. (이미지가 러너 용어에서 무엇을 의미하는지에 대해 자세히 알아보려면 도커 이미지 사용를 읽어보세요.)

.gitlab-ci.yml에 이미지를 추가해 시작하세요:

image: php:5.6

공식 이미지는 좋지만 테스트에 유용한 몇 가지 도구가 부족합니다. 빌드 환경을 먼저 준비해야 합니다. 이를 극복하는 한 가지 방법은 실제 테스트가 수행되기 전에 모든 필수 사항을 설치하는 스크립트를 작성하는 것입니다.

리포지터리의 루트 디렉터리에 다음 내용을 갖는 ci/docker_install.sh 파일을 작성하세요:

#!/bin/bash

# 도커 전용 의존성만 설치해야 함
[[ ! -e /.dockerenv ]] && exit 0

set -xe

# composer에서 필요한 git 설치
apt-get update -yqq
apt-get install git -yqq

# 테스트에 사용할 도구인 phpunit 설치
curl --location --output /usr/local/bin/phpunit "https://phar.phpunit.de/phpunit.phar"
chmod +x /usr/local/bin/phpunit

# mysql 드라이버 설치
# 여기에 필요한 다른 확장을 설치할 수 있음
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:
  # https://hub.docker.com/_/php에서 이미지 선택
  image: php:5.6
  before_script:
    # 의존성 설치
    - bash ci/docker_install.sh > /dev/null

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

Docker 빌드에서 다른 PHP 버전에 대해 테스트

다중 PHP 버전에 대해 테스트하는 것은 매우 쉽습니다. 다른 Docker 이미지 버전을 추가하면 러너가 나머지를 처리합니다:

default:
  before_script:
    # 의존성 설치
    - bash ci/docker_install.sh > /dev/null

# PHP5.6을 테스트합니다
test:5.6:
  image: php:5.6
  script:
    - phpunit --configuration phpunit_myapp.xml

# PHP7.0을 테스트합니다 (운이 좋아야 합니다)
test:7.0:
  image: php:7.0
  script:
    - phpunit --configuration phpunit_myapp.xml

Docker 빌드에서 사용자 정의 PHP 구성

PHP 환경을 사용자 정의해야 하는 경우 종속적입니다. .ini 파일을 /usr/local/etc/php/conf.d/에 넣어야 할 때 before_script 동작을 추가하세요:

before_script:
  - cp my_php.ini /usr/local/etc/php/conf.d/test.ini

물론, my_php.ini가 리포지터리의 루트 디렉터리에 있어야 합니다.

셸 실행기를 사용하여 PHP 프로젝트 테스트

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

예를 들어, 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에 푸시하여 테스트를 시작하세요!

셸 빌드에서 다른 PHP 버전에 대해 테스트

phpenv 프로젝트는 다른 구성을 가진 각각의 PHP 버전을 쉽게 관리할 수 있게 해줍니다. 이는 셸 실행기로 PHP 프로젝트를 테스트할 때 특히 유용합니다.

빌드 머신의 gitlab-runner 사용자에게 상위 스트림 설치 가이드를 따라 설치해야 합니다.

또한 phpenv를 사용하면 다음과 같이 PHP 환경을 쉽게 구성할 수 있습니다:

phpenv config-add my_config.ini

중요한 참고: phpenv/phpenv포기된 것으로 보입니다. 프로젝트를 부활시키려는 madumlao/phpenv 포크가 있습니다. CHH/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는 모든 다운로드한 패키지를 vendor/ 디렉터리에 저장합니다.
# 만약 vendor/ 디렉터리가 귀하의 git 리포지터리에 커밋되어 있다면 다음을 사용하지 마십시오.
default:
  cache:
    paths:
      - vendor/
  before_script:
    # Composer 의존성 설치
    - 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 실행자를 사용하는 경우 Docker를 활용하여 다른 컨테이너에 연결할 수 있습니다. GitLab Runner를 사용하면 service를 정의하여 이를 달성할 수 있습니다.

이 기능은 CI 서비스 문서에서 다루고 있습니다.

로컬에서 테스트하기

GitLab Runner 1.0에서 로컬에서 모든 변경 사항을 테스트할 수도 있습니다. 터미널에서 다음을 실행하세요:

# 도커 실행자를 사용하여 확인
gitlab-runner exec docker test:app

# 쉘 실행자를 사용하여 확인
gitlab-runner exec shell test:app

예제 프로젝트

우리는 여러분의 편의를 위해 예제 PHP 프로젝트를 설정해 두었습니다. 이 프로젝트는 GitLab.com에서 우리의 공개 가능한 인스턴스 실행자를 사용하여 실행됩니다.

여기에 임의로 변경 사항을 커밋하고 푸시해보세요. 모두 몇 분 안에 공개 실행자에 의해 변경 사항이 선택되고 작업이 시작됩니다.