アプリケーションの開発と仮想マシンへのデプロイ

DevOps Insights 2026年8月31 日にサービス終了となり、提供が中止されます。 Continuous Delivery は、2027年2月12日に以下のリージョンで提供が中止されます: au-sydca-torus-east。 また、同日をもって、Code Risk Analyzerもすべての地域で提供を終了いたします。 あるリージョンでこれらの機能が実際に利用されていない場合、そのリージョンの機能は早期に提供が終了し、新しいインスタンスの受け入れが停止される可能性があります。 詳細はこちら

このチュートリアルでは、Continuous Delivery ツールチェーンをセットアップして、シンプルなアプリケーション (アプリ) を仮想マシンにデリバリーする方法を示します。 ソース管理をセットアップしてから、コードのビルドとテストを行い、別のデプロイメント・ステージにデプロイできます。

デフォルトでは、サンプルの Maven ベースの Java Hello World アプリがツールチェーンで使用されますが、代わりに独自のアプリを用意して、それにリンクすることもできます。 このツールチェーンには、 Code Risk Analyzer との連携による継続的インテグレーションおよび継続的デリバリー、ソース管理、課題追跡、オンライン編集のためのパイプラインが設定されています。

アプリケーション・コードは、アプリケーション・ソース管理リポジトリー (repo) に格納されます。 ビルドとデプロイのスクリプトは、パイプライン・ソース管理リポジトリーに格納されます。 ビルドとデプロイのスクリプトをカスタマイズして、アプリの開発要件に合わせることができます。

このチュートリアルのツールチェーンは、以下のベスト・プラクティスを実装します。

  • すべての Git コミットでアプリケーション・バイナリーをビルドし、トレーサビリティーを確保するためにビルド番号、タイム・スタンプ、コミット ID に基づいてタグを設定します。
  • デプロイメント・マニフェストにビルド・バイナリーを自動的に挿入します。
  • Object Storage インスタンスとバケットを作成し、すぐに使用できるようにビルドされた一時的なバイナリー・ファイルを格納します。 上級者向けに既存の Artifactory repo を構成し、トレーサビリティーとコンプライアンスのためにビルド成果物のバージョン管理をサポートするようツールチェーンに統合できます。

このツールチェーンは、アプリ・コードをビルドし、仮想マシンにデプロイするために 3 つのパイプラインを実装します。

  • 継続的統合 (CI) パイプライン: アプリケーション・ソース・コード repo のマスター・ブランチに変更がマージされると、このパイプラインがトリガーされます。 CI パイプラインは、単体テスト、コード・カバレッジ、および静的スキャンをアプリケーション・ソース・コードに対して実行します。 また CI パイプラインはバイナリー・ビルド成果物を生成し、ツールチェーンで構成されているとおりに、それを Object Storage バケットまたは Artifactory にアップロードします。 さらに CI パイプラインは、ビルド成果物のメタデータを生成し、インベントリー repo に格納します。

  • 継続的デプロイメント (CD) パイプライン: CI パイプラインが正常に実行されると、このパイプラインがトリガーされます。 CD パイプラインは、ビルド成果物をデプロイメント環境にデプロイする責任を担います。 このパイプラインは、ヘルス・チェックを実行してアプリケーションのデプロイメントが正常に行われたことを検証し、デプロイメントが正常に行われなかった場合には変更をロールバックします。

  • プル要求 (PR) パイプライン: アプリケーション・ソース・コード・リポジトリーでマージ要求またはプル要求が作成されると、このパイプラインがトリガーされます。 通常、この要求は、アプリケーション・ソース・コード開発者が開発ブランチからマスター・ブランチまたは他のブランチに変更をマージするために手動で作成されます。 PR パイプラインは、単体テストおよび静的スキャンをアプリケーション・ソース・コードに対して実行します。

建築図*
建築図

開始前に

