Bitbucket Pipelines でサービスとデータベースを使用する

robotsnoindex
robotsnoindex

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 のサンプル ファイルは、サービスの定義と、パイプライン ステップでのサービスの使用方法の両方を示します。動作のブレイクダウンを後述しています。

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 セクションでは、リテラル値または既存のパイプライン変数として変数を定義できます。

bitbucket-pipelines.yml のセクション
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) を使用
bitbucket-pipelines.yml のセクション
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 サービスステップで実行します。

bitbucket-pipelines.yml のセクション
pipelines:
  default:
    - step:
        image: node
        script:
          - npm install
          - npm test
        services:
          - redis


プライベート イメージの使用

アクセスを制限するサービスを次のように定義できます。

bitbucket-pipelines.yml のセクション
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




最終更新日 2020 年 6 月 24 日

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

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