- Docker 실행기를 사용하여 PHP 프로젝트 테스트
- 셸 실행기를 사용하여 PHP 프로젝트 테스트
- 테스트 확장하기
- 비공개 패키지 또는 의존성 액세스
- 데이터베이스 또는 다른 서비스 사용
- 로컬에서 테스트하기
- 예제 프로젝트
PHP 프로젝트 테스트
이 가이드는 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에서 캐시를 업데이트한 후 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에 푸시하여 테스트를 시작하세요!
셸 빌드에서 다른 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에서 우리의 공개 가능한 인스턴스 실행자를 사용하여 실행됩니다.
여기에 임의로 변경 사항을 커밋하고 푸시해보세요. 모두 몇 분 안에 공개 실행자에 의해 변경 사항이 선택되고 작업이 시작됩니다.