ツールチェーンがアプリを仮想サーバー・インスタンスにデプロイするように、仮想サーバー・インスタンスをセットアップおよび構成します。 既存の仮想サーバー・インスタンスを使用するか、以下の要件に適合する新しい仮想サーバー・インスタンスをセットアップできます。

  1. IBM Cloud 上で仮想サーバー・インスタンスをセットアップします
  2. 浮動 IP アドレスを予約し、パブリック・インターネットを介して仮想サーバー・インスタンスにアクセスできるようにします。 または、使用可能な DNS エントリーを使用することもできます。 このチュートリアルでは、浮動 IP アドレスを使用します。
  3. ユーザー (特権が付与されていないユーザーが望ましい) および SSH 鍵を仮想サーバー・インスタンス用に作成します。
  4. セキュリティー・グループを仮想サーバー・インスタンス用に構成します。 デプロイしたアプリでツールチェーンがヘルス・チェックを実行できるようにするため、ポート TCP を許可する 8080 用のインバウンド・ルールを追加し、アプリ・エンドポイントにアクセスできるようにします。 インバウンド・ルールの追加方法について詳しくは、 セキュリティー・グループの管理を参照してください。
  5. Java™ SDK が VM にインストールされていることを確認するか、以下のコマンドを使用してそれをインストールします: yum install -y tar java
  6. オプション。 シークレットを Key Protect に保管する必要がある場合、値を base64 エンコードします。 必要なコマンド詳細については、イメージ署名: GPG 鍵の生成を参照してください。

ツールチェーンを作成する

**「仮想マシン用のアプリケーションを開発する (Develop an application for a Virtual Machine)」**ツールチェーンを作成するには、以下をクリックします。

ツールチェーンの作成

または、 IBM Cloud コンソールから、 メニューアイコンの ハンバーガーアイコン > Platform Automation > Toolchains をクリックします。 **「ツールチェーン」ページで、「ツールチェーンの作成」**をクリックします。 **「ツールチェーンの作成」ページで、「仮想マシン用のアプリケーションを開発する (Develop an application for a Virtual Machine)」**をクリックします。

単純な仮想サーバー・インスタンスを構成する

  1. 作成」タブで、デフォルト設定を確認します。

    ツールチェイン設定*
    設定
    ツールチェイン設定

  2. ツールチェーンの名前は、そのツールチェーンを IBM Cloud 内で識別するためのものです。 別の名前を使用する場合は、ツールチェーンの名前を変更します。 アプリにアクセスするときに使用する URL を構成するためにツールチェーン名が使用されるので、一意の名前を指定してください。

  3. デフォルトでは、ツールチェーンによって Git Repos and Issue Tracking にソース repo が作成されます。 Git ソース repo に別のプロバイダー (GitHub または GitLab など) を使用する場合には、使用可能な repo の一覧から選択してください。

    このツールチェーンでは、Continuous Delivery サービスに含まれるツールが使用されます。 そのサービスのインスタンスが、選択したリソース・グループにまだ含まれていない場合は、 作成 をクリックしてツールチェーンを作成するときに、無料のライト・プランで自動的に追加されます。

アプリ repo を構成する

  1. Git Repos and Issue Tracking」タブで、アプリのソース・コードの場所を指定しているデフォルト設定を確認します。

  2. デフォルトでは、ツールチェーンによってサンプルの Maven ベースの Java Hello World アプリが使用されます。 独自のアプリにリンクするように、場所の設定を更新することができます。

    caption-side=bottom"
    アプリ・レポ

インベントリー repo を構成する

インベントリー・リポジトリーには、ビルドと成果物のメタデータが格納されます。 コミットで記述されている成果物を仮想サーバー・インスタンスにデプロイするパイプラインをトリガーするには、インベントリー・リポジトリーにコミットしてから、受け入れタスクを実行します。

caption-side=bottom"
ツールチェーン・インベントリー・レポ*
ツールチェーン・インベントリー・レポ

