クラウド・デプロイメント用のCI/CDパイプラインの設定

ソフトウェアの迅速な配信は、アプリケーションをクラウドで効率的に実行するために重要です。Jenkinsは、Oracle Cloudのワークロードの継続的Iintegration (CI)および継続的デプロイメント(CD)パイプラインを自動化するための一般的な製品です。

アーキテクチャ

このリファレンス・アーキテクチャでは、JenkinsはOracle Cloud Infrastructureでホストされ、ビルド・オートメーションを一元化し、デプロイメントをスケーリングします。継続的インテグレーション・プロセスは、Oracle Cloud Infrastructure Registry (OCIR)およびContainer Engine for Kubernetes (OKE)を使用してアプリケーションを作成し、デプロイします。GitHubは、ソース・コードの管理に使用されます。

GitHubにはWebフック統合が用意されているため、Jenkinsでは、各コードのチェックイン後に自動ビルドおよびテストの実行が開始されます。サンプルWebアプリケーションはCI/CDパイプラインの一部としてデプロイされ、エンド・ユーザーはContainer Engine for Kubernetesクラスタからアクセスできます。このプロセスを簡略化するために、インフラストラクチャの自動化にはTerraformが使用されます。

このリファレンス・アーキテクチャでは、Terraformは、単一のJenkins VMからコントローラ(サーバー)およびエージェント(ワーカー)ノード構成まで、複数の異なる構成にJenkinsをデプロイできるTerraformモジュールを利用します。つまり、Jenkinsモジュールは、Kubernetes以外のユースケース(APEXアプリケーションの開発、VM上のWebLogicなど)用の他のアーキテクチャ・デプロイメントに組み込むことができます。

エージェント構成とは、ワークロード要件を反映する異なる数のコンピュート・インスタンスを提供するように環境を再構成できることを意味します。これには、古い依存関係の蓄積、一時的な依存関係の競合、および宣言されていない依存関係の操作の構築の問題を回避するために、エージェントVMを置き換える可能性が含まれます。

Jenkinsを実行しているVMノードは、Jenkinsをサポートするために必要なすべてのソフトウェアで事前に作成された事前定義済のVMイメージを使用して構成されます。

次の図に、この参照アーキテクチャを示します。

cicd-oci.pngの説明が続きます
図cicd-oci.pngの説明

cicd-oci-oracle.zip

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

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

  • 可用性ドメイン

    可用性ドメインは、リージョン内のスタンドアロンの独立したデータ・センターです。各可用性ドメインの物理リソースは、フォルト・トレランスを提供する他の可用性ドメインのリソースから分離されます。アベイラビリティ・ドメインは、電源や冷却などのインフラストラクチャや内部アベイラビリティ・ドメイン・ネットワークを共有しません。したがって、ある可用性ドメインで障害が発生しても、リージョン内の他の可用性ドメインには影響しません。

  • 仮想クラウド・ネットワーク(VCN)およびサブネット

    Jenkinsは、サブネットにセグメント化できるVCNにデプロイされた仮想マシン(VM)コンピュート・インスタンスで実行されます。Jenkinsはリージョナル・パブリック・サブネットAでホストされ、Container Engine for Kubernetesはリージョナル・パブリック・サブネットBにデプロイされます。

  • コンピュート・インスタンス

    Jenkinsはコンピュート・インスタンスVMにデプロイされます。Container Engine for Kubernetesクラスタは、コンピュート・インスタンスでもそのノードを実行します。

  • Container Engine for Kubernetes

    Container Engine for Kubernetesは、コンテナ化されたアプリケーションをクラウドにデプロイするために使用できる、完全に管理されたスケーラブルで可用性の高いサービスです。アプリケーションに必要なコンピュート・リソースを指定すると、Container Engine for Kubernetesによって既存のテナンシのOracle Cloud Infrastructureにプロビジョニングされます。

  • レジストリ

    レジストリは、本番ワークフローの開発を簡略化できるOracle管理レジストリです。レジストリを使用すると、開発者はDockerイメージなどの開発アーティファクトを簡単に格納、共有および管理できます。

  • Jenkins

    Jenkinsは、開発者がソフトウェアを確実に構築、テストおよびデプロイできるようにするオープン・ソースの自動化サーバーです。Jenkinsでは、マスター/エージェント・モードがサポートされています。このモードでは、プロジェクト構築のワークロードがマスターによって複数のエージェント・ノードに委任されます。単一のJenkinsインストールで、複数のプロジェクトをホストしたり、ビルドやテスト用に異なる環境を提供したりできます。

