このページでは、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 デプロイを実行する方法を学習する。
- ビルドエラーをトラブルシューティングする方法について学習する。