デリバリー・パイプラインを構成する

  1. デリバリー・パイプライン」タブに移動します。

    Delivery Pipeline コンフィギュレーション
    Delivery Pipeline コンフィギュレーション

  2. 既存の IBM Cloud API キーを指定するか、キーを作成します。 ツールチェーンではこのキーを使用して、ツールチェーンに統合されている他の Cloud サービスと対話します。

  3. 仮想サーバー・インスタンスが実行されるリージョンを指定します。例: us-south

  4. 仮想サーバー・インスタンスの浮動 IP アドレスを指定します。aaa.bbb.ccc.ddd という形式を使用します。

  5. 認証タイプとして SSH Keyを選択し、以下の資格情報を指定します。

    • ユーザー名: アプリケーションをデプロイおよび実行する許可を持つ仮想サーバー・インスタンス・ユーザーのユーザー名。
    • SSH 鍵: アプリケーションを実行およびデプロイするためのユーザーの SSH 秘密鍵。
  6. 以下のコマンドを実行して、アプリケーションを実行およびデプロイする許可を持つユーザー用に、仮想サーバー・インスタンス上に新しい鍵ペアを作成します。

            # Create the SSH key
                `ssh-keygen -C cloud.ibm.com`
            # copy public key to the VSI
                `ssh-copy-id -i .ssh/id_rsa.pub <UserName>@<xx.yy.zz.aa>`
    

オプション。 一時的なストレージ構成を作成する

ソースに変更を加えると、必ず継続的統合パイプラインがトリガーされます。 継続的統合が正常に実行されると、ビルドまたはバイナリー成果物が作成され、一時ストレージに保存されます。その後、ターゲットの仮想サーバー・インスタンスにデプロイされます。

  1. ツールチェーンの「その他のツール」タブから、ビルド・バイナリー・ファイルを保存する一時ストレージとして Object Storage と Artifactory のいずれかを使用するよう選択できます。
  2. ご使用のアカウントに Object Storage インスタンスが含まれていない場合、ツールチェーンによって新しい Object Storage インスタンスがデフォルトのリソース・グループに作成されます。 次に、ツールチェーンと同じ名前を使用して、新しい Object Storage インスタンス内にバケットがツールチェーンによって作成されます。
  3. アカウントに Object Storage インスタンスが既に存在する場合、ツールチェーンはそのいずれかのインスタンスを使用して、一時的なビルド成果物を格納します。
  4. Object Storage または Artifactory の詳細を構成するには、『上級者オプションを構成する』というセクションを参照してください。
  5. 作成」をクリックして、ツールチェーンを作成します。

新しいツールチェーンを探索する

ツールチェーンの作成後、ツールチェーンの一部となる各ツール統合が図に示されます。

パイプラインを探索する

パイプラインを探索すると、ツールチェーンの流れや、各パイプライン内で実行されるさまざまな処理について理解することができます。 例えば、 cra-discovery-scan などの複数のステップや、パラメーターおよび状況の詳細を表示するには、CI パイプライン・ツール統合をクリックし、次に「成功した PipelineRuns (Succeeded PipelineRuns)」をクリックします。

CIPipelineRun詳細* 継続
インテグレーションPipelineRun
*

DevOps Insights の詳細はこちら

DevOps Insights は、エンドツーエンド DevOps プロセスをトラッキングし、改善することができるよう、ご使用のツールチェーンからデータを収集します。 品質メトリックの表示、ビルド・ジョブとデプロイメント・ジョブのトラッキング、ポリシーの表示などを行います。

コードがポリシーを満たしていない (上回っていない) 場合、デプロイメントは停止され、リスクがリリースされるのを防ぐことができます。 DevOps Insights は、継続的デリバリー環境のセーフティー・ネットとして、または品質標準の実装および改善のための手段として使用できます。

次のイメージに表示されている品質ダッシュボードには、各アプリケーションの単体テスト、コード・カバレッジ、機能検証テスト、静的セキュリティー・スキャンなどの品質データ・セットが示されます。

DevOps Insights 品質ダッシュボード
DevOps Insights 品質ダッシュボード

GitOps を探索する

GitOps は、Git を DevOps ツールチェーンの中心に位置付け、仮想サーバー・インスタンス上にデプロイする内容の信頼ソースとしての役割を担う一連のプラクティスとツールです。 GitOps を使用すると、開発者とオペレーターはよく知っている Git ワークフローを使って、インフラストラクチャーおよびアプリケーションに対する変更を定義、レビュー、確認、承認、および監査できます。 自動化されたツールによって、ターゲットのライブ状態が、Git で記述されている必要な状態と同期されます。

