借助 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.
-
启用 Artifact Registry、Container Scanning API、Cloud Build 和 Cloud Scheduler API。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
启用 Artifact Registry、Container Scanning API、Cloud Build 和 Cloud Scheduler API。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
准备环境
在继续操作之前,请确保已设置以下环境变量。
为您计划使用的 Cloud 项目设置项目 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 配置为使用您的
gcloud
CLI 凭据访问 Artifact Registry。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 用户名作为 Owner。代码库名称显示为
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)")
此示例进行了以下配置:
gcloud
CLI 命令会在 Cloud Build 中创建一个名为custom-image-trigger
的手动触发器,如第二行的name
标志所示。- 接下来三行包含与 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 Architecture Center。