Laravel と Bitbucket Pipelines

お困りですか?

アトラシアン コミュニティをご利用ください。

コミュニティに質問

This quickstart shows you how to use Bitbucket Pipelines to build and test a Laravel project in a Docker container.

Most of the configuration happens in the bitbucket-pipelines.yml file that Pipelines uses to define the build.

動作の仕組み

Bitbucket Pipelines keeps your build config in a YAML file, named bitbucket-pipelines.yml.

The bitbucket-pipelines.yml file lives in your repo.

When someone pushes to the repo, Pipelines runs the build in a Docker image.

The bitbucket-pipelines.yml file is where you can specify the dependencies needed by your project.


Import the quickstart repository into Bitbucket

Import the https://github.com/laravel/quickstart-basic.git repo into Bitbucket:

  • In Bitbucket, click , then Repository, then Import repository:

We're using laravel-quickstart-basic as the repo name here.


Enable Bitbucket Pipelines

  • In your new repo, click Pipelines, then Get started for free:


Clone the repo

  • Clone the new Bitbucket repo to your local machine:
git clone git@bitbucket.org:<username>/laravel-quickstart-basic.git

Add the bitbucket-pipelines.yml config file to the repo

We're going to configure a default pipeline. This pipeline will:

  • use the 7-fpm Docker image
  • install dependencies (git, curl) from OS packages
  • install PHP extensions for mcrypt and mysql
  • install Composer
  • use Composer to install PHP dependencies
  • set environment variables to control which cache, session data store, and database we use
  • use Artisan to perform database migrations and start the app in the background
  • Sleep for 5 seconds to allow the app time to start
  • use curl to ensure everything is hooked up and working.
  • run PHPunit

Here's the config file to do all that:

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'

You can check your bitbucket-pipelines.yml file with our  online validator .


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

リポジトリのルートで次の install-composer.sh を作成します。

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


Configure external dependencies

Laravel uses a RDBMS (MySQL by default) to store application state.

We can use Bitbucket Pipelines service containers to run containers from community managed images.

The MySQL definition is a little bit harder:

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'


アトラシアンでは、MySQL 用に次の環境変数を定義しています: MYSQL_DATABASE、MYSQL_RANDOM_ROOT_PASSWORD、MYSQL_USER、MYSQL_PASSWORD。
これらは、MySQL の初期化プロセスに対して、"homestead" という名前のデータベースと、ユーザー "homestead"、パスワード "secret" を作成し、ルート ユーザーにはランダムなパスワードを割り当てるように支持します。これらの値は 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,
],


その後、以下に示すように、リポジトリのルートに .env.pipelines ファイルを作成します。bitbucket-pipelines.yml ファイルはこれを、プロジェクトのルート内の既定の .env にコピーします。

.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


リポジトリにコミットする前に必ず、.env.pipelines ファイルを追加する必要があります。

git add .env.pipelines

Credentials committed to source control should only be for testing, and should not be shared with production systems.

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

When you commit and push to the repo in Bitbucket, Pipelines with automatically run the build:


Now you've got the launchpad for your next Laravel project to build upon.
最終更新日 2018 年 7 月 9 日

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

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