Oracle Cloud Infrastructure DevOpsサービスを使用した継続的インテグレーションおよびデプロイメント・パイプラインの構築
ソフトウェアの迅速な配信は、クラウドでアプリケーションを効率的に構築およびデプロイするための鍵です。Oracle Cloud Infrastructure (OCI) DevOpsサービスは、開発者がOracle Cloudでソフトウェアとアプリケーションを簡単に構築、テストおよびデプロイするための継続的な統合およびデプロイメント(CI/CD)プラットフォームを提供します。
OCI DevOpsのビルドおよびデプロイメント・パイプラインにより、変更に基づくエラーを削減し、ソフトウェアの再構築と変更の適用時に再テストが可能になり、その結果、悪影響を早期に検出できるため、問題の構築と修正に費やす時間を短縮できます。
このサービスには、コードを格納するためのプライベートGITリポジトリのプロビジョニング、およびソース・コードと構成ファイルを保持するための外部コード・リポジトリへの接続のサポートが含まれています。ビルド・プロセスは中間アーティファクト(モジュール、パッケージなど)に依存して生成するため、Oracleのアーティファクトおよびコンテナ・リポジトリとも連携します。ワークロードを(オンプレミスまたは他のクラウドから) OCIに移行する場合でも、OCIで新しいアプリケーションを開発する場合でも、OCI DevOpsを使用して、ソフトウェア・デリバリのライフサイクルを簡略化できます。
ハイブリッドまたはマルチクラウド環境で作業する場合、OCI DevOpsを使用して、他の環境にデプロイするアーティファクトを作成できます。
アーキテクチャ
ビルド・パイプラインは、ユーザー定義のフローに従ってソフトウェアを構築およびテストし、最新バージョンのアプリケーションでコンテナ・イメージを作成します。ビルドの出力は、コンテナ・レジストリにイメージとして格納されます。次に、デプロイメント・パイプラインは、コンテナ・レジストリの組込みイメージとKubernetesマニフェストを使用して、最新バージョンのアプリケーションをOKEにデプロイします。
提供されているパイプラインは、ユニット・テストの適用や、静的コード分析およびlinterツールを使用してコード品質を分析するなどの考慮事項に対応していません。
次の図は、このリファレンス・アーキテクチャを示しています。
図deploy-pipeline-devops-arch.pngの説明
deploy-pipeline-devops-arch-oracle.zip
- リージョン
OCIリージョンは、可用性ドメインと呼ばれる、1つ以上のデータ・センターを含むローカライズされた地理的領域です。リージョンは他のリージョンから独立し、広大な距離(国または大陸間)を分離できます。このアーキテクチャは単一のリージョンを使用します。
- DevOps project
CI/CDワークフローの実装に必要なDevOpsリソースの論理グループ。DevOpsリソースには、アーティファクト、ビルド・パイプライン、デプロイメント・パイプライン、外部接続、トリガーおよび環境があります。DevOpsプロジェクトを使用すると、すべてのDevOpsリソースのロギング、監視および通知を簡単に有効化できます。
- ビルド・パイプライン
ビルド・パイプラインは、ソース・コード・リポジトリからコミットIDを取得し、そのソース・コードを使用してビルド手順を実行します。ビルド・パイプラインは、ビルド・プロセスの一連のステージ(ソフトウェア・アーティファクトの構築、テストおよびコンパイル、OCIリポジトリへのアーティファクトの配信、オプションでデプロイメントをトリガー)を定義します。ビルドの実行のフローと手順は、ビルド仕様ファイルで定義します。
- コード・リポジトリ
DevOpsサービスによってホストされるプライベートGitリポジトリ。OCI DevOpsコード・リポジトリを使用して、ソース・コードを格納、管理、開発できます。
- デプロイメント・パイプライン
一連のアーティファクトをターゲット環境に対して配信およびデプロイするための一連のステップ。ソフトウェアリリースのフローとロジックは、シリアルまたはパラレルで実行できるステージを定義することによって制御できます。
- デプロイ・ステージ
ステージとは、パイプラインの実行中に実行される個々のアクションです。DevOpsデプロイメント・パイプラインには、リリース・プロセスで使用する次の事前定義ステージ・タイプが含まれています。
- ローリング・デプロイメント: OKE、ファンクションまたはインスタンス・グループへの増分リリース
- 待機: N秒待機
- 手動承認:承認が指定された場合に続行します。承認が却下された場合は停止します。
- 関数の呼出し:関数を呼び出してカスタム・タスクまたは統合を実行し、リクエスト・パラメータのアーティファクトを渡します。
- DevOpsアーティファクト
DevOpsアーティファクトは、アプリケーションを構成するファイル、バイナリ、パッケージ、マニフェストまたはイメージへの参照またはポインタです。アーティファクトの作成時に、実際のアーティファクトのソースの場所をOracle DevOpsに通知します。DevOpsは、OCIコンテナ・イメージ・レジストリおよびOCIアーティファクト・レジストリ・リポジトリをサポートしています。
- アーティファクト・リポジトリ
アーティファクト・リポジトリは、類似のアーティファクトをグループ化するためのリポジトリを作成します。リポジトリが作成されると、そのリポジトリにアーティファクトをアップロードできます。これらのアーティファクトは、ターゲット・デプロイメント環境に配信されるテキスト・ファイル、バイナリおよびデプロイメント・マニフェストのコレクションです。各アーティファクトには名前があり、パス: versionで構成されます。パスは、アーティファクトを編成するための文字列です。
- OCI Logging and Notificationサービス
OCI Loggingサービスでは、デプロイメントに関連するログを格納します。デプロイメント・ランタイム出力およびデプロイメントの最終結果は、ログ・エントリとして表示されます。OCI Notifications Serviceは、デプロイメント・プロジェクトとそのリソースの最新の状態を可視化し、必要なアクションを実行します。たとえば、承認待ちのデプロイ・パイプラインのステージなど、重要なイベントが発生したときに通知されます。通知メッセージを受信したら、DevOpsデプロイメント・パイプラインに移動してステージを承認できます。
- 環境の配置
環境とは、アーティファクトがデプロイされる顧客のコンピューティング・リソースの集合です。環境は、ファンクション、コンピュート仮想マシン(VM)またはベア・メタル・インスタンス、OKEクラスタのいずれかになります。
- Oracle Kubernetesクラスタ(OKE): OCI Container Engine for Kubernetesは、完全に管理されたスケーラブルで可用性の高いサービスで、コンテナ化されたアプリケーションをクラウドにデプロイする際に使用できます。
- コンピュート・インスタンス: OCI Computeサービスでは、クラウド内のコンピュート・ホストをプロビジョニングおよび管理できます。CPU、メモリー、ネットワーク帯域幅およびストレージのリソース要件を満たすシェイプを使用して、コンピュート・インスタンスをデプロイできます。
- Functions: Oracle Functionsは、フルマネージド型のマルチテナントでスケーラビリティに優れたオンデマンドのFunctions-as-a-Serviceプラットフォームです。このサービスはエンタープライズグレードのOracle Cloud Infrastructure上に組み込まれており、Fn Projectオープン・ソース・エンジンによって強化されています。
推奨
- コンピュート・シェイプ
このアーキテクチャでは、E3またはE4フレックス・シェイプを持つOracle Linux OSイメージを使用します。インスタンス・グループ環境およびOKEクラスタ・ノードのコンピュート・ホストに必要な最小リソースから開始できます。アプリケーションでより多くのメモリーまたはコアが必要な場合は、別のシェイプを選択できます。
- VCN
VCNを作成する際、VCNのサブネットにアタッチする予定のリソース数に基づいて、必要なCIDRブロックの数および各ブロックのサイズを決定します。標準プライベートIPアドレス領域内にあるCIDRブロックを使用します。
VCNを作成した後、そのCIDRブロックを変更、追加および削除できます。
このアーキテクチャは、パブリックVCNを使用してContainer Engine for Kubernetesをホストします。プライベートVCNを使用することもできます。その場合、NATゲートウェイを使用して、パブリック・インターネットを介したクラスタ・アクセスを付与します。
- Oracle Container Engine for Kubernetes(OKE)
このアーキテクチャーは、ターゲット環境の1つとしてOKEクラスタを配備します。ワーカー・ノードは、E3またはE4 Oracle Linux OSにデプロイされます。このアーキテクチャでは、クラスタ内の3つのワーカー・ノードを使用しますが、各クラスタに最大1,000個のノードを作成できます。
- コンテナ・イメージ・レジストリ
このアーキテクチャでは、レジストリを内部的に使用するためのプライベートDockerレジストリとしてデプロイします。Dockerイメージはレジストリにプッシュおよびプルされます。レジストリをパブリックDockerレジストリとして使用することもできます。これにより、インターネットにアクセスし、適切なURLの知識を持つユーザーはOCIのパブリック・リポジトリからイメージを取得できます。
注意事項
このリファレンス・アーキテクチャをデプロイする際には、次の点を考慮してください。
- DevOpsは、OKE、コンピュート・ホスト、ファンクションへのデプロイメントをサポートしています。
- コンピュート・インスタンスへのインスタンス・グループ・デプロイメントでは、Linuxホストのみがサポートされます。
- DevOpsでデプロイするアーティファクトは、OCIアーティファクト・レジストリまたはコンテナ・イメージ・レジストリ・リポジトリにある必要があります。
- ベスト・プラクティスは、各アプリケーションとそのすべてのマイクロサービスを1つのプロジェクトにグループ化することです。
デプロイ
OCI DevOpsを使用してビルドおよびデプロイ・パイプラインを作成するためのTerraformコードは、GitHubで入手できます。
- Oracle Cloud Infrastructure Resource Managerのサンプル・スタックを使用してデプロイします:
をクリックします。
まだサインインしていない場合は、テナンシおよびユーザー資格証明を入力します。
- スタックをデプロイするリージョンを選択します。
- 画面に表示されるプロンプトと指示に従ってスタックを作成します。
- スタックの作成後、「Terraformアクション」をクリックし、「プラン」を選択します。
- ジョブが完了するまで待機し、プランを確認します。
変更を行うには、「スタック詳細」ページに戻り、「スタックの編集」をクリックして必要な変更を行います。次に、「計画」処理を再実行します。
- これ以上変更が必要ない場合は、「スタックの詳細」ページに戻り、「Terraformアクション」をクリックして「適用」を選択します。
- Terraform CLIを使用してデプロイ:
- GitHubに移動します。
- ローカル・コンピュータにリポジトリをクローニングまたはダウンロードします。
- READMEドキュメントの指示に従います。