构建和测试 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

    在配置文件中,添加 npmPackages 字段,并在工件注册库中指定 npm 代码库:

     artifacts:
        npmPackages:
        - repository: 'https://LOCATION-npm.pkg.dev/PROJECT-ID/REPOSITORY_NAME'
          packagePath: 'PACKAGE_PATH'
    

    替换以下值:

    • LOCATION:您的代码库在 Artifact Registry 中的位置
    • PROJECT_ID:包含 Artifact Registry 制品库的项目的 ID。 Google Cloud
    • REPOSITORY_NAME:Artifact Registry 中的 npm 代码库的名称。
    • PACKAGE_PATH:包含要上传到 Artifact Registry 的 npm 软件包的本地目录的路径。我们建议使用绝对路径。您的 PACKAGE_PATH 值可以为 .,以使用当前工作目录,但该字段不能省略或留空。此目录必须包含 package.json 文件。
  6. 可选:启用来源生成功能

    Cloud Build 可以生成可验证的软件工件的供应链级别 (SLSA) 构建来源元数据,以帮助保护您的持续集成流水线。

    如需启用来源生成,请将 requestedVerifyOption: VERIFIED 添加到配置文件中的 options 部分。

  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 版本上构建代码。

后续步骤