构建和测试 Node.js 应用

本页面介绍如何使用 Cloud Build 构建和测试 Node.js 应用、将构建的工件存储在 Artifact Registry 的 npm 代码库中,以及生成构建出处信息。

通过 Cloud Build,您可以使用任何公开可用的容器映像来执行任务。Docker Hub 中的公共 node 映像预安装了 npm 工具。您可以配置 Cloud Build 来使用此工具构建 Node.js 项目。

准备工作

本页面的说明假定您熟悉 Node.js。此外:

使用 npm 进行构建

如需在 Docker Hub 中的 node 映像中执行任务,请在 Cloud Build 配置文件name 字段中指定映像网址。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 构建

  1. 在项目根目录中,创建一个名为 cloudbuild.yaml 的配置文件。

  2. 安装依赖项:在构建应用之前,您必须确保从 npm 安装项目的所有依赖项。您可以使用 npm 构建步骤中的 install 命令安装依赖项。构建步骤的 args 字段采用参数列表,并将其传递给 name 字段引用的映像。在构建配置文件中,将 install 添加到 args 字段以调用 install 命令:

     steps:
     - name: 'node'
       entrypoint: 'npm'
       args: ['install']
    
  3. 添加测试:如果您已经在 package.json 中定义了 test 脚本,则可以将 test 添加到 args 字段,从而将 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 配置文件中的 npmPackages 字段将独立 npm 软件包上传到 Artifact Registry 时,Cloud Build 会为这些软件工件 (SLSA) 生成供应链级别 (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. 可选:为区域 build 启用出处

    如果您使用的是区域级 build,请在 build 配置文件的 options 中添加 requestedVerifyOption 字段。将值设置为 VERIFIED 以启用出处元数据生成功能。如果您不添加 requestedVerifyOption: VERIFIED,Cloud Build 仅会为全局构建生成出处。

    options:
      requestedVerifyOption: VERIFIED
    
  7. 启动构建手动使用构建触发器

    构建完成后,您可以在 Artifact Registry 中查看代码库详情

    您还可以查看 build 出处元数据验证出处,以帮助保护您的软件供应链。

在多个 node 版本上运行测试

有时,您需要确保项目可以在多个版本的 node 中运行。您可以创建和配置 Cloud Build 触发器,以便:

  • 在构建配置文件中,将 node 版本指定为替代变量
  • 对于要为其构建应用的每个 node 版本创建一个触发器。
  • 在每个触发器的设置中,使用替代变量值字段指示该触发器对应的 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 版本上构建代码。

后续步骤