Bitbucket Pipelines でサービスとデータベースを使用する
Bitbucket Pipelines では、ビルド パイプラインから複数の Docker コンテナを実行できます。アプリケーションのテストと運用で、パイプラインで追加サービスが必要になる場合、追加のコンテナを起動する必要がある場合があります。この追加サービスには、データストア、コード分析ツール、およびスタブ Web サービスなどが含まれます。
このような追加サービスやその他のリソースは、bitbucket-pipelines.yml ファイルの definitions
セクションで定義します。これらのサービスはその後、サービスを必要とする任意のパイプラインの構成で参照されます。
パイプラインの実行時、bitbucket-pipeline.yml のステップで参照されているサービスが、パイプライン ステップ内で実行されるようにスケジューリングされます。これらのサービスは、ビルド コンテナとネットワーク アダプタを共有するほか、localhost でオープンなポートを共有します。ポート マッピングやホスト名は不要です。たとえば、Postgres を使用している場合、localhost のポート 5432 に接続するだけでテストを行えます。デバッグを行う場合、Pipelines の UI でサービスのログを確認できます。
Pipelines では、ビルド ステップあたりのサービス コンテナは最大 5 つに制限されます。サービス コンテナへのメモリの割り当て方法については以下のセクションを参照してください。
Pipelines でのデータベースの使用例については、「Bitbucket Pipelines でデータベースを使用してテストする」を参照してください。
完全な例
この bitbucket-pipelines.yml のサンプル ファイルは、サービスの定義と、パイプライン ステップでのサービスの使用方法の両方を示します。動作のブレイクダウンを後述しています。
pipelines:
branches:
master:
- step:
image: redis
script:
- redis-cli -h localhost ping
services:
- redis
- mysql
definitions:
services:
redis:
image: redis:3.2
mysql:
image: mysql:5.7
variables:
MYSQL_DATABASE: my-db
MYSQL_ROOT_PASSWORD: $password
サービスの定義
サービスは、bitbucket-pipelines.yml ファイルの definitions
セクションで定義されます。
たとえば、次の例では 2 つのサービスを定義しています。 redis
はライブラリ イメージ redis
を Docker ハブ (バージョン 3.2) から使用し、database
は Docker Hub の公式 MySQL イメージ (バージョン 5.7) を使用します。
variables セクションでは、リテラル値または既存のパイプライン変数として変数を定義できます。
definitions:
services:
redis:
image: redis:3.2
mysql:
image: mysql:5.7
variables:
MYSQL_DATABASE: my-db
MYSQL_ROOT_PASSWORD: $password
サービス メモリの制限
各サービス定義では、memory
キーワード (メガバイト単位) を使用してサービス コンテナにカスタムのメモリ制限を定義することもできます。
関連するメモリ制限および既定の割り当ては次のとおりです。
- 標準ステップのメモリの合計は 4096 MB、大規模なビルド ステップ (
size: 2x
を使用して定義可能) のメモリの合計は 8192 MB です。 - ビルド コンテナには合計 1024 MB のメモリが割り当てられ、これでビルド プロセスと一部の Pipelines オーバーヘッド (エージェント コンテナ、ログなど) が網羅されます。
- 各パイプライン ステップでのサービスの合計メモリは、残りのメモリ (1x / 2x ステップでそれぞれ 3072 / 7128 MB) を超えることはできません。
- サービス コンテナは既定で 1024 MB のメモリを取得しますが、128 MB とステップの最大値 (3072 / 7128 MB) の間で使用量を構成できます。
- Pipelines の Docker 操作で使用される Docker-in-Docker デーモンはサービス コンテナとして扱われるため、既定のメモリ制限は 1024 MB となります。この値は、definitions セクションで組み込みの
docker
サービスのメモリ設定を変更することで、128 MB 〜 3072/7128 MB の間の任意の値に調整できます。
以下の例は、ビルド コンテナに 2048 MB のメモリ制限があることを示しています。
- Docker が 512 MB
- Redis が 512 MB
- MySQL が既定のメモリ制限 (1024 MB) を使用
pipelines:
default:
- step:
services:
- redis
- mysql
- docker
script:
- echo "This step is only allowed to consume 2048 MB of memory"
- echo "Services are consuming the rest. docker 512 MB, redis 512 MB, mysql 1024 MB"
definitions:
services:
redis:
image: redis:3.2
memory: 512
docker:
memory: 512 # reduce memory for docker-in-docker from 1GB to 512MB
mysql:
image: mysql:5.7
# memory: 1024 # default value
variables:
MYSQL_DATABASE: my-db
MYSQL_ROOT_PASSWORD: $password
パイプラインでのサービスの使用
bitbucket-pipelines.yml ファイルの "definitions" セクションでサービスを定義したら、そのサービスを任意のパイプライン ステップで参照できます。
たとえば、次の例では redis
サービスをステップで実行します。
pipelines:
default:
- step:
image: node
script:
- npm install
- npm test
services:
- redis
プライベート イメージの使用
アクセスを制限するサービスを次のように定義できます。
definitions:
services:
redis:
image:
name: redis:3.2
username: username@organisation.com
password: $DOCKER_PASSWORD
異なるレジストリやフォーマットの Docker イメージを使用するためのその他の例については、「Docker イメージをビルド環境として使用する」をご参照ください。
注意事項と制限事項
Pipelines のサービスには次の制限があります。
- 1 ステップあたり最大 5 サービス
- 上述のメモリ制限
- パイプライン結果のサービスやログにアクセスするための REST API は提供していません。
- サービスの起動を待機するためのメカニズムは提供していません。
小さなサービスを大量に実行したい場合、Docker run または docker-compose を使用することをおすすめします。
ポートの制限
予約済みの使用できないポートがあります。
29418