借助 Cloud Workstations,您可以为工作站创建和使用自定义映像。自定义映像投入使用后,自动重新构建自定义映像非常有用,这样可以提取基础映像中提供的修复程序和更新。
在本教程中,您将了解如何构建自动化流水线,以帮助确保您在自定义工作站映像中添加安全更新和补丁。
目标
按照本教程中的步骤,您可以为基础映像构建自动化流水线:
- 创建一个 Artifact Registry 制品库以存储和扫描您的自定义映像。
- 将 GitHub 与 Google Cloud 配置为存储映像配置。
- 创建 Cloud Build 触发器,以自动创建自定义映像并将其部署到 Artifact Registry。
- 配置 Cloud Scheduler 以定期启动构建。
- 查看自动化流程的结果。
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
您可使用价格计算器根据您的预计使用情况来估算费用。
完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理。
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Container Scanning API, Cloud Build, and Cloud Scheduler APIs.
- 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Container Scanning API, Cloud Build, and Cloud Scheduler APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
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 时使用您的
gcloud
CLI 凭据。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 触发器,用于运行 labs/cloudbuild-scheduled-jobs/code-oss-java 文件夹中 cloudbuild.yaml
文件中的说明。
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 项目,请执行以下操作:
控制台
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
gcloud
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
后续步骤
- 查看可用的预配置基础映像列表。
- 自定义容器映像。
- 查看可用机器类型。
- 设置安全性最佳实践。
- 探索有关 Google Cloud 的参考架构、图表和最佳做法。查看我们的 Cloud 架构中心。