このページでは、Cloud Build を使用して Node.js アプリケーションのビルドとテスト、ビルドされたアーティファクトの Artifact Registry 内の npm リポジトリへの保存、ビルドの来歴情報の生成を行う方法について説明します。
Cloud Build を使用すると、一般公開されているコンテナ イメージを使用してタスクを実行できます。一般公開の Docker Hub の node イメージには、npm ツールがプリインストールされています。このツールを使用して Node.js プロジェクトをビルドするように Cloud Build を構成できます。
準備
このページの説明は、Node.js の知識があることを前提としています。次の特長があります。
- npm について理解を深めておきましょう。
Node.jsプロジェクトを用意します(package.jsonとtest.jsファイルを含む)。package.jsonファイルにstartスクリプトとtestスクリプトが含まれていることを確認します。- Cloud Build 構成ファイルの作成方法に精通している必要があります。
- Artifact Registry に npm リポジトリを配置します。リポジトリがない場合は、新しいリポジトリを作成します。
- このページで
gcloudコマンドを実行するには、Google Cloud CLI をインストールします。
npm を使用して作成する
Docker Hub から取得した node イメージでタスクを実行するには、Cloud Build 構成ファイルの name フィールドにイメージの URL を指定します。Cloud Build は、イメージのデフォルトのエントリポイントを使用して、name フィールドに指定されたコンテナを開始します。デフォルトのエントリポイントをオーバーライドし、ビルドの呼び出し時のビルドステップの実行方法を定義するには、ビルドステップに entrypoint フィールドを追加します。Docker Hub の node イメージには、npm ツールがプリインストールされています。ビルドステップのエントリポイントとして呼び出すツールを entrypoint フィールドに指定します。
ビルド構成ファイルの例:
nameフィールドには、Cloud Build がタスクの実行で Docker Hub から取得したnodeイメージを使用することを指定します。nodeイメージを指定している場合は、ノード バージョンを省略してデフォルトの:latestを使用することも、ノード バージョンを指定して特定のバージョンを使用することもできます。たとえば、name: nodeはノードの最新バージョンを使用し、name: node:12はnode:12を使用します。entrypointフィールドには、nodeイメージの呼び出し時にnpmツールが使用されることを指定します。steps: - name: 'node' entrypoint: 'npm'
Node.js ビルドを構成する
プロジェクトのルート ディレクトリに、
cloudbuild.yamlという名前で構成ファイルを作成します。依存関係をインストールする: アプリケーションをビルドする前に、すべてのプロジェクトの依存関係が
npmからインストールされている必要があります。依存関係をインストールするには、npmビルドステップでinstallコマンドを使用します。ビルドステップのargsフィールドは引数のリストを受け取り、name フィールドによって参照されるイメージに渡します。ビルド構成ファイルで、installをargsフィールドに追加して、installコマンドを呼び出します。steps: - name: 'node' entrypoint: 'npm' args: ['install']テストを追加する:
package.jsonにtestスクリプトを定義した場合、argsフィールドにtestを追加すると、スクリプトを実行するように Cloud Build を構成できます。steps: - name: 'node' entrypoint: 'npm' args: ['install'] - name: 'node' entrypoint: 'npm' args: ['test']カスタム コマンドを実行する:
package.jsonにカスタム コマンドが含まれている場合、そのコマンドを実行するように Cloud Build を構成できます。argsフィールドに、最初の引数としてrunを追加し、その後にカスタム コマンドの名前を指定します。次のビルド構成ファイルには、buildというカスタム コマンドを実行するための引数が追加されています。steps: - name: 'node' entrypoint: 'npm' args: ['install'] - name: 'node' entrypoint: 'npm' args: ['test'] - name: 'node' entrypoint: 'npm' args: ['run', 'build']Artifact Registry にアップロードする:
構成ファイルで
npmPackagesフィールドを追加し、Artifact Registry で npm リポジトリを指定します。artifacts: npmPackages: - repository: 'https://LOCATION-npm.pkg.dev/PROJECT-ID/REPOSITORY_NAME' packagePath: 'PACKAGE_PATH'次の値を置き換えます。
- LOCATION: Artifact Registry 内のリポジトリの場所。
- PROJECT_ID: Artifact Registry リポジトリを含む Google Cloud プロジェクトの ID。
- REPOSITORY_NAME: Artifact Registry の npm リポジトリの名前。
- PACKAGE_PATH: Artifact Registry にアップロードする npm パッケージを含むローカル ディレクトリのパス。絶対パスを使用することをおすすめします。
PACKAGE_PATH値を.にすると、現在の作業ディレクトリを使用できますが、このフィールドを省略したり空のままにしたりすることはできません。このディレクトリにはpackage.jsonファイルが含まれている必要があります。
省略可: 来歴の生成を有効にする
Cloud Build は、検証可能なソフトウェア アーティファクトのためのサプライ チェーン レベル(SLSA)ビルドの来歴メタデータを生成し、継続的インテグレーション パイプラインの保護をサポートします。
来歴の生成を有効にするには、構成ファイルの
optionsセクションにrequestedVerifyOption: VERIFIEDを追加します。手動またはビルドトリガーを使用してビルドを開始します。
ビルドが完了すると、Artifact Registry でリポジトリの詳細を表示できます。
また、ビルドの来歴メタデータの表示や来歴の検証を行うこともできます。
複数の node のバージョンでテストを行う
プロジェクトで node の複数のバージョンが必要になる場合があります。このような場合、次のように Cloud Build トリガーを作成して構成します。
- ビルド構成ファイルで、
nodeのバージョンを代入変数で指定します。 - アプリケーションをビルドする
nodeのバージョンごとに 1 つのトリガーを作成します。 - 各トリガーの設定で代入変数値のフィールドを使用し、トリガーに
nodeのバージョンを指定します。
次のステップでは、トリガー固有の代入変数を使用して node のバージョンを指定する方法について説明します。
リポジトリのルートにビルド構成ファイルを追加します。このファイルに
nodeのバージョンを代入変数として指定します。次のビルド構成ファイルの例では、$_NODE_VERSIONがユーザー定義の代入変数です。steps: - name: 'node:$_NODE_VERSION' entrypoint: 'npm' args: ['install'] - name: 'node:$_NODE_VERSION' entrypoint: 'npm' args: ['test']ビルドトリガーを作成する
nodeのバージョンごとに、次の手順でビルドトリガーを作成します。コンソールで [トリガー] ページを開きます。 Google Cloud
ページの上部にあるプロジェクト セレクタのプルダウン メニューからプロジェクトを選択します。
[開く] をクリックします。
[トリガーを作成] をクリックします。
[トリガーの作成] ページで、次の設定を入力します。
トリガーの名前を入力します。
トリガーを開始するリポジトリ イベントを選択します。
ソースコードとビルド構成ファイルを格納するリポジトリを選択します。
トリガーを開始するブランチまたはタグ名を正規表現で指定します。
構成: 以前に作成したビルド構成ファイルを選択します。
[代入変数] で [変数を追加] をクリックします。
- [変数] には、ビルド構成ファイルで使用した
nodeバージョンの変数を指定します。[値] には、nodeのバージョンを指定します。たとえば、_NODE_VERSIONや12です。
- [変数] には、ビルド構成ファイルで使用した
[作成] をクリックして、ビルドトリガーを保存します。
これらのトリガーを使用して、トリガーに指定した node のバージョンでコードをビルドできます。
次のステップ
- ビルド結果を表示する方法を学習する。
- ビルドを保護する方法を学習する。
- コンテナ イメージを作成する方法を学習する。
- Go アプリケーションをビルドする方法を学習する。
- Compute Engine で Blue/Green デプロイを実行する方法を学習する。
- ビルドエラーをトラブルシューティングする方法について学習する。