お薦め

実際の要件は、ここで説明するアーキテクチャとは異なる場合があります。次の推奨事項を開始点として使用します。

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

    このアーキテクチャーは、VM.Standard2.1シェイプのOracle Linux OSイメージを使用して、JenkinsサーバーノードとContainer Engine for Kubernetesクラスタノードの両方をホストします。アプリケーションでさらにメモリーまたはコアが必要な場合は、別のシェイプを選択できます。

  • VCN

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

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

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

  • Jenkins

    このアーキテクチャでは、Jenkinsをコンピュート・インスタンスにデプロイします。Jenkinsマスター・ノードを使用してCI/CDパイプラインを構築します。パラレルで構築および実行するパイプラインが複数ある場合は、Jenkinsエージェント・ノードを使用して、より多くのパイプラインを開発できます。

  • Container Engine for Kubernetes

    このアーキテクチャでは、Container Engine for Kubernetesクラスタをデプロイします。ワーカー・ノードは、VM.Standard2.1 Oracle Linux OSにデプロイされます。このアーキテクチャでは、クラスタ内の3つのワーカー・ノードが使用されますが、各クラスタに最大1000個のノードを作成できます。

  • レジストリ

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

注意事項

  • スケーラビリティ

    負荷に応じて、Container Engine for Kubernetesクラスタ内のワーカー・ノードの数を更新することで、アプリケーションをスケール・アウトできます。クラスタ内のワーカー・ノード数を減らすことでスケール・インすることもできます。クラスタでサービスを作成する場合、ロード・バランサを作成して、そのサービスに割り当てられたノード間でトラフィックを分散できます。Jenkinsの場合、Jenkinsマスター・ノードを使用して、複数のパイプラインに追加のエージェントを作成できます。

  • アプリケーションの可用性

    フォルト・ドメインは、単一の可用性ドメイン内で最高の回復力を提供します。複数の可用性ドメインで同じタスクを実行するコンピュート・インスタンスをデプロイできます。この設計では、冗長性を導入することでシングル・ポイント障害が解消されます。

  • 管理性

    このアーキテクチャでは、GitHubでホストされているサンプルWebアプリケーションをソース・コントロールに使用します。レジストリは、ビルド・パイプラインでアプリケーションのDockerビルド・イメージを格納するために使用されます。

  • セキュリティ

    ポリシーを使用して、会社が所有するOracle Cloud Infrastructureリソースにアクセスできるユーザーとその方法を制限します。

    Container Engine for KubernetesはOracle Cloud Infrastructure Identity and Access Management (IAM)と統合されており、ネイティブのOracle Cloud Infrastructureアイデンティティ機能を使用して簡単に認証できます。

デプロイ

この参照アーキテクチャをデプロイするために必要なコードは、GitHubで入手できます。シングルクリックでコードをOracle Cloud Infrastructure Resource Managerにプルし、スタックを作成してデプロイできます。または、GitHubからコンピュータにコードをダウンロードし、コードをカスタマイズし、Terraform CLIを使用してアーキテクチャをデプロイします。

  • Oracle Cloud Infrastructure Resource Managerを使用したデプロイ:
    1. Oracle Cloudへのデプロイをクリックます。

      まだサインインしていない場合は、テナンシおよびユーザー資格証明を入力します。

    2. 契約条件を確認して同意します。
    3. スタックをデプロイするリージョンを選択してください。
    4. 画面上のプロンプトと手順に従ってスタックを作成します。
    5. スタックの作成後、「Terraform処理」をクリックし、「プラン」を選択します。
    6. ジョブが完了するまで待機し、計画を確認します。

      変更するには、「スタックの詳細」ページに戻り、「スタックの編集」をクリックして必要な変更を行います。その後、プラン処理を再度実行します。

    7. 追加の変更が必要ない場合は、スタックの詳細ページに戻り、「Terraformアクション」をクリックして「適用」を選択します。
  • Terraform CLIを使用したデプロイ:
    1. GitHubに移動します。
    2. コードをローカル・コンピュータにダウンロードまたはクローニングします。
    3. README.mdの指示に従ってください。

変更ログ

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