【GitLab 公式 を訳してみた】GitLab CI~PHPプロジェクトをテストする

法律: IT 解説記事 GitLab CI フノス(訳者)

 GitLab Documentation > GitLab Continuous Integration (GitLab CI)GitLab CI 設定サンプル集 > PHPプロジェクトをテストする

  このガイドは、PHPプロジェクトを制作するうえでの、基本的な注意事項についても触れていきます。

  今回は、PHPプロジェクトのテスト方法を2つ解説します。
 1つ目は、Docker executorを使ったテスト方法。
 2つ目は、シェルスクリプトを使ったテスト方法です。

 

  1. Docker executorを使ったPHPプロジェクトテスト法 

  これから紹介するのは、どのようなシステムに置かれているPHPアプリでもテストすることが可能な方法です。
  PHPプロジェクトであれば、PHPのバージョンに違いがあろうと、難なくテストすることができます。

 ただし、そのような設定を一括で処理してくれるようなプラグインはありません。

 やや専門的になりますが、開発者による手動での設定が必要です。



 PHPをDockerで使用する場合、大抵が公式のPHP Dockerイメージを使っていることでしょう。
 よって、今回の説明はこれに準拠させていただきます。

  

  まずは、どのようなビルド工程でも欠かせない「.gitlab-ci.yml」に、ビルドの環境を記述するところから始めます。

  jobプロセスで使われるPHPイメージを指定します。
 (GitLab Runnerで『イメージを選択する』ことが分からない方は、 Dockerイメージを使うを読んでください。)

 

======================
image: php:5.6
======================

  公式が制作したイメージは、開発環境としての出来はすばらしい。
 しかし惜しいことに、アプリをテストをするためのツールが最初から搭載されていないのです。

 なので、これからPHPのテスト環境をそろえるために、色々な準備をしなくてはなりません。

 テストを設定する前に必要なツールをインストールできるようなスクリプトを記述します。
 

  レポジトリのrootディレクトリに「ci/docker_install.sh」を作成します。
 そこに次の内容を記述してください。

======================
#!/bin/bash

 # このファイルではDockerに必要なものだけをインストールします。
[[ ! -e /.dockerenv ]] && exit 0

set -xe


