Oracle Cloud InfrastructureでのTerraformを使用した、Dockerized Jenkins CI/CDパイプラインのデプロイ

ソフトウェアの迅速な配信は、アプリケーションをクラウドで効率的に実行するために重要です。Jenkinsは、Oracle Cloudでのワークロード用の継続的インテグレーションや継続的デプロイメント(CI/CD)パイプラインを自動化するための一般的な製品です。Oracle Cloud Infrastructure (OCI)でJenkinsをホストすると、ビルド自動化を一元化し、ソフトウェア・プロジェクトの成長に合せてデプロイメントをスケーリングできます。

アーキテクチャ

このリファレンス・アーキテクチャでは、Terraformを使用して、コンテナ化されたJenkinsコントローラ・エージェントを単一のOracle Linux VMにデプロイする方法を示します。デプロイすると、Oracle Linuxコンピュート・インスタンスが作成されます。このインスタンスは、Jenkinsコントローラ用とJenkinsエージェント用の2つの個別のDockerコンテナをホストします。

このソリューションは、コンピュート・インスタンスにアタッチされているOCIブロック・ストレージ上のコントローラ構成およびエージェント・ワークスペースも保存します。デプロイメント内のすべてのサービスをホストするために、OCIに個別のVCNが作成されます。

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


dock-jenkins-cicd-pipe.pngの説明が続きます
図dock-jenkins-cicd-pipe.pngの説明

dock-jenkins-cicd-pipe-oracle.zip

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

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

  • コンパートメント

    コンパートメントは、Oracle Cloud Infrastructureテナンシ内のリージョン間論理パーティションです。コンパートメントを使用して、Oracle Cloudでリソースを編成、リソースへのアクセスを制御および使用割当てを設定します。特定のコンパートメント内のリソースへのアクセスを制御するには、誰がリソースにアクセスできるか、どのアクションを実行できるかを指定するポリシーを定義します。

  • 可用性ドメイン

    可用性ドメインは、リージョン内の独立したスタンドアロン・データ・センターです。各可用性ドメイン内の物理リソースは、他の可用性ドメイン内のリソースから分離されているため、フォルト・トレランスが提供されます。可用性ドメインどうしは、電力や冷却、内部可用性ドメイン・ネットワークなどのインフラを共有しません。そのため、ある可用性ドメインでの障害がリージョン内の他の可用性ドメインに影響することはほとんどありません。

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

    VCNは、Oracle Cloud Infrastructureリージョンで設定する、カスタマイズ可能なソフトウェア定義のネットワークです。VCNは、従来のデータ・センター・ネットワークと同様に、ネットワーク環境の完全な制御を可能にします。VCNには重複しない複数のCIDRブロックを含めることができ、VCNの作成後にそれらを変更できます。VCNをサブネットにセグメント化して、そのスコープをリージョンまたは可用性ドメインに設定できます。各サブネットは、VCN内の他のサブネットと重複しない連続した範囲のアドレスで構成されます。サブネットのサイズは、作成後に変更できます。サブネットはパブリックにもプライベートにもできます。

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

    Jenkinsは、2つのコンテナ(1つはコントローラ、もう1つはエージェント)が実行されているコンピュート・インスタンスVMにデプロイされます。

  • ルート・テーブル

    仮想ルート表には、サブネットからVCN外部の宛先(通常はゲートウェイ経由)へのトラフィックをルーティングするルールが含まれます。

  • セキュリティ・リスト

    サブネットごとに、サブネットの内外で許可する必要があるトラフィックのソース、宛先およびタイプを指定するセキュリティ・ルールを作成できます。

  • Jenkins

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

  • ブロック・ストレージ

    ブロック・ストレージ・ボリュームでは、ストレージ・ボリュームを作成、アタッチ、接続および移動し、ボリューム・パフォーマンスを変更して、ストレージ、パフォーマンスおよびアプリケーションの要件を満たすことができます。ボリュームをインスタンスにアタッチおよび接続した後は、そのボリュームを通常のハード・ドライブのように使用できます。また、データを失うことなく、ボリュームを切断して別のインスタンスにアタッチすることもできます。これは、Jenkinsのコントローラ構成およびエージェント・ワークスペースを保存するために使用されます。

推奨事項

