本页介绍了如何使用 Cloud Build 构建和测试 Node.js
应用,将构建的工件存储在 Artifact Registry 中的 npm 代码库中,以及生成构建来源信息。
通过 Cloud Build,您可以使用任何公开可用的容器映像来执行任务。Docker Hub 中的公共 node
映像预装有 npm
工具。您可以对 Cloud Build 进行配置,以使用此工具构建您的 Node.js
项目。
准备工作
本页面的说明假定您熟悉 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
字段中指定映像网址。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
脚本,则可以将test
添加到args
字段,从而将 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
字段,并在工件注册库中指定 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
文件。
可选:启用来源生成功能
Cloud Build 可以生成可验证的软件工件的供应链级别 (SLSA) 构建来源元数据,以帮助保护您的持续集成流水线。
如需启用来源生成,请将
requestedVerifyOption: VERIFIED
添加到配置文件中的options
部分。-
构建完成后,您可以在 Artifact Registry 中查看代码库详情。
您还可以查看 build 来源元数据和验证来源。
在多个 node
版本上运行测试
有时,您需要确保项目可以在多个版本的 node
中运行。您可以创建和配置 Cloud Build 触发器,以便:
- 在构建配置文件中,将
node
版本指定为替代变量。 - 对于要为其构建应用的每个
node
版本创建一个触发器。 - 在每个触发器的设置中,使用替代变量值字段指示该触发器对应的
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
版本上构建代码。