Laravel と Bitbucket Pipelines
このガイドでは、Bitbucket Pipelines を使用して、Docker コンテナで Laravel を使用するプロジェクトをビルドおよびテストする方法について説明します。
手動でセットアップしたい場合、構成の大部分は Pipelines がビルドを定義するために使用する bitbucket-pipelines.yml ファイル内で行います。
動作の仕組み
Bitbucket Pipelines はビルド構成を bitbucket-pipelines.yml という名前の YAML ファイルに保管します。
bitbucket-pipelines.yml ファイルはご使用のリポジトリ内にあります。
リポジトリへのプッシュが実行されると、Pipelines は Docker イメージでビルドを実行します。
bitbucket-pipelines.yml ファイルで、プロジェクトで必要とされる依存関係を指定します。
quickstart リポジトリを Bitbucket にインポートする
https://github.com/laravel/quickstart-basic.git リポジトリを Bitbucket にインポートします。
- Bitbucket で をクリックしてから、[リポジトリ] > [リポジトリのインポート] の順にクリックします。
ここでは、リポジトリ名として laravel-quickstart-basic を使用しています。
Bitbucket Pipelines の有効化
- 新しいリポジトリで、[Pipelines] をクリックして、[無料で使用開始する] をクリックします。
リポジトリのクローン
- 新しい Bitbucket リポジトリをご使用のローカル マシンにクローンします。
git clone git@bitbucket.org:<username>/laravel-quickstart-basic.git
bitbucket-pipelines.yml 構成ファイルをリポジトリに追加する
ここでは既定のパイプラインを構成します。このパイプラインでは以下を行います。
- 7.2-fpm Docker イメージを使用
- OS パッケージからの依存関係 (git、curl) のインストール
- mcrypt および mysql の PHP 拡張機能のインストール
- Composer のインストール
- Composer を使用して PHP 依存関係をインストール
- 使用するキャッシュ、セッション データ ストア、およびデータベースを制御する変数を設定
- Artisan を使用してデータベースの移行およびアプリケーションの開始をバックグラウンドで実行
- アプリケーションを開始するために 5 秒間スリープ
- curl を使用し、すべてのものが接続され、動作していることを確認
- PHPunit の実行
以下は、これらをすべて実行する構成ファイルです。
image: php:7.2-fpm
pipelines:
default:
- step:
script:
- apt-get update && apt-get install -qy git curl libmcrypt-dev mysql-client
- yes | pecl install mcrypt-1.0.1
- docker-php-ext-install pdo_mysql
- curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
- composer install
- ln -f -s .env.pipelines .env
- php artisan migrate
- php artisan serve &
- sleep 5
- ./vendor/bin/phpunit
- curl -vk http://localhost:8000
services:
- mysql
definitions:
services:
mysql:
image: mysql:5.7
environment:
MYSQL_DATABASE: 'homestead'
MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
MYSQL_USER: 'homestead'
MYSQL_PASSWORD: 'secret'
アトラシアンのオンライン バリデーターでご使用の bitbucket-pipelines.yml ファイルをチェックできます。
外部の依存関係を構成する
Laravel は RDBMS (既定では MySQL) を使用してアプリケーションの状態を保存します。
コミュニティが管理するイメージからコンテナを実行するために Bitbucket Pipelines サービス コンテナを使用できます。
MySQL の定義は少し難易度が高くなります。
definitions:
services:
mysql:
image: mysql:5.7
environment:
MYSQL_DATABASE: 'homestead'
MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
MYSQL_USER: 'homestead'
MYSQL_PASSWORD: 'secret'
アトラシアンでは、MySQL 用に次の変数を定義しています: MYSQL_DATABASE、MYSQL_RANDOM_ROOT_PASSWORD、MYSQL_USER、MYSQL_PASSWORD。
これらは、MySQL の初期化プロセスに対して、"homestead" という名前のデータベースと、ユーザー "homestead"、パスワード "secret" を作成し、root ユーザーにはランダムなパスワードを割り当てるように支持します。これらの値は config/database.php の内容と一致している必要があります。
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
その後、以下に示すように、リポジトリのルートに .env.pipelines
ファイルを作成します。bitbucket-pipelines.yml
ファイルはこれを、プロジェクトのルート内の既定の .env
にコピーします。
APP_ENV=local
APP_KEY=ThisIsThe32CharacterKeySecureKey
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
リポジトリにコミットする前に .env.pipelines
ファイルを追加する必要があります。
git add .env.pipelines
ソース コントロールにコミットする資格情報はテスト目的でのみ使用し、本番システムとの共有は行わないことをおすすめします。
リポジトリにプッシュする
Bitbucket のリポジトリへのコミットおよびプッシュを実行すると、Pipelines が自動でビルドを実行します。