OCIでTerraformを使用して、コンテナ化されたJenkins CI/CDパイプラインをデプロイする際の開始点として次の推奨事項を使用します。 お客様の要件は、ここで説明するアーキテクチャとは異なる場合があります。
  • VCN

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

    プライベート接続を設定する他のネットワーク(Oracle Cloud Infrastructure、オンプレミス・データ・センターまたは別のクラウド・プロバイダ)と重複しないCIDRブロックを選択します。

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

    サブネットを設計するときには、トラフィック・フローおよびセキュリティ要件を考慮してください。特定の層またはロール内のすべてのリソースを同じサブネットに接続し、セキュリティ境界として機能できます。

    リージョナル・サブネットを使用します。

  • セキュリティ

    Oracle Cloud Guardを使用して、OCI内のリソースのセキュリティを事前にモニターおよびメンテナンスします。クラウド・ガードでは、ディテクタ・レシピを使用して、リソースでセキュリティの弱点を調べ、オペレータおよびユーザーにリスクのあるアクティビティを監視するために定義できます。構成の誤りやセキュアでないアクティビティが検出されると、クラウド・ガードは修正アクションを推奨し、定義できるレスポンダ・レシピに基づいてそれらのアクションの実行を支援します。

    最大限のセキュリティが必要なリソースの場合、Oracleではセキュリティ・ゾーンを使用することをお薦めします。セキュリティ・ゾーンは、ベスト・プラクティスに基づくセキュリティ・ポリシーのOracle定義レシピに関連付けられたコンパートメントです。たとえば、セキュリティ・ゾーン内のリソースにはパブリック・インターネットからアクセスできず、顧客管理キーを使用して暗号化する必要があります。セキュリティ・ゾーンでリソースを作成および更新すると、OCIでは、セキュリティ・ゾーン・レシピのポリシーに対して操作が検証され、いずれかのポリシーに違反する操作が拒否されます。

  • クラウド・ガード

    Oracleによって提供されるデフォルトのレシピをクローニングおよびカスタマイズして、カスタム・ディテクタおよびレスポンダ・レシピを作成します。これらのレシピを使用すると、警告を生成するセキュリティ違反のタイプと、そのレシピに対して実行できるアクションを指定できます。たとえば、表示がパブリックに設定されているオブジェクト・ストレージ・バケットを検出できます。

    クラウド・ガードをテナンシ・レベルで適用して、範囲を広げ、複数の構成を維持する管理上の負担を軽減します。

    管理対象リスト機能を使用して、特定の構成をディテクタに適用することもできます。

  • セキュリティ・リスト

    セキュリティ・リストを使用して、サブネット全体に適用されるイングレスおよびエグレス・ルールを定義します。

考慮事項

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

  • パフォーマンス

    最高のパフォーマンスを得るには、コンピュート・インスタンスに十分なコアおよびメモリーがあることを確認します。これは、Jenkinsで実行されるビルドまたはその他のタスクに基づきます。

  • セキュリティ

    ポリシーを使用して、会社が所有するOCIリソースに誰がアクセスできるか、およびその方法を制限します。

  • 可用性

    これは最小限の設計で、できるだけ迅速に稼働できます。可用性の向上のため、リファレンス・アーキテクチャ、コントローラ/エージェント・モードでのJenkinsのデプロイで説明されているデプロイメントを参照できます。このデプロイメントには、次の「詳細」トピックからアクセスできます。

  • コスト

    この実装のコストは、実行中のVMのコンピュート時間に基づいています。

デプロイ

OCIでTerraformを使用してコンテナ化されたJenkins CI/CDパイプラインをデプロイするためのTerraformコードは、Oracle Cloud Infrastructure Resource ManagerまたはGitHubから入手できます。

  • Oracle Cloud Infrastructure Resource Managerのサンプル・スタックを使用してデプロイします:
    1. Oracle Cloudへのデプロイをクリックします。

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

    2. スタックをデプロイするリージョンを選択します。
    3. 画面上のプロンプトおよび指示に従ってスタックを作成します。
    4. スタックを作成したら、「Terraformアクション」をクリックし、「プラン」を選択します。
    5. ジョブが完了するまで待機し、プランをレビューします。

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

    6. それ以上の変更が不要な場合は、「スタックの詳細」ページに戻り、「Terraformアクション」をクリックして「適用」を選択します。
  • Terraform CLIを使用してデプロイします:
    1. GitHubにアクセスします。
    2. リポジトリをクローニングするか、ローカル・コンピュータにダウンロードします。
    3. READMEドキュメントの手順に従います。

承認

作成者: Ahmed Mansour