构建和测试 Node.js 应用

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

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

准备工作

本页面的说明假定您熟悉 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 字段中指定映像网址。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 字段指定使用 npm 工具 在调用 node 映像时触发。

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

    Cloud Build 可以生成 软件制品 (SLSA) 的供应链级别 build 出处元数据,以帮助保护持续集成流水线。

    要启用出处生成功能,请将 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 版本上构建代码, 。

后续步骤