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-fpm Docker イメージの使用
  • OS パッケージからの依存関係 (git、curl) のインストール
  • mcrypt および mysql の PHP 拡張機能のインストール
  • Composer のインストール
  • Composer を使用して PHP 依存関係をインストール
  • set variables to control which cache, session data store, and database we use
  • Artisan を使用してデータベースの移行およびアプリケーションの開始をバックグラウンドで実行
  • アプリケーションを開始するために 5 秒間スリープ
  • curl を使用し、すべてのものが接続され、動作していることを確認
  • PHPunit の実行

以下は、これらをすべて実行する構成ファイルです。

bitbucket-pipelines.yml
image: php:7-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
          - bash ./install-composer.sh
          - 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 ファイルをチェックできます


install-composer.sh ヘルパー スクリプトをリポジトリに追加する

Create the following install-composer.sh in the root of your repository:

install-composer.sh
#!/bin/bash

COMPOSER_VERSION=${COMPOSER_VERSION:-1.4.2}

curl -s -f -L -o /tmp/installer.php https://raw.githubusercontent.com/composer/getcomposer.org/da290238de6d63faace0343efbdd5aa9354332c5/web/installer \
 && php -r " \
    \$signature = '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410'; \
    \$hash = hash('SHA384', file_get_contents('/tmp/installer.php')); \
    if (!hash_equals(\$signature, \$hash)) { \
        unlink('/tmp/installer.php'); \
        echo 'Integrity check failed, installer is either corrupt or worse.' . PHP_EOL; \
        exit(1); \
    }" \
 && php /tmp/installer.php --no-ansi --install-dir=/usr/bin --filename=composer --version=${COMPOSER_VERSION} \
 && rm /tmp/installer.php \
 && composer --ansi --version --no-interaction


リポジトリにコミットする前に必ず、install-composer.sh を追加する必要があります。

git add ./install-composer.sh


外部の依存関係を構成する

Laravel は RDBMS (既定では MySQL) を使用してアプリケーションの状態を保存します。

コミュニティが管理するイメージからコンテナを実行するために Bitbucket Pipelines サービス コンテナを使用できます。

MySQL の定義は少し難易度が高くなります。

bitbucket-pipelines.yml スニペット
definitions:
  services:
    mysql:
      image: mysql:5.7
      environment:
        MYSQL_DATABASE: 'homestead'
        MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
        MYSQL_USER: 'homestead'
        MYSQL_PASSWORD: 'secret'


We define variables for MySQL:  MYSQL_DATABASE, MYSQL_RANDOM_ROOT_PASSWORD, MYSQL_USER and MYSQL_PASSWORD.
These instruct the MySQL initialization process to create a database named 'homestead' with a user 'homestead' with password 'secret', and to assign a random password to the root user. These values must match the contents of config/database.php:

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,
],


Then create an .env.pipelines file in the root of the reposity, as shown below. The bitbucket-pipelines.yml file copys this into the default .env location in the root of the project.

.env.pipelines
APP_ENV=local
APP_KEY=ThisIsThe32CharacterKeySecureKey
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret


Make sure you add the .env.pipelines file before committing to the repo:

git add .env.pipelines

ソース コントロールにコミットする資格情報はテスト目的でのみ使用し、本番システムとの共有は行わないことをおすすめします。

リポジトリにプッシュする

Bitbucket のリポジトリへのコミットおよびプッシュを実行すると、Pipelines が自動でビルドを実行します。


これで、次の Laravel プロジェクトをビルドするための開始点を準備できました。
最終更新日 2018 年 11 月 26 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.