GithubアクションおよびOracle Cloud Infrastructure DevOps Serviceを使用したクラウド・デプロイメントのCI/CDパイプラインの構築

アプリケーションをクラウドで効率的に実行するには、ソフトウェアの迅速な配信が不可欠です。Oracle DevOpsサービスは、開発者にエンドツーエンドの継続的なデプロイメント・エクスペリエンスを提供します。
マルチクラウド・ソリューションまたはハイブリッド・ソリューションでソリューションを提供する場合、継続的改善/継続的デプロイメント(CI/CD)プロセスの様々なステージを、いくつかの理由から切り離したい場合があります。
  • 一部のセキュリティ・レイヤーの外部に存在するサービスへのすべてのデプロイメント・ターゲットの露出を防止するため。
  • デプロイメント・プロセスの一部は、Infrastructure as Code (IaC)がデプロイメント・プロセスの一部であるかどうかによって異なる場合があります。
  • デプロイメント・プロセスにおける遅延の影響を最小限に抑えます。そのため、最終ステップの実行はローカル接続と依存関係のみを使用してローカルに制御されます。
  • 複数の環境にわたる統制資産を1箇所で管理およびリリースする機能。配分されたソースではなく。

このリファレンス・アーキテクチャは、サービスの一部をOracle Cloudの外部に(たとえば、GitHubやOCI内の他のサービス(DevOpsなど)配置することで、これらの考慮事項に対処します。このリファレンス・アーキテクチャでは、Oracle Cloud Infrastructure(OCI)プラットフォームへのデプロイメント・プロセス(CD)Oracle Container Engine for Kubernetes (OKE)、ファンクションおよびコンピュート・インスタンスを確認します。共通コンテナ・イメージは、個別のサービス(要素が汎用であるため)を使用して構築され、DevOpsによってデプロイされ、OKEを直接通信しません。

パイプライン・デプロイメントでソフトウェア・リリースを自動化すると、開発者の生産性が向上し、機能のリリース頻度が増加し、エラーが減少します。これにより、デプロイメント中のダウンタイムを回避し、アプリケーションの更新の複雑さを自動化できます。Oracle DevOpsは、オンプレミスや他のクラウドからOCIにワークロードを移行する顧客と、OCIで新しいアプリケーションを開発する顧客の両方が使用できます。

アーキテクチャ

このリファレンス・アーキテクチャでは、サンプル・アプリケーションがGitHubアクションおよびOCI DevOpsサービスを使用してGitHubからデプロイされます。アプリケーションはOKEクラスタにデプロイされます。

次の図は、このリファレンス・アーキテクチャを示しています。

devops-arch.pngの説明が続きます
図devops-arch.pngの説明

devops-arch-oracle.zip

このアーキテクチャには次のコンポーネントがあります。
  • リージョン

    OCIリージョンは、可用性ドメインと呼ばれる、1つ以上のデータ・センターを含むローカライズされた地理的領域です。リージョンは他のリージョンから独立し、広大な距離(国または大陸間)を分離できます。

    このアーキテクチャは単一のリージョンを使用します。

  • 外部CIシステム

    このアーキテクチャでは、外部の継続的インテグレーション・システムとしてGitHubアクションを使用します。GitHubアクションは、GitHubリポジトリからソフトウェア開発ワークフローを自動化、カスタマイズおよび実行します。ここで、GitHubアクションは、コードを構築し、Dockerを使用してそれをコンテナ化するために使用されます。コンテナ化されたイメージの準備ができたら、GitHubアクションはイメージをOCIアーティファクト・リポジトリにプッシュします(または、アーティファクトは中央の場所に配置され、GitHubアクションはアーティファクトを取得するためにDevOpsをナッジ化するように構成できます。これは、コンテンツがプルされ、プッシュされないことを意味します。アーティファクト・リポジトリへの転送が完了したら、OCI DevOpsデプロイメント・パイプラインをキックオフします。要件に基づいて、JenkinsやGitlabなどの他の継続的な統合システムを使用することもできます。

    IaCテクニックが使用されている場合、デプロイメントの前に、パイプラインはリソース・マネージャなどのサービスを使用して環境をインスタンス化し、完了するとリソース・マネージャを使用してこれらのリソースを切断できます。

    Devopsデプロイメント・パイプラインでは、結果の出力をレポート用にセキュアな場所に格納することもできます。

  • DevOpsプロジェクト

    DevOpsプロジェクトは、継続的な統合およびデプロイメント(CI/CD)ワークロードの実装に必要なリソースの論理グループです。DevOpsリソースには、アーティファクト、デプロイメント・パイプラインおよび環境があります。DevOpsプロジェクトを使用すると、すべてのDevOpsリソースのロギング、監視および通知を簡単に有効化できます。

  • デプロイメント・パイプライン

    デプロイメント・パイプラインは、一連のアーティファクトを環境に割り当てるために満たす必要がある要件を保持します。パイプラインには、パイプラインの構成要素であるステージが含まれます。パイプラインには、シリアルまたはパラレルで実行されるステージが含まれるため、ソフトウェアリリースのフローとロジックを制御できます。

  • デプロイメント・ステージ
    ステージとは、パイプラインの実行中に実行される個々のアクションです。DevOpsデプロイメント・パイプラインには、リリース・プロセスで使用する次の事前定義ステージ・タイプが含まれています。
    • ローリング・デプロイメント: OKE、ファンクションまたはインスタンス・グループへの増分リリース。
    • Wait:N秒待ちます。
    • 手動承認:承認が指定された場合に続行します。承認が却下された場合は停止します。
    • 関数の呼出し:関数を呼び出してカスタム・タスクと統合を実行し、リクエスト・パラメータのアーティファクトを渡します。
  • DevOpsアーティファクト

    DevOpsアーティファクトは、アプリケーションを構成するファイル、バイナリ、パッケージ、マニフェストまたはイメージへの参照またはポインタです。アーティファクトを作成する場合、実際のアーティファクトのソースの場所をOracle DevOpsに通知する必要があります。DevOpsは、OCIコンテナ・イメージ・レジストリおよびOCIアーティファクト・レジストリ・リポジトリをサポートしています。

  • アーティファクト・リポジトリ

    アーティファクト・リポジトリは、類似のアーティファクトをグループ化するためのリポジトリの作成に使用されます。リポジトリが作成されると、アーティファクトをアップロードできます。これらのアーティファクトは、ターゲット・デプロイメント環境に配信されるテキスト・ファイル、バイナリおよびデプロイメント・マニフェストのコレクションです。各アーティファクトには名前があり、パス: versionで構成されます。パスは、アーティファクトを編成するための文字列です。

  • OCI Logging and Notificationsサービス

    OCI Loggingサービスでは、デプロイメントに関連するログを格納します。デプロイメント・ランタイム出力およびデプロイメントの最終結果は、ログ・エントリとして表示されます。OCI Notifications Serviceは、デプロイメント・プロジェクトとそのリソースの最新の状態を可視化し、必要なアクションを実行します。たとえば、承認待ちのデプロイ・パイプラインのステージなど、重要なイベントが発生したときに通知されます。通知メッセージを受信したら、DevOpsデプロイメント・パイプラインに移動してステージを承認できます。

  • 導入環境
    環境とは、アーティファクトがデプロイされる顧客のコンピューティング・リソースの集合です。環境は、ファンクション、コンピュート仮想マシン(VM)またはベア・メタル・インスタンス、OKEクラスタのいずれかになります。
    • Oracle Kubernetesクラスタ(OKE): Oracle Container Engine for Kubernetesは、コンテナ化されたアプリケーションをクラウドにデプロイするために使用できる、完全に管理されたスケーラブルで可用性の高いサービスです。
    • コンピュート・インスタンス: OCI Computeサービスでは、クラウド内のコンピュート・ホストをプロビジョニングおよび管理できます。CPU、メモリー、ネットワーク帯域幅およびストレージのリソース要件を満たすシェイプを使用して、コンピュート・インスタンスを起動できます。
    • Functions: Oracle Functionsは、完全マネージド型のマルチテナントでスケーラビリティの高いオンデマンドのFunctions-as-a-Serviceプラットフォームです。エンタープライズグレードのOCIをベースにしており、Fn Projectオープン・ソース・エンジンを利用しています。
    このアーキテクチャーでは、環境としてOKEクラスタを使用します。環境は、デプロイメント・パイプラインのリージョンとは別のOCIリージョンに配置できます。これにより、開発者は、同じデプロイメント・パイプラインを使用して複数のOCIリージョンにデプロイできます。

推奨

開始点として次の推奨事項を使用します。お客様の要件は異なる可能性があります
  • VCN

    VCNを作成する際、VCNのサブネットにアタッチする予定のリソース数に基づいて、必要なCIDRブロックの数および各ブロックのサイズを決定します。標準プライベートIPアドレス領域内にあるCIDRブロックを使用します。

    VCNを作成した後、そのCIDRブロックを変更、追加および削除できます。

    このアーキテクチャは、パブリックVCNを使用してOKEクラスタをホストします。プライベートVCNを使用することもできます。その場合、NATゲートウェイを使用して、パブリック・インターネットを介したクラスタ・アクセスを付与します。

  • コンピュート・シェイプ

    このアーキテクチャは、E3またはE4フレックス・シェイプを持つOracle Linux OSイメージを使用し、最小リソースでOKEクラスタ・ノードのコンピュート・ホストをホストします。アプリケーションでより多くのメモリーまたはコアが必要な場合は、別のシェイプを選択できます。

  • OKE

    このアーキテクチャは、ターゲット・エンドポイントとしてOKEクラスタにデプロイされます。ワーカー・ノードは、E3またはE4 Oracle Linux OSにデプロイされます。このアーキテクチャでは、クラスタ内の3つのワーカー・ノードを使用しますが、各クラスタに最大1,000個のノードを作成できます。

  • コンテナ・イメージ・レジストリ

    このアーキテクチャでは、レジストリを内部的に使用するためのプライベートDockerレジストリとしてデプロイします。Dockerイメージはレジストリにプッシュおよびプルされます。また、レジストリをパブリックDockerレジストリとして使用することもできます。これにより、インターネットにアクセスし、適切なURLの知識を持つユーザーは、Oracle Cloudのパブリック・リポジトリからイメージを取り込むことができます。

  • アーティファクト・レジストリ

    このアーキテクチャは、OKEクラスタによって使用されるソフトウェアおよび構成のアーティファクトを作成します。アーキテクチャにより、内部使用のためにアーティファクト・レジストリ・リポジトリが作成されます。ソフトウェア・バイナリ、テキストおよびデプロイメント構成は、アーティファクト・レジストリ・リポジトリにアップロードおよびダウンロードされます。

注意事項

このリファレンス・アーキテクチャをデプロイする際には、次の点を考慮してください。

  • DevOpsでサポートされているデプロイメント

    DevOpsは、OKE、コンピュート・ホストおよびファンクションへのデプロイメントをサポートします。このアーキテクチャは、OKEクラスタにデプロイされます。要件に基づいて他のエンドポイントにデプロイすることを検討してください。

  • Linuxのサポート

    コンピュート・インスタンスへのインスタンス・グループ・デプロイメントでは、Linuxホストのみがサポートされます。

  • デプロイ済アーティファクト

    DevOpsでデプロイするアーティファクトは、OCIアーティファクト・レジストリまたはコンテナ・イメージ・レジストリ・リポジトリにある必要があります。

  • アプリケーションのグループ化

    ベスト・プラクティスとして、各アプリケーションおよびすべてのマイクロサービスを単一のプロジェクトにグループ化します。プロセスを分割する価値提案が理解され、部門が保守されていることを確認します。

デプロイ

このアーキテクチャをデプロイするには、このライブ・ラボでJavaアプリケーション・デプロイメントの手順に従います:

変更ログ

このログには、重要な変更がリストされます。