富山のホームページ製作会社・グリーク スタッフブログ - ブログ -
  1. グリークトップ
  2. プログラマー
  3. ブログ

待ってました! ついに登場したBitbucket Pipelines (Beta) でphpunitを動かすまで

pipelines-video-placeholder

本日ベータテスターに申し込んでいたBitbucket Pipelinesの招待メールが届きましたので、早速レポートします。
(利用開始まで何日かかかりましたので、すぐにつかってみたいかたは早めの登録をおすすめします)

 

Bitbucket Pipelinesとは?

TravisCIやCircleCIのような継続的インテグレーションを行うサービスです。
一番の特徴はBitbucketリポジトリとの連動で、リポジトリの設定画面からすぐに有効にすることができます。
タスクの実行にはDockerコンテナーが使われており、Bitbucketが用意したイメージでとりあえず動かすこともできますし、自分で用意したイメージファイルも使うことができます。

簡単にいうと

BitbucketにPushしたら裏でいろいろやってくれるサービス

です。

つかってみる

早速Symfony3のプロジェクトで実行してみることにしてみました。
動作環境としてはこのような感じになっています。

  • PHP7
  • MySQL 5.7
  • Redis Server + php-redis
  • Symfony3

Pipelinesに申し込む

まずはベータテスターに登録してください。当然ですがBitbucketのアカウントが必要です。
招待されたらさっそくメールの説明にしたがってPipelinesを有効にしてください。

各リポジトリの設定画面からビルドの設定を行います。
Settings画面にPIPELINESの欄がありますので、そこからSettingsを選択します。
下のキャプチャの画面でEnable pipelinesにチェックを付けます。

glic___medical-care-toyama___Admin___—_Bitbucket_2016-06-14_21-49-34

Pipelines用の設定ファイルをリポジトリに追加する

ビルドを開始するためにはbitbucket-pipelines.ymlという設定ファイルを用意し、リポジトリの直下に保存してPushします。
travis.ymlのようなものだと思いますが、独自のフォーマットなのでドキュメントをよく読む必要があります。

Bitbucket Pipelines (beta) – Atlassian Documentation
https://confluence.atlassian.com/bitbucket/bitbucket-pipelines-beta-792496469.html

 

Docker Imageを用意する

PHP用のサンプルを見ると、DockerIndexに登録されているphpunit/phpunitが指定されているようです。
今回はRedisとMySQLへのアクセスもテストに含まれているため、自分でイメージを用意することにしました。

次のようなDockerfileをDockerhubに登録しました。

FROM ubuntu:16.04

RUN apt-get update -q \
    && export DEBIAN_FRONTEND=noninteractive \
    && apt-get install -q -y git debconf-utils curl wget \
    && apt-get install -q -y php php-mysql php-redis mysql-server redis-server php-gd php-intl php-curl php-mbstring php-xml \
    && curl -sS https://getcomposer.org/installer | php \
    && mv composer.phar /usr/local/bin/composer \
    && wget https://phar.phpunit.de/phpunit.phar \
    && chmod +x phpunit.phar \
    && mv phpunit.phar /usr/local/bin/phpunit

bitbucket-pipelines.ymlを完成させる

こちらが最終的なbitbucket-pipelines.ymlです

# You can use a Docker image from Docker Hub or your own container
# registry for your build environment.
image: glichys/docker-symfony

pipelines:
  default:
    - step:
        script: # Modify the commands below to build your repository.
          - composer --version
          - phpunit --version
          - /usr/bin/mysqld_safe &
          - /usr/bin/redis-server /etc/redis/redis.conf &
          - sleep 5
          - echo "create database symfony default character set utf8" | mysql -u root
          - echo "create database symfony_test default character set utf8" | mysql -u root
          - composer install -n
          - cp app/config/parameters.yml.dist app/config/parameters.yml
          - phpunit -c .

  • image: にはDockerイメージを指定します。もしちょうどいいのがあればDockerhubから探したほうがいいと思います。今回は自分で作成しました。
  • step: script: には実行するコマンドを列挙していきます。MySQLとRedisをここで無理やり起動していますので、もっといい方法があると思います。とりあえず動きます。

この例ではブランチに関係なく、同じスクリプトを実行しています。
ブランチによって実行内容を変えることができますので、デプロイツールとしても使えそうです。
また、実行環境がDockerなので、用意するイメージ次第でスマホアプリのビルドもできるような気がしますが未確認です。

注意点について

  • パスワードなどの情報を設定ファイルに含めたくなったら、環境変数を利用して下さい。Environment Variablesページから設定できます。
  • プライベートなDocker Imageも使えますが、その際は認証情報を設定する必要があります、こちらも環境変数を利用するよう注意が必要です。
  • RAMと実行時間に制限があります。(RAMは2GB、実行時間は2時間まで)
  • 将来有料になる可能性が高いです。
    Bitbucket_Pipelines_FAQ_-_Atlassian_Documentation_-__プライベートブラウジング_

実行してみました

Pushした後のビルド一覧 (Failedだらけですみません…)

glic___medical-care-toyama___Add-on___Pipelines_—_Bitbucket

ビルドの詳細画面、ANSIカラーにも対応しています。
がんばれComposer!

glic___medical-care-toyama___Add-on___Pipelines_—_Bitbucket

テスト通りました!

glic___medical-care-toyama___Add-on___Pipelines_—_Bitbucket

コミット一覧にビルドステータスが!

glic___medical-care-toyama___Commits_—_Bitbucket

これでソースをPushしたら勝手にテストが実行されるようになりました。
外部サービスに依存しなくてもCIが回せます。Bitbucket的なユーザー囲い込み作戦ですね。

ただし、既にCircleCIなどをご利用の方はそのままでいいと思います。

 

今後に期待したいところ

リポジトリのトップにビルドステータスが表示されていたらいいなと思います。
あとはREADMEに貼るバッヂがあれば最高です。

まだ正式リリースではありませんので、今後に期待です。
願わくばプライベードリポジトリでもフリーで使わせていただきたいです。

ただし、既にCircleCIなどをご利用の方はそのままでいいと思います。

この記事を書いたスタッフ
Kazuyuki Hayashi
Symfony / Node.js / React.js / Swift を中心にテクノロジー系の記事を書きます。趣味はコーヒーです。