本页面介绍了如何配置 Cloud Build 以构建、测试、容器化 部署 Python 应用
通过 Cloud Build,您可以使用任何公开可用的容器映像
来执行开发任务,包括构建、测试、容器化、上传到 Artifact Registry、部署和保存构建日志。Docker Hub 中的公共 python
映像预装有 python
和 pip
工具。您可以使用这些工具配置 Cloud Build,以便使用这些工具安装依赖项、构建和运行单元测试。
准备工作
本页面的说明假定您熟悉 Python。此外:
-
Enable the Cloud Build, Cloud Run, Cloud Storage and Artifact Registry APIs.
- 如需运行此页面中的
gcloud
命令,请安装 Google Cloud CLI。 - 准备好 Python 项目(包括
requirements.txt
文件)。您需要Dockerfile
以及您的源代码。 - 如果您要在 Artifact Registry 中存储构建的容器,请在 Artifact Registry 中创建 Docker 代码库。
- 如果您要在 Cloud Storage 中存储测试日志,请在 Cloud Storage 中创建存储分区。
必需的 IAM 权限
如需将测试日志存储在 Logging 中,请向 Logging 授予 Storage Object Creator (
roles/storage.objectCreator
) 此角色 Cloud Storage 存储桶给您的构建服务账号。如需将构建的映像存储在 Artifact Registry 中,请向 Artifact Registry Writer 授予 (
roles/artifactregistry.writer
) 角色 您的构建服务账号
如需了解如何授予这些角色,请参阅使用 IAM 页面授予角色。
配置 Python 构建
本部分逐步演示了 Python 应用的构建配置文件示例。该部分包含安装要求、添加单元测试,以及测试通过后构建和部署应用的构建步骤。
在项目根目录中,创建名为
cloudbuild.yaml
的 Cloud Build 配置文件。安装要求:Docker Hub 中的
python
映像预安装了pip
。如需从pip
安装依赖项,请使用以下字段添加构建步骤:name
:将此字段的值设置为python
以将 Docker Hub 中的 Python 映像用于此任务。entrypoint
:设置此字段会替换name
中引用的映像的默认入口点。将此字段的默认值设置为pip
以调用pip
作为构建步骤的入口点并运行pip
命令。args
:构建步骤的args
字段采用一系列参数,并将其传递给name
字段引用的映像。在该字段中传递相应参数以运行pip install
命令。pip install
命令中的--user
标志可确保后续构建步骤可以访问此构建步骤中安装的模块。
以下构建步骤会添加参数来通过
requirements.txt
文件安装要求:添加单元测试:如果您已使用测试框架(如
pytest
)在应用中定义了单元测试,则可以配置 Cloud Build,以便通过在构建步骤中添加以下字段来运行测试:name
:将此字段的值设置为python
以将 Docker Hub 中的 Python 映像用于您的任务。entrypoint
:将此字段的值设置为python
以运行python
命令。args
:添加相应参数以运行python pytest
命令。
以下构建步骤会将
pytest
日志输出保存到 JUNIT XML 文件。此文件的名称是使用与构建关联的提交 ID 的短版本构建的。后续构建步骤会将此文件中的日志保存到 Cloud Storage。将应用容器化:添加构建步骤以确保测试通过后,您可以构建应用。Cloud Build 提供预构建的 Docker 映像,可用于将 Python 应用容器化。如需将您的应用容器化,请在构建步骤中添加以下字段:
name
:将此字段的值设置为gcr.io/cloud-builders/docker
即可使用 为您的任务预构建的 Docker 映像。args
:为docker build
命令添加参数作为此字段的值。
以下构建步骤会构建映像
myimage
,并使用提交 ID 的短版本来标记该映像。该构建步骤使用默认替代变量作为项目 ID、代码库名称和短 SHA 值,因此这些值会在构建时自动替换。将容器推送到 Artifact Registry:您可以将构建的容器存储在 Artifact Registry 中,这是一种 Google Cloud 服务,可用于存储、管理和保护构建工件。为此,您需要在 Artifact Registry 中已有 Docker 代码库。如需配置 Cloud Build 以将映像存储在 Artifact Registry Docker 代码库中,请添加具有以下字段的构建步骤:
name
:将此字段的值设置为gcr.io/cloud-builders/docker
以使用 Container Registry 中的官方docker
构建器映像来执行任务。args
:为docker push
命令添加参数作为此字段的值。对于目标网址,输入要在其中存储映像的 Artifact Registry Docker 代码库。
以下构建步骤会将您在上一步中构建的映像推送到 Artifact Registry:
可选:如果您希望 Cloud Build 生成 软件制品 (SLSA) 的供应链级别 build 出处信息,请填写以下字段:
- 在构建步骤中使用
images
字段,而不是使用单独的Docker push
构建步骤。 - 添加
requestedVerifyOption: VERIFIED
添加到构建配置文件的options
部分。
将容器部署到 Cloud Run:如需在 Cloud Run 上部署映像,请添加包含以下字段的构建步骤:
name
:将此字段的值设置为google/cloud-sdk
以使用 gcloud CLI 映像,以调用gcloud
命令以在 Cloud Run 上部署映像。args
:为gcloud run deploy
命令添加参数作为此字段的值。
以下构建步骤会将之前构建的映像部署到 Cloud Run:
将测试日志保存到 Cloud Storage:您可以配置 Cloud Build,以便通过指定现有存储分区位置和测试日志的路径在 Cloud Storage 中存储所有测试日志。以下构建步骤会将保存在 JUNIT XML 文件中的测试日志存储到 Cloud Storage 存储分区:
以下代码段展示了针对上述所有步骤的完整构建配置文件:
-
构建完成后,您可以在 Artifact Registry 中查看代码库详情。
您还可以查看 build 出处元数据和验证出处。
后续步骤
- 了解如何查看构建结果。
- 了解如何保护 build。
- 了解如何构建独立的 Python 应用。
- 了解如何使用专用依赖项。
- 了解如何排查构建错误。