Node.js アプリケーションのビルドとテスト

このページでは、Cloud Build を使用して Node.js アプリケーションのビルドとテスト、ビルドされたアーティファクトの Artifact Registry 内の npm リポジトリへの保存、ビルドの来歴情報の生成を行う方法について説明します。

Cloud Build を使用すると、一般公開されているコンテナ イメージを使用してタスクを実行できます。一般公開の Docker Hub の node イメージには、npm ツールがプリインストールされています。このツールを使用して、Node.js プロジェクトをビルドするように Cloud Build を構成できます。

準備

このページの説明は、Node.js の知識があることを前提としています。次の特長があります。

  • npm について理解を深めておきましょう。
  • Node.js プロジェクトを用意します(package.jsontest.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:12node:12 を使用します。
  • entrypoint フィールドには、node イメージの呼び出し時に npm ツールが使用されることを指定します。

     steps:
     - name: 'node'
       entrypoint: 'npm'
    

Node.js ビルドを構成する

  1. プロジェクトのルート ディレクトリに、cloudbuild.yaml という名前で構成ファイルを作成します。

  2. 依存関係をインストールする: アプリケーションをビルドする前に、すべてのプロジェクトの依存関係が npm からインストールされている必要があります。依存関係をインストールするには、npm ビルドステップで install コマンドを使用します。ビルドステップの args フィールドは引数のリストを受け取り、name フィールドによって参照されるイメージに渡します。ビルド構成ファイルで、installargs フィールドに追加して、install コマンドを呼び出します。

     steps:
     - name: 'node'
       entrypoint: 'npm'
       args: ['install']
    
  3. テストを追加する: package.jsontest スクリプトを定義した場合、args フィールドに test を追加すると、スクリプトを実行するように Cloud Build を構成できます。

     steps:
     - name: 'node'
       entrypoint: 'npm'
       args: ['install']
     - name: 'node'
       entrypoint: 'npm'
       args: ['test']
    
  4. カスタム コマンドを実行する: 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']
    
  5. Artifact Registry にアップロードします

    Cloud Build は、Cloud Build 構成ファイルの npmPackages フィールドを使用してスタンドアロン npm パッケージを Artifact Registry にアップロードする際に、ソフトウェア アーティファクトのためのサプライ チェーン レベル(SLSA)のビルド来歴情報を生成します。

    構成ファイルで 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 ファイルを含める必要があります。
  6. 省略可: リージョン ビルドの来歴を有効にする

    リージョン ビルドを使用している場合は、ビルド構成ファイルの optionsrequestedVerifyOption フィールドを追加します。値を VERIFIED に設定すると、来歴メタデータの生成が有効になります。requestedVerifyOption: VERIFIED を追加しない場合、Cloud Build はグローバル ビルドでのみ来歴を生成します。

    options:
      requestedVerifyOption: VERIFIED
    
  7. 手動またはビルドトリガーを使用してビルドを開始します。

    ビルドが完了したら、Artifact Registry でリポジトリの詳細を表示できます。

    また、ビルドの来歴メタデータを表示し、来歴を検証して、ソフトウェアのサプライ チェーンを保護することもできます。

複数の node のバージョンでテストを行う

プロジェクトで node の複数のバージョンが必要になる場合があります。このような場合、次のように Cloud Build トリガーを作成して構成します。

  • ビルド構成ファイルで、node のバージョンを代入変数で指定します。
  • アプリケーションをビルドする node のバージョンごとに 1 つのトリガーを作成します。
  • 各トリガーの設定で代入変数値のフィールドを使用し、トリガーに node のバージョンを指定します。

次のステップでは、トリガー固有の代入変数を使用して node のバージョンを指定する方法について説明します。

  1. リポジトリのルートにビルド構成ファイルを追加します。このファイルに node のバージョンを代入変数として指定します。次のビルド構成ファイルの例では、$_NODE_VERSIONユーザー定義の代入変数です。

     steps:
     - name: 'node:$_NODE_VERSION'
       entrypoint: 'npm'
       args: ['install']
     - name: 'node:$_NODE_VERSION'
       entrypoint: 'npm'
       args: ['test']
    
  2. ビルドトリガーを作成する node のバージョンごとに、次の手順でビルドトリガーを作成します。

    1. Google Cloud コンソールで [トリガー] ページを開きます。

      [トリガー] ページを開く

    2. ページの上部にあるプロジェクト セレクタのプルダウン メニューからプロジェクトを選択します。

    3. [開く] をクリックします。

    4. [トリガーを作成] をクリックします。

      [トリガーの作成] ページで、次の設定を入力します。

      1. トリガーの名前を入力します。

      2. トリガーを開始するリポジトリ イベントを選択します。

      3. ソースコードとビルド構成ファイルを格納するリポジトリを選択します。

      4. トリガーを開始するブランチまたはタグ名を正規表現で指定します。

      5. 構成: 以前に作成したビルド構成ファイルを選択します。

      6. [代入変数] で [変数を追加] をクリックします。

        1. [変数] には、ビルド構成ファイルで使用した node バージョンの変数を指定します。[] には、node のバージョンを指定します。たとえば、_NODE_VERSION12 です。
    5. [作成] をクリックして、ビルドトリガーを保存します。

これらのトリガーを使用して、トリガーに指定した node のバージョンでコードをビルドできます。

次のステップ