本页介绍了如何配置 Cloud Build 以构建和测试 Python 应用、将工件上传到 Artifact Registry、生成来源信息,以及将测试日志保存在 Cloud Storage 中。
通过 Cloud Build,您可以使用任何公开可用的容器映像来执行任务。Docker Hub 中的公共 python
映像预装有 python
和 pip
工具。您可以使用这些工具配置 Cloud Build,以便使用这些工具安装依赖项、构建和运行单元测试。
准备工作
本页面的说明假定您熟悉 Python。此外:
-
Enable the Cloud Build, Artifact Registry, and Cloud Storage APIs.
- 如需运行此页面中的
gcloud
命令,请安装 Google Cloud CLI。 - 准备好您的 Python 项目。
- 在 Artifact Registry 中拥有一个 Python 代码库。如果您还没有代码库,请创建一个新代码库。
- 如果您要在 Cloud Storage 中存储测试日志,请在 Cloud Storage 中创建存储分区。
必需的 IAM 权限
如需在 Logging 中存储测试日志,请向您的 build 服务账号授予 Cloud Storage 存储分区的 Storage Object Creator (
roles/storage.objectCreator
) 角色。如需将构建的映像存储在 Artifact Registry 中,请向您的 build 服务账号授予 Artifact Registry Writer (
roles/artifactregistry.writer
) 角色。
如需了解如何授予这些角色,请参阅使用 IAM 页面授予角色。
配置 Python 构建
本部分逐步演示了 Python 应用的构建配置文件示例。该部分包含管理安装要求、添加单元测试,以及测试通过后构建和部署应用的构建步骤。
在项目根目录中,创建名为
cloudbuild.yaml
的 Cloud Build 配置文件。安装要求:Docker Hub 中的
python
映像预安装了pip
。如需从pip
安装依赖项,请使用以下字段添加构建步骤:name
:将此字段的值设置为python
或python:<tag>
以将 Docker Hub 中的 Python 映像用于此任务。如需查看其他 Python 映像的可用标记列表,请参阅 Python 映像的 Docker Hub 参考文档。entrypoint
:设置此字段会替换name
中引用的映像的默认入口点。将此字段的默认值设置为pip
以调用pip
作为构建步骤的入口点并运行pip
命令。args
:构建步骤的args
字段采用一系列参数,并将其传递给name
字段引用的映像。在该字段中传递相应参数以运行pip install
命令。pip install
命令中的--user
标志可确保后续构建步骤可以访问此构建步骤中安装的模块。
以下构建步骤会添加参数来安装要求:
steps: - name: 'python' entrypoint: 'python' args: ['-m', 'pip', 'install', '--upgrade', 'pip'] - name: python entrypoint: python args: ['-m', 'pip', 'install', 'build', 'pytest', 'Flask', '--user']
添加单元测试:如果您已使用测试框架(如
pytest
)在应用中定义了单元测试,则可以配置 Cloud Build,以便通过在构建步骤中添加以下字段来运行测试:name
:将此字段的值设置为python
以将 Docker Hub 中的 Python 映像用于您的任务。entrypoint
:将此字段的值设置为python
以运行python
命令。args
:添加相应参数以运行python pytest
命令。
以下构建步骤会将
pytest
日志输出保存到 JUNIT XML 文件。此文件的名称是使用$SHORT_SHA
(与构建关联的提交 ID 的短版本)构建的。后续构建步骤会将此文件中的日志保存到 Cloud Storage。- name: 'python' entrypoint: 'python' args: ['-m', 'pytest', '--junitxml=${SHORT_SHA}_test_log.xml']
构建:在构建配置文件中,定义用于构建应用的构建器和
args
:name
:将此字段的值设置为python
以将 Docker Hub 中的 Python 映像用于您的任务。entrypoint
:将此字段的值设置为python
以运行python
命令。args
:添加相应参数以执行 build。
以下构建步骤会启动构建:
- name: 'python' entrypoint: 'python' args: ['-m', 'build']
上传到 Artifact Registry:
在配置文件中,添加
pythonPackages
字段,并在 Artifact Registry 中指定您的 Python 代码库:artifacts: pythonPackages: - repository: 'https://LOCATION-python.pkg.dev/PROJECT-ID/REPOSITORY' paths: ['dist/*']
替换以下值:
- PROJECT-ID 是包含 Artifact Registry 制品库的项目的 ID。 Google Cloud
- REPOSITORY 是代码库的 ID。
- LOCATION 是代码库的单区域或多区域位置。
可选:启用来源生成功能
Cloud Build 可以生成可验证的软件工件的供应链级别 (SLSA) 构建来源元数据,以帮助保护您的持续集成流水线。
如需启用来源生成,请将
requestedVerifyOption: VERIFIED
添加到配置文件中的options
部分。将测试日志保存到 Cloud Storage:您可以配置 Cloud Build,以便通过指定现有存储分区位置和测试日志的路径在 Cloud Storage 中存储所有测试日志。以下构建步骤会将保存在 JUNIT XML 文件中的测试日志存储到 Cloud Storage 存储分区:
artifacts: objects: location: 'gs://${_BUCKET_NAME}/' paths: - '${SHORT_SHA}_test_log.xml'
-
构建完成后,您可以在 Artifact Registry 中查看代码库详情。
您还可以查看 build 来源元数据和验证来源。
后续步骤
- 了解如何查看构建结果。
- 了解如何保护 build。
- 了解如何构建和容器化 Python 应用。
- 了解如何使用专用依赖项。
- 了解如何在 Compute Engine 上执行蓝绿部署。
- 了解如何排查构建错误。