リポジトリの自動テスト

Docker Hub ではコンテナーを利用して、ソースコードリポジトリへの変更を自動的にテストすることができます。 どのような Docker Hub リポジトリ でもAutotestを有効にすれば、ソースコードリポジトリに対するプルリクエストごとのテスト実行が可能です。 これによって継続的な統合テストサービスを実現することができます。

Autotest(自動テスト)を有効にしてビルドされるイメージは、テスト目的のものです。 ただしこれは Docker リポジトリに対して、ビルドしたイメージを自動的にはプッシュ しません。 Docker Hub リポジトリにビルドイメージをプッシュしたい場合は 自動ビルド を有効にします。

自動テストファイルの設定

自動テストを設定するには、docker-compose.test.ymlを生成し、実行するテストを定めるsutサービスをそこで定義します。 docker-compose.test.ymlファイルは、イメージのビルドに用いる Dockerfile と同一のディレクトリに配置しておく必要があります。

たとえば以下のとおりです。

services:
  sut:
    build: .
    command: run_tests.sh

上の例ではリポジトリをビルドし、ビルドイメージを用いてコンテナー内部でrun_tests.shを実行します。

このファイルにはリンクするサービスをいくつでも定義することができます。 必要になることはsutを定義しておくことだけです。 そのサービスの戻り値からテストが成功したかどうかがわかります。 sutサービスが0を返すとテストは成功、そうでなければ 失敗 を表わします。

メモ 起動されるサービスはsutサービスと、depends_on のもとに定義されたサービスだけです。 何かのサービス内での変更をポーリングするサービスがある場合、そのポーリングサービスを depends_on のリスト内に定義して、サービスがすべて起動されるようにします。 なおdepends_onは、compose ファイル バージョン 2.0 において追加されています。 したがってファイルバージョンは 2.0 以降とするようにしてください。

必要に応じてdocker-compose.test.ymlファイルはいくつでも定義できます。 .test.ymlで終わるファイルはすべてテストに用いられ、そのテストは順に実行されます。 また カスタムビルドフック を用いることで、テスト動作をさらにカスタマイズすることができます。

メモ: 自動ビルドを有効にしている場合、test.ymlファイルに定義したテストもすべて実行されます。

リポジトリ上での自動テストの有効化

ソースコードリポジトリ上においてテストを有効にするには、まず Docker Hub 内に関連づけるビルドリポジトリを生成することが必要です。 Autotest(自動テスト)は 自動ビルド と同じページから設定することができます。 ただし自動ビルドがAutotestを利用するように設定する必要はありません。 自動ビルドはブランチ単位やタグ単位で有効化されるので、Autotestに関する有効化は無用です。

Autobuild(自動ビルド)を利用するように設定したブランチのみが、Docker リポジトリにイメージプッシュを行います。 これは自動テストの設定と関係はありません。

  1. Docker Hub にログインして、画面上段のナビゲーションから Repositories を選択します。

  2. Autotestを有効にするリポジトリを選択します。

  3. リポジトリ画面において Builds(ビルド)タブをクリックします。

  4. Configure automated builds(自動ビルドの設定)をクリックします。

  5. 自動ビルド において説明しているように、児童ビルドの設定を行います。

    最低でも以下の設定が必要です。

    • ソースコードリポジトリ
    • ビルド場所
    • 最低でも 1 つのビルドルール
  6. Autotest(自動テスト)オプションを選びます。

    以下のオプションが利用可能です。

    • Off: テストビルドは一切行わないことを指定します。 自動ビルドの一部としてテスト実行が設定されたもののみがテストされます。

    • Internal pull requests(内部プルリクエスト): ビルドルールに合致するブランチへのプルリクエストすべてに対して、テストビルドを実行します。 ただしそのプルリクエストが同一のソースリポジトリからきたものに限ります。

    • Internal and external pull requests(内部および外部プリリクエスト): ビルドルールに合致するブランチへのプルリクエストすべてに対して、テストビルドを実行します。 プルリクエストはソースリポジトリそのものから、そして外部からも受け付けます。

    メモ: セキュリティ観点から、外部からのプルリクエスト は公開リポジトリにおいては制限されます。 プライベートイメージはプルすることができません。 また Docker Hub において定義された環境変数は利用することができません。 自動ビルドはそれまでどおり作動します。

  7. Save をクリックして設定を保存します。 または Save and build をクリックして、保存とともに初回のテストを実施します。

テスト結果の確認

リポジトリの詳細ページにおいて Timeline をクリックします。

このタブではリポジトリにおいて、ビルドが中断しているもの、実行中のもの、成功したもの、失敗したものが確認できます。 そしてビルドをテストすることができます。

タイムラインの各項目をクリックすれば、テスト実行時のログを参照することができます。

Automated, testing, repository