借助 Cloud Workstations,您可以为工作站创建和使用自定义 映像。 使用自定义映像后,最好自动重建自定义映像,以便提取基础映像中提供的修复程序和更新。
在本教程中,您将学习如何构建自动化流水线,以帮助确保在自定义工作站映像中包含安全更新和补丁。
目标
按照本教程中的步骤,您可以为基础映像构建自动化流水线:
- 创建 Artifact Registry 制品库,以存储和扫描自定义映像。
- 使用 Google Cloud 配置 GitHub,以存储映像配置。
- 创建 Cloud Build 构建触发器,以自动创建自定义映像并将其部署到 Artifact Registry。
- 配置 Cloud Scheduler,以定期启动构建。
- 查看自动化流程的结果。
费用
在本文档中,您将使用的以下收费组件: Google Cloud
您可使用 价格计算器 根据您的预计使用情况来估算费用。
完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理。
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud的新用户, 请创建账号,以评估我们的产品在 实际场景中的表现。新客户还可获享 $300 赠金,用于 运行、测试和部署工作负载。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Artifact Registry, Container Scanning API, Cloud Build, and Cloud Scheduler APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先 使用联合身份登录
gcloudCLI。 -
如需初始化
gcloudCLI,请运行以下命令:gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Artifact Registry, Container Scanning API, Cloud Build, and Cloud Scheduler APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先 使用联合身份登录
gcloudCLI。 -
如需初始化
gcloudCLI,请运行以下命令:gcloud init
准备环境
在继续之前,请确保您已设置以下环境变量。
为您计划使用的云项目设置项目 ID:
PROJECT_ID=$PROJECT_ID设置您计划在其中存储代码库的 GitHub 用户名:
GITHUB_USER=$GITHUB_ID设置
PROJECT_NUMBER和REGION变量,以便在整个过程中使用:PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \ --format='value(projectNumber)') REGION=$REGION在前面的示例中,将 $REGION 替换为您计划使用的区域名称,例如
us-central1。如需详细了解可用区域,请参阅 Cloud Workstations 位置。
创建 Artifact Registry 制品库
在本教程中,您将使用 Artifact Registry 来存储和扫描映像。
使用以下命令创建制品库:
gcloud artifacts repositories create custom-images \ --repository-format=docker \ --location=$REGION \ --description="Docker repository"将 $REGION 替换为您计划 使用的区域名称。
将 Docker 配置为在访问 Artifact Registry 时使用您的
gcloudCLI 凭据。gcloud auth configure-docker $REGION-docker.pkg.dev如需关闭 Artifact Analysis,请运行以下命令:
gcloud services disable containerscanning.googleapis.com
配置 GitHub 代码库
在实践中,您会将自定义映像的 Dockerfile 保存在 Git 代码库中。自动化流程会在构建流程中访问该代码库,以拉取相关配置和 Dockerfile。
克隆示例代码库
如需克隆提供容器定义的示例代码库,请按以下步骤操作:
- 点击此链接,以
创建新分支。
software-delivery-workshop代码库。 - 如果系统提示,请登录 GitHub。
- 选择您的 GitHub 用户名作为所有者。代码库名称显示为
software-delivery-workshop。 - 点击创建分支 ,等待几秒钟,让该过程完成。
将 Cloud Build 连接到 GitHub
接下来,使用内置的 GitHub 连接功能将该代码库连接到 Cloud Build。点击 GitHub 代码库的链接,然后按照说明完成该过程。您无需在向导的最后一步中创建触发器,并且可以跳过最后几步,因为您可以稍后从命令行执行此操作。
如果您使用其他 Git 代码库解决方案,也可以按照 说明将 Cloud Build 连接到 GitLab 或 Bitbucket。
创建 Cloud Build 构建触发器
示例代码库包含用于构建容器映像的容器定义和 Cloud Build 配置。在此步骤中,您将创建一个
Cloud Build 构建触发器,该触发器会运行
cloudbuild.yaml文件中的说明,您可以在
labs/cloudbuild-scheduled-jobs/code-oss-java
文件夹中找到该文件。
gcloud builds triggers create manual \
--name=custom-image-trigger \
--repo=$GITHUB_USER/software-delivery-workshop \
--repo-type=GITHUB \
--branch=main \
--build-config=labs/cloudbuild-scheduled-jobs/code-oss-java/cloudbuild.yaml \
--substitutions=_REGION=$REGION,_AR_REPO_NAME=custom-images,_AR_IMAGE_NAME=code-oss-java,_IMAGE_DIR=labs/cloudbuild-scheduled-jobs/code-oss-java
TRIGGER_ID=$(gcloud builds triggers list \
--filter=name="custom-image-trigger" --format="value(id)")
此示例配置了以下内容:
- The
gcloudCLI command creates a 手动触发器 within Cloud Build namedcustom-image-triggeras indicated by thenameflag on the second line. - 接下来的三行包含与源 GitHub 代码库相关的标志:
- 代码库的路径
- 代码库的类型
- 要构建的 Git 分支
build-config标志表示 Git 代码库中 Cloud Build 文件的路径。如需使作业动态化,请使用
substitutions标志。对于此作业,该命令会传入以下变量:- 区域,
$_REGION - Artifact Registry 制品库名称,
$_AR_REPO_NAME - 容器映像名称,
$_AR_IMAGE_NAME - 要构建的 Dockerfile 的位置,
$_IMAGE_DIR
查看 cloudbuild.yaml 文件,了解如何在流程中使用这些变量。
- 区域,
创建触发器后,系统会检索触发器的唯一名称,并将其存储在
$TRIGGER_ID环境变量中以供日后使用。
配置 Cloud Scheduler
为了帮助确保您的映像包含最新的更新和补丁,请使用 Cloud Scheduler 以设定的频率执行 Cloud Build 触发器。对于本教程,作业每天运行一次。在实践中,请将此频率设置为与您的组织需求一致,以帮助确保始终包含最新的更新。
向默认服务帐号授予调用 Cloud Build 触发器所需的角色:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/cloudbuild.builds.editor"向 Cloud Build 服务帐号授予将映像上传到 Artifact Registry 所需的角色:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \ --role="roles/artifactregistry.admin"使用以下命令创建 Cloud Scheduler 作业:
gcloud scheduler jobs create http run-build \ --schedule='0 1 * * *' \ --uri=https://cloudbuild.googleapis.com/v1/projects/$PROJECT_ID/locations/global/triggers/$TRIGGER_ID:run \ --location=us-central1 \ --oauth-service-account-email=$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --oauth-token-scope=https://www.googleapis.com/auth/cloud-platform该作业设置为每天执行一次;不过,如需立即测试该功能,请从 Cloud Scheduler 手动运行该作业:
- 在 Cloud Scheduler 页面上,找到您刚刚创建的名为 run-build 的条目。
- 在“操作”列中,点击该行对应的 more_vert更多 选项菜单。
- 点击强制运行作业 以手动测试系统。
命令成功执行后,切换到 Cloud Build 历史记录页面以查看进度:
查看结果
由于您在设置过程中启用了 Container Scanning API,因此 Artifact Registry 会自动扫描映像是否存在安全漏洞。
如需查看漏洞,请执行以下操作:
打开 Artifact Registry 制品库页面:
在制品库列表中,点击一个制品库。
点击映像名称。每个映像摘要的漏洞总数会显示在漏洞 列中。

如需查看映像的漏洞列表,请点击漏洞 列中的链接。漏洞列表会显示 严重级别、 可修复情况以及包含此 漏洞的软件包的名称。

清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
为避免因本页面中使用的资源导致您的 Google Cloud 账号产生费用,请务必记得删除不再需要的资源。
如需从 Google Cloud 控制台或
gcloud CLI 中删除 Google Cloud 项目,请执行以下操作:
控制台
- 在 Google Cloud 控制台中,前往 管理资源 页面。
- 在项目列表中,选择要删除的项目,然后点击删除。
- 在对话框中输入项目 ID,然后点击 关闭以删除项目。
gcloud
删除项目: Google Cloud
gcloud projects delete PROJECT_ID
后续步骤
- 查看可用预配置基础映像的列表。
- 自定义容器映像。
- 查看可用机器类型。
- 设置安全性最佳实践。
- 探索有关 Google Cloud 的参考架构、图表和最佳实践。 查看我们的 Cloud 架构中心。