このチュートリアルでこのツールチェーンを使用すると、環境ごとに 1 つのブランチを作成することによって複数の環境に対するデプロイメントを制御できます。 以下のサンプル・ワークフローでは、インベントリー repo の特定のブランチに対してプル要求またはコミットが行われると、Continuous Delivery パイプラインがトリガーされます。

  1. IBM Cloud の仮想サーバー・インスタンス用にツールチェーンを作成します。そのために、アプリケーション repo および Object Storage などの仮想サーバー・インスタンスの詳細を指定します。 インベントリー repo の詳細は指定しないでください。
  2. ツールチェーンの作成後、インベントリー repo から、DevStagingProd などの複数のブランチを作成します。
  3. Continuous Delivery パイプラインをクリックして、トリガーに移動します。 CD-Pipeline (マスター) をトリガーするブランチが含まれるインベントリー repo としてトリガー・ソースを追加します。
  4. 正常に統合された後に、個々のインベントリー repo にコミットするように、継続的統合パイプラインを変更します。
  5. インベントリー repo で十分な数のコミットが使用可能になったら、その repo のプル要求をマスターにマージして、Continuous Delivery ビルドを開始します。

GitOps を使用すると、環境ごとに 1 つのブランチを作成することによって複数の環境へのデプロイメントを制御できます。

上級者オプションを構成する

上級者オプションにアクセスするには、「**その他のツール」**タブに移動します。

  • 一時的なビルド成果物を格納するために、既存の Cloud Object Storage インスタンスを次のように指定します。

    • 一時的なビルド成果物を格納する、Object Storage インスタンス内のバケットの名前を指定します。 オブジェクトをバケットにアップロードするには、ツールチェーンが作成されたのと同じリージョンにバケットがなければなりません。

    • 指定したバケットに対する読み取りアクセス権限と書き込みアクセス権限を持つ API キーを選択します。

    Cloud Object Storage 統合詳細
    Cloud Object Storage 統合詳細

  • 一時的なビルド成果物を格納するために Artifactory アカウントを使用するには、Artifactory インスタンスの詳細を指定します。

    • Artifactory サーバー URL: Artifactory サーバーの HTTPS URL
    • タイプ: npm、maven、docker のいずれかを選択します
    • Artifactory UserID: Artifactory サーバーにログインするためのユーザー ID を xxx.xxx@xxx.com という形式で指定します
    • Artifactory APIKey: ユーザーが生成した APIKey (既存または新規)
    • リリース URL: 成果物が格納される Artifactory repo のリリース URL

Artifactory の一部のフィールドは、Artifactory 構成を使用する場合にのみ必須です。

Artifactory 統合の詳細 統合の詳細
Artifactory

作成」をクリックして、ツールチェーンを作成します。 このプロセスは、完了までに数分かかる場合があります。

オプション。 デプロイ済みアプリケーションの以前のバージョンにロールバックする

テスト結果、コード品質の問題、その他の問題のため、デプロイしたコードをロールバックする必要が生じることがあります。 インベントリー・リポジトリーを使用して、アプリケーションの以前のバージョンにロールバックできます。

  1. git clone <inventory-repo-url> と入力して、パイプラインから インベントリー Git リポジトリーを複製してダウンロードします。 Continuous Delivery パイプラインは、インベントリー repo のマスター・ブランチを listen します。
  2. git log と入力して、継続的統合パイプラインによって完了したコミットの一覧を表示します。
  3. git checkout master と入力して、マスター・ブランチをチェックアウトします。
  4. lastCommitID=$(git log --format="%H" -n 1) と入力して、repo の最後のコミット ID を取得します。
  5. git revert $lastCommitID と入力して、現行の変更を取得して新しいコミットを作成します。 このように元に戻したことについてのコミット・メッセージを指定してください。
  6. git push と入力して、変更をインベントリー repo にプッシュし、アプリケーション・デプロイメントのための Continuous Delivery パイプラインを開始します。

次のステップ

このチュートリアルではサンプルの Java アプリを使用しましたが、仮想サーバー・インスタンス上に他の言語ベースのアプリをデプロイすることもできます。 別の言語ベースのアプリを仮想サーバー・インスタンスにデプロイするには、このチュートリアル用に作成したツールチェーンと仮想サーバー・インスタンスの両方を削除してください。