4.4. Source-to-Image イメージのテストについて
Source-to-Image (S2I) ビルダーイメージの作成者は、S2I イメージをローカルでテストして、自動テストや継続的な統合に Red Hat OpenShift Service on AWS ビルドシステムを使用できます。
S2I ビルドを正常に実行するには、S2I に assemble
と run
スクリプトが必要です。S2I 外のコンテナーイメージを実行した場合に、save-artifacts
スクリプトがあると、ビルドのアーティファクトが再利用され、usage
スクリプトがあると、使用に関する情報がコンソールに出力されるようになります。
S2I イメージのテストは、ベースのコンテナーイメージを変更したり、コマンドが使用するツールが更新されたりした場合でも、上記のコマンドが正しく機能することを確認するのが目的です。
4.4.1. テスト要件について
test
スクリプトは、基本的に test/run
に配置されます。このスクリプトは、Red Hat OpenShift Service on AWS S2I イメージビルダーが呼び出し、単純な Bash スクリプトか静的な Go バイナリーのいずれかの形式を取ることができます。
test/run
スクリプトは S2I ビルドを実行するので、S2I バイナリーを $PATH
で利用可能にしておく必要があります。必要に応じて、S2I README のインストール手順に従います。
S2I は、アプリケーションのソースコードおよびビルダーイメージを統合します。これをテストするには、ソースが実行可能なコンテナーイメージに変換されることを検証するためのサンプルアプリケーションのソースが必要です。サンプルアプリケーションは単純なものである必要がありますが、assemble
および run
スクリプトの重要な手順を実行できる必要があります。
4.4.2. スクリプトおよびツールの生成
S2I ツールは、新しい S2I イメージの作成プロセスを加速化する強力な生成ツールと共に提供されます。s2i create
コマンドでは、Makefile
以外に、必要とされる S2I スクリプトとテストツールすべてが生成されます。
$ s2i create <image_name> <destination_directory>
生成された test/run
スクリプトは、より使いやすくするために調整する必要がありますが、このスクリプトを開発の開始段階で使用することが推奨されます。
s2i create
コマンドで生成した test/run
スクリプトでは、サンプルアプリケーションのソースを test/test-app
ディレクトリーに配置しておく必要があります。
4.4.3. ローカルでのテスト
S2I イメージテストをローカルに実行する最も簡単な方法として、生成した Makefile
を使用することができます。
s2i create
コマンドを使用しない場合には、以下の Makefile
テンプレートをコピーして、IMAGE_NAME
パラメーターをお使いのイメージ名に置き換えることができます。
Makefile
の例
IMAGE_NAME = openshift/ruby-20-centos7 CONTAINER_ENGINE := $(shell command -v podman 2> /dev/null | echo docker) build: ${CONTAINER_ENGINE} build -t $(IMAGE_NAME) . .PHONY: test test: ${CONTAINER_ENGINE} build -t $(IMAGE_NAME)-candidate . IMAGE_NAME=$(IMAGE_NAME)-candidate test/run
4.4.4. テストの基本的なワークフロー
test
スクリプトは、テストするイメージをすでにビルドしていることが前提です。必要に応じて、以下のコマンドで S2I イメージを先にビルドしてください。以下のいずれかのコマンドを実行してください。
Podman を使用する場合は、以下のコマンドを実行します。
$ podman build -t <builder_image_name>
Docker を使用する場合は、以下のコマンドを実行します。
$ docker build -t <builder_image_name>
以下の手順では、S2I イメージビルダーをテストするデフォルトのワークフローを説明しています。
usage
スクリプトが機能していることを確認します。Podman を使用する場合は、以下のコマンドを実行します。
$ podman run <builder_image_name> .
Docker を使用する場合は、以下のコマンドを実行します。
$ docker run <builder_image_name> .
イメージをビルドします。
$ s2i build file:///path-to-sample-app _<BUILDER_IMAGE_NAME>_ _<OUTPUT_APPLICATION_IMAGE_NAME>_
-
オプション:
save-artifacts
をサポートする場合には、再度手順 2 を実行して、保存して復元するアーティファクトが正しく機能することを確認します。 コンテナーを実行します。
Podman を使用する場合は、以下のコマンドを実行します。
$ podman run <output_application_image_name>
Docker を使用する場合は、以下のコマンドを実行します。
$ docker run <output_application_image_name>
- コンテナーが実行され、アプリケーションが応答していることを確認します。
これらの手順を実行すると、通常はビルダーイメージが予想通りに機能しているかどうかが分かります。
4.4.5. イメージのビルドでの Red Hat OpenShift Service on AWS の使用
新しい S2I ビルダーイメージを設定する Dockerfile
と他のアーティファクトが準備できたら、それらを git リポジトリーに配置して、Red Hat OpenShift Service on AWS を使用し、イメージをビルドしてプッシュします。お使いのリポジトリーを参照する Docker ビルドを定義します。
Red Hat OpenShift Service on AWS インスタンスが公開 IP アドレスでホストされる場合、ビルドは、S2I ビルダーイメージ GitHub リポジトリーにプッシュするたびにトリガーされます。
ImageChangeTrigger
を使用して、更新した S2I ビルダーイメージに基づくアプリケーションの再ビルドをトリガーすることもできます。