# composerに必要とされるgit( php imageを含まない )をインストールします。
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イメージから提供されているエクステンションを、簡単にインストールできるようにするために使われるスクリプトです。
 詳しくは、Docker公式の説明書(https://hub.docker.com/r/_/php/)をご覧ください。
 

  さて、これにて、ビルド環境を支度するために必要なスクリプトは全て整いました。
 もう一度「.gitlab-ci.yml」に戻って次の設定をしていきます。

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

  そして、テストをするために必要な「phpunit」について記述します。

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

  最後に、ファイルをcommitします。
 試しにビルドがうまくいくかどうかみるために、手持ちのアプリをプッシュしてみてもよいかもしれません。

  今回の「.gitlab-ci.yml」全体像:

======================
# 「https://hub.docker.com/r/_/php/」からダウンロードしてきたイメージを記述
image: php:5.6

before_script:
# ここでは依存関係にあるソフトを入れること
- bash ci/docker_install.sh > /dev/null

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

 

  PHPバージョンが異なるプロジェクトがある場合

  複数のPHPバージョンが必要な時は、それぞれのバージョンに応じて個別に、テスト用のjobを記述してください。簡単です。

======================
before_script:
 # 依存関係ソフトのインストール
 - bash ci/docker_install.sh > /dev/null

#  PHP5.6テスト用job
 test:5.6:
  image: php:5.6
  script:
  - phpunit --configuration phpunit_myapp.xml

 # PHP7.0テスト用job(うまくいけばいいけど)
 test:7.0:
  image: php:7.0
  script:
  - phpunit --configuration phpunit_myapp.xml
======================
 

  ビルドの時にPHPのカスタム設定を使えるようにしたい

  まず、PHPのカスタム設定は、プロジェクトの「/usr/local/etc/php/conf.d/」に「.ini」を作成して、そこに必要なスクリプトを記述してください。
 設定が終わったら、次の内容を「before_script」jobに記述します。

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

  もちろん、「my_php.ini」をレポジトリのrootディレクトリに置かないことには、設定そのものが実行されませんのでご注意を。

 

  2. シェルスクリプトを使ったPHPプロジェクトテスト法

 2つめに紹介する方法では、シェルスクリプトを「ターミナルセッションからjobを実行するための手段」として使っていきます。
 これは、自前でPHPサーバーを管理している方に向いています。

 まずは、テストに必要な依存関係ソフトをインストールするところから始めましょう。

  Deebian 8で仮想マシンを使用している場合は、まずキャッシュのアップデートをしておく必要があります。
 それから最新の「phpunit」と「php5-musql」をインストールします。

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

  次に、「.gitlab-ci.yml」に以下のスクリプトを入力してください。

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

  できたファイルをプッシュして、実際にテストをしてみましょう。
 

  別バージョンのPHPをテストする場合(シェル)

  「phpenv」というPHPプロジェクトをシェルスクリプトで実行する用途専用につくれられたソフトがあります。
 シェルを使って、異なるバージョンのPHPプロジェクトをテストする場合は、これを使うと簡単です。

  「phpenv」はご自分のサーバーのgitlabランナーにインストールしてください。インストールの方法についてはこちらのガイドを参考になります。

  「phpenv」を使うにはPHP環境に次の設定をしてください。

======================
phpenv config-add my_config.ini
====================== 

  重大なお知らせ:現在、phpenv/phpenv開発は打ち切られてしまった模様です。
後継として、これをフォークして作られたmadumlao/phpenvというソフト、
あるいは、同じような機能を持つ CHH/phpenvというソフトがあります。
 各ソフトウェアのReadmeに従って、ランナーにインストールしてください。
 なお、phpenvコマンドについては同じものを使用して構いません。
 

 

  エクステンションのインストール

  この場合は、仮想マシンに直接PHP環境が用意されているので、

  次の簡単なコマンドを使えば、エクステンションを導入できます。

======================
pecl install <extension>
======================

  この場合「.gitlab-ci.yml」への設定は必要ありません。
 Dockerと異なり、コマンドを出すだけでビルド環境に組み込むことができます。

 

  テストに他のソフトを使用する

   「atoum」を使う方法

  PHPUnitの他にも、ユニットテストをするためのツールは存在します。その中の代表例が「atoum」です。

 「.gitlab-ci.yml」に次の設定をしてください。
======================
before_script:
- wget http://downloads.atoum.org/nightly/mageekguy.atoum.phar

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

  「Composer」を使う方法

  PHPを使っている方の大部分が、PHPのパッケージ管理に「Composer」を使っています。
 その場合は、テストの前に「Composer」を実行することができます。
 「.gitlab-ci.yml」に次の設定を追加してください。

======================
...

# Composer はダウンロードしたパッケージを全て 「vendor/」ディレクトリに収容する
# なので、これを使う場合は 「vendor/」ディレクトリをgitレポジトリのコミット対象に入れてはならない
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 キーを設定してからレポジトリをクローンするとよいでしょう。

 

  データベースや、外部サービスを利用する

  PHPアプリのテストを実施する前に、ほとんどの場合が何らかのデータベースとの連携が必要になることでしょう。

 この点については、Dockerを開発環境にしている方が有利といえます。
 なぜなら、データベースを構成しているコンテナにリンクを張るだけで連携ができるため、簡単なのです。

 「.gitlab-ci.yml」のパラメータ「service」は、このあたりの設定をするためによく使われます。

  詳しくは、the CI services documentationをご覧ください。

 

  ローカル環境でテストする

  GitLab Runner 1.0からすでに、ローカル環境でテストする機能が搭載されています。

 ターミナルから、
======================
# docker executorから実行する場合
gitlab-ci-multi-runner exec docker test:app

# シェルスクリプトから実行する場合

gitlab-ci-multi-runner exec shell test:app
======================

  より簡単なセットアップ方法

  GitLab.comでは、Example PHP Projectをご用意しております。これを入れるだけで、大方の設定が完了しますので、効率的です。
 ランナーを共有することでお使いいただけます。

  ここで紹介した方法よりも、簡単な方法を知っている、もっと的確な設定ができるとお考えの方は、ぜひ当方に変更案をコミットしてください。
 しばらくすると、publicランナーによってjobが開始されますので、それから掲載という運びになります。

 Edit this page2017-11-29 22:14:24 / Hnoss
原文サイトを表示
[ 原文 ] https://docs.gitlab.com/ee/ci/examples/php.html
原文ページプロジェクト並びにドキュメントファイルは、MIT Licenseのもと公開されています。(URL:https://gitlab.com/gitlab-com/gitlab-docs/blob/master/LICENSE) この記事の文章は、訳者の判断によりCreative Commons BY (version 3.0) を適用するものとします。