2.3.4. 方法およびツール
基本的にアプリケーションのプロモートとは、前述のアプリケーションのコンポーネントをある環境から別の環境に移動するプロセスのことです。アプリケーションのプロモートの自動化に関する全体的なソリューションを検討する前に、各種コンポーネントを手動で移動する場合に使用できるツールの概要について以下のサブセクションで見ていきましょう。
ビルドおよびデプロイメントの両方のプロセスにおいて多数の挿入ポイントを利用できます。これらは BuildConfig
および DeploymentConfig
API オブジェクトで定義されます。これらのフックにより、データベースなどのデプロイされたコンポーネントおよび OpenShift Container Platform クラスター自体と対話できるカスタムスクリプトの呼び出しが可能となります。
したがって、フック内からイメージタグ操作を実行するなど、このようなフックを使用して、アプリケーションを環境間で効果的に移動するコンポーネント管理操作を実行できます。ただし、これらのフックポイントの使用は、環境間でアプリケーションコンポーネントを移動する場合よりも、所定の環境でアプリケーションのライフサイクル管理を行う場合に適しています (アプリケーションの新バージョンがデプロイされる際のデータベーススキーマの移行に使用するなど)。
2.3.4.1. API オブジェクトの管理
1 つの環境で定義されるリソースは、新しい環境へのインポートに備えて JSON または YAML ファイルの内容としてエクスポートされます。したがって JSON または YAML としての API オブジェクトの表現は、アプリケーションパイプラインで API オブジェクトをプロモートする際の作業単位として機能します。このコンテンツのエクスポートやインポートには oc
CLI を使用します。
OpenShift Container Platform のプロモーションフローには必要ないですが、JSON または YAML はファイルに保存されるので、SCM システムを使用したコンテンツの保存や取得について検討することができます。これにより、ブランチの作成、バージョンに関連する各種ラベルやタグの割り当てやクエリーなど、SCM のバージョン関連の機能を活用できるようになります。
2.3.4.1.1. API オブジェクトステートのエクスポート
API オブジェクトの仕様は、oc get --export
で取り込む必要があります。この操作は、オブジェクト定義から環境に固有のデータを取り除き (現在の namespace または割り当てられた IP アドレスなど)、異なる環境で再作成できるようにします (オブジェクトのフィルターされていないステートを出力する oc get
操作とは異なります) 。
oc label
を使用すると、API オブジェクトに対するラベルの追加、変更、または削除が可能になり、ラベルがあれば、操作 1 回で Pod のグループの選択や管理ができるので、プロモーションフロー用に収集されたオブジェクトを整理するのに有用であることが分かります。oc label を使用すると、適切なオブジェクトをエクスポートするのが簡単になります。 また、オブジェクトが新しい環境で作成された場合にラベルが継承されるので、各環境のアプリケーションコンポーネントの管理も簡素化されます。
API オブジェクトには、Secret
を参照する DeploymentConfig
などの参照が含まれることがよくあります。API オブジェクトをある環境から別の環境へと移動する際、これらの参照も新しい環境へと移動することを確認する必要があります。
同様に DeploymentConfig
などの API オブジェクトには、外部レジストリーを参照する ImageStreams
の参照が含まれることがよくあります。API オブジェクトをある環境から別の環境へと移動する際、このような参照が新しい環境内で解決可能であることを確認する必要があります。つまり、参照が解決可能であり、ImageStream
は新しい環境でアクセス可能なレジストリーを参照できる必要があります。詳細については、イメージの移動 および プロモートの注意事項 を参照してください。
2.3.4.1.2. API オブジェクトステートのインポート
2.3.4.1.2.1. 初期作成
アプリケーションを新しい環境に初めて導入する場合は、API オブジェクトの仕様を表現する JSON または YAML を使用し、oc create
を実行して適切な環境で作成するだけで十分です。oc create
を使用する場合、--save-config
オプションに留意してください。アノテーション一覧にオブジェクトの設定要素を保存しておくことで、後の oc apply
を使用したオブジェクトの変更が容易になります。
2.3.4.1.2.2. 反復修正
各種のステージング環境が最初に確立されると、プロモートサイクルが開始し、アプリケーションがステージからステージへと移動します。アプリケーションの更新には、アプリケーションの一部である API オブジェクトの修正を含めることができます。API オブジェクトは OpenShift Container Platform システムの設定を表すことから、それらの変更が想定されます。 それらの変更の目的として以下のケースが想定されます。
- ステージング環境間における環境の違いについて説明する。
- アプリケーションがサポートする各種シナリオを検証する。
oc
CLI を使用することで、API オブジェクトの次のステージ環境への移行が実行されます。API オブジェクトを変更する oc
コマンドセットは充実していますが、本トピックではオブジェクト間の差分を計算し、適用する oc apply
に焦点を当てます。
とりわけ oc apply
は既存のオブジェクト定義と共にファイルまたは標準入力 (stdin) を入力として取る 3 方向マージと見ることができます。以下の間で 3 方向マージを実行します。
- コマンドへの入力
- オブジェクトの現行バージョン
- 現行オブジェクトにアノテーションとして保存された最新のユーザー指定オブジェクト定義
その後に既存のオブジェクトは結果と共に更新されます。
オブジェクトがソース環境とターゲット環境間で同一であることが予期されていない場合など、API オブジェクトの追加のカスタマイズが必要な場合に、oc set
などの oc
コマンドは、アップストリーム環境から最新のオブジェクト定義を適用した後に、オブジェクトを変更するために使用できます。
使用方法についての詳細は、シナリオおよび実例 を参照してください。