本页面介绍如何使用 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:
使用 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
文件。
可选:为区域 build 启用出处
如果您使用的是区域级 build,请在 build 配置文件的
options
中添加requestedVerifyOption
字段。将值设置为VERIFIED
以启用出处元数据生成功能。如果您不添加requestedVerifyOption: VERIFIED
,Cloud Build 仅会为全局构建生成出处。options: requestedVerifyOption: VERIFIED
-
构建完成后,您可以在 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
版本上构建代码。