
准备工作
- 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
- 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
- 在屏幕左上角,点击开始实验即可开始
Create a Kubernetes cluster
/ 20
Configure and Install Jenkins
/ 20
Create the production and canary deployments
/ 30
Build for the 'new-feature' branch
/ 10
Deploying a canary release
/ 10
Deploying to production
/ 10
在本实验中,您将学习如何在 Kubernetes Engine 上使用 Jenkins
设置持续交付流水线。对于经常将代码集成到共享仓库的开发者而言,Jenkins 是首选的自动化服务器。您在本实验中构建的解决方案与下图类似:
请前往 Cloud 架构中心,参阅 Kubernetes Engine 上的 Jenkins,详细了解如何在 Kubernetes 上运行 Jenkins。
在本实验中,您将完成以下任务,了解如何在 Kubernetes 上运行 Jenkins:
本实验是高级实验。在开始之前,您至少应熟悉 shell 编程、Kubernetes 和 Jenkins 的基础知识。以下实验可帮助您快速上手:
准备就绪后,向下滚动以详细了解 Kubernetes、Jenkins 和持续交付。
Kubernetes Engine 是 Google Cloud 的 Kubernetes
托管式版本,这个集群管理和编排系统专为容器打造,功能十分强大。Kubernetes 是一个开源项目,可在众多不同环境中运行,包括笔记本电脑、高可用性多节点集群、虚拟机和裸金属。如前所述,Kubernetes 应用基于容器
构建,这些容器是轻量级应用,其中包含运行所需的所有依赖项和库。正是因为采用这种底层结构,Kubernetes 应用具有高可用性、安全可靠,并且可以快速部署,是云开发者的理想框架。
Jenkins 是一种开源自动化服务器,可让您灵活地编排构建、测试和部署流水线。借助 Jenkins,开发者可以快速迭代项目,而无需担心持续交付可能带来的开销问题。
如果您需要设置持续交付 (CD) 流水线,相对于基于虚拟机的标准部署,在 Kubernetes Engine 上部署 Jenkins 更有优势。
如果构建流程使用容器,一个虚拟主机可以在多个操作系统上运行作业。Kubernetes Engine 提供 ephemeral build executors
,这些执行程序仅在构建实际运行时会得到使用,这样就能释放资源以用于其他集群任务(例如批处理作业)。使用临时构建执行程序的另一个好处是速度快,只需几秒钟就能启动。
Kubernetes Engine 还预配备了 Google 的全球负载均衡器,可让您将网络流量自动路由到实例。负载均衡器会处理 SSL 终止,并使用基于 Google 骨干网配置的全球 IP 地址,再加上您的 Web 前端,此负载均衡器总能让用户通过最快路径访问应用实例。
现在,您已经简单了解了 Kubernetes、Jenkins 以及这两者在 CD 流水线中如何交互,接下来可以开始构建了。
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:
点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。
该实验会启动资源并打开另一个标签页,显示“登录”页面。
提示:将这些标签页安排在不同的窗口中,并排显示。
如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。
您也可以在“实验详细信息”窗格中找到“用户名”。
点击下一步。
复制下面的密码,然后将其粘贴到欢迎对话框中。
您也可以在“实验详细信息”窗格中找到“密码”。
点击下一步。
继续在后续页面中点击以完成相应操作:
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。
点击 Google Cloud 控制台顶部的激活 Cloud Shell 。
在弹出的窗口中执行以下操作:
如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID
gcloud
是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。
输出:
输出:
gcloud
的完整文档,请参阅 gcloud CLI 概览指南。
在此任务中,您将下载本实验的源代码。
创建 Kubernetes 集群,并让 Jenkins 能够访问 GitHub 仓库和 Google Container Registry。
此步骤最多可能需要几分钟时间才能完成。这些额外范围让 Jenkins 能够访问 GitHub 仓库和 Google Container Registry。
点击检查我的进度可验证您已完成的任务。如果您成功创建了 Kubernetes 集群,系统会显示一个评估分数。
Helm 是一个软件包管理系统,可让您轻松配置和部署 Kubernetes 应用。安装 Jenkins 后,就可以设置 CI/CD 流水线。
在此任务中,您将使用 Helm 从图表仓库安装 Jenkins。
安装 Jenkins 时,可以将 values
文件用作模板,提供设置所需的值。
您可以使用自定义的 values
文件自动配置 Kubernetes Cloud,并添加以下必要的插件:
这样,Jenkins 就可以连接到您的集群和 Google Cloud 项目。
此命令可能需要几分钟时间才能完成。
点击检查我的进度可验证您已完成的任务。如果您成功配置了 Jenkins 图表,系统会显示一个评估分数。
Running
状态且容器处于 READY 状态:输出示例:
您应该会看到下面的输出内容:
输出示例:
您使用的是 Kubernetes 插件,这样在 Jenkins 主节点请求构建器节点时,系统会根据需要自动启动这些节点。完成工作后,这些构建器节点会自动关闭,相应资源也会重新添加到集群的资源池。
请注意,此服务会对任何与 selector
匹配的 Pod 公开端口 8080
和 50000
。这会在 Kubernetes 集群中公开 Jenkins 网页界面和构建器/代理注册端口。此外,jenkins-ui
服务是使用 ClusterIP 公开的,因此不支持从集群外部访问。
检索管理员密码并登录 Jenkins 界面。
如需进入 Jenkins 界面,请在 Cloud Shell 操作栏中依次点击网页预览 () 在端口 8080 上预览:
如果系统提示,请使用用户名 admin
和自动生成的密码登录。
现在,您已在 Kubernetes 集群中设置了 Jenkins!在接下来的部分中,Jenkins 将推动自动化 CI/CD 流水线的运作。
在此任务中,您将在持续部署流水线中部署示例应用 gceme
。该应用使用 Go 语言编写,位于仓库的 sample-app 目录中。当您在 Compute Engine 实例上运行 gceme 二进制文件时,应用会在信息卡片中显示实例的元数据。
该应用通过支持两种操作模式来模拟微服务。
将应用部署到两个不同的环境:
kubectl apply
命令创建生产部署、Canary 部署以及服务:点击检查我的进度可验证您已完成的任务。如果您成功创建了部署,系统会显示一个评估分数。
默认情况下,系统只会部署一个前端副本。使用 kubectl scale
命令确保始终至少有 4 个副本在运行。
输出示例:
将外部 IP 粘贴到浏览器中,查看显示的信息卡片,您看到的页面应该与下面类似:
通过在浏览器中打开前端外部 IP 地址,确认两个服务都正常运行。
运行以下命令,检查服务的版本输出(应显示 1.0.0):
您成功部署了示例应用!接下来,您将设置流水线,以便持续、可靠地部署更改。
在此任务中,您将按如下方式创建 Jenkins 流水线:
gceme
示例应用的副本,并将其推送到 GitHub 仓库:在 Cloud Shell 中运行以下命令,配置 Git 和 GitHub:
成功登录后,您的 GitHub 用户名会显示在 Cloud Shell 的输出中。
您可以忽略此警告,因为您无需为此仓库付费。
配置凭证以允许 Jenkins 访问代码库。Jenkins 使用集群的服务账号凭证从 GitHub 仓库下载代码。
在 Jenkins 界面中,点击左侧导航窗格中的 Manage Jenkins(管理 Jenkins),然后依次点击 Security(安全)> Credentials(凭证)。
点击 System(系统)。
点击 Global credentials (unrestricted)(全局凭证 [不受限制])。
点击右上角的 Add Credentials(添加凭证)。
从 Kind(种类)下拉菜单中选择 Google Service Account from metadata(元数据中的 Google 服务账号)。
在 ID 字段下,输入项目 ID,然后点击 Create(创建)。
全局凭证已添加。
http://cd-jenkins:8080
cd-jenkins-agent:50000
如需使用 SSH 密钥向 GitHub 私有仓库对 Jenkins 进行身份验证,请按以下步骤操作:
a. 生成 SSH 密钥
b. 将公钥添加到 GitHub
生成 SSH 密钥后,您需要将公钥添加到 GitHub,这样 Jenkins 就可以访问仓库了。
前往您的 GitHub 账号。点击您的 GitHub 个人资料,然后前往 Settings(设置)。
在侧边菜单中,选择 SSH and GPG keys(SSH 和 GPG 密钥)。
点击 New SSH key(新建 SSH 密钥)。
输入标题 SSH_KEY_LAB。
将从路径 (~/continuous-deployment-on-kubernetes/sample-app/id_github.pub) 下载的公钥 (id_github.pub) 内容粘贴到“Key”(密钥)字段中。您还可以在“Title”(标题)字段中添加一个描述性名称。
点击 Add SSH key(添加 SSH 密钥)。
c. 配置 Jenkins 以使用 SSH 密钥
前往 Jenkins,然后从主信息中心选择 Manage Jenkins(管理 Jenkins)。
选择 Credentials(凭证)选项。
在 Stores scoped to Jenkins(Jenkins 范围内的存储区)下,点击 System(系统)。
点击 Global credentials (unrestricted)(全局凭证 [不受限制])。
点击 Add Credentials(添加凭证)。
在 Kind(种类)下拉菜单中,选择 SSH Username with private key(SSH 用户名与私钥)。
在“ID”中,输入
在 Username(用户名)中,输入 [您的 GitHub 用户名]
对于私钥,选择 Enter directly(直接输入),然后点击 Add(添加)。粘贴 id_github
文件(从 ~/continuous-deployment-on-kubernetes/sample-app/id_github
下载)的内容。
点击 Create(创建)。
d. 将 SSH 公钥添加到已知主机
在 Cloud Shell 中,创建一个名为 known_hosts.github 的文件,并将 SSH 公钥添加到此文件。
e. 配置已知主机密钥
在左侧面板中,依次点击 Dashboard(信息中心)> Manage Jenkins(管理 Jenkins)。
在 Security(安全)下,点击 Security(安全)。
在 Host Key Verification Strategy(主机密钥验证策略)下的 Git Host Key Verification Configuration(Git 主机密钥验证配置)中,从下拉菜单中选择 Manually provided keys(手动提供的密钥)。
将 known hosts.github 文件内容粘贴到 Approved Host Keys(已批准主机密钥)中。
点击 Save(保存)。
前往 Jenkins 界面并按照以下步骤配置流水线作业。
在左侧面板中,依次点击 Dashboard(信息中心)> New Item(新建内容)。
将项目命名为 sample-app,然后选择 Multibranch Pipeline(多分支流水线)选项,然后点击 OK(确定)。
在下一页的 Branch Sources(分支来源)部分中,从 Add Source(添加来源)下拉菜单中选择 Git。
将 sample-app 仓库的 HTTPS 克隆网址粘贴到 Project Repository(项目仓库)字段下。将 ${GITHUB_USERNAME}
替换为您的 GitHub 用户名:
从 Credentials(凭证)菜单选项中,选择 github credentials(GitHub 凭证)名称。
在 Scan Multibranch Pipeline Triggers(扫描多分支流水线触发器)部分,选中 Periodically if not otherwise run(如果不运行则定期扫描)复选框,并将 Interval(间隔)值设置为 1 minute(1 分钟)。
将所有其他选项都保留为默认值,然后点击 Save(保存)。
完成这些步骤后,系统将运行名为 Branch indexing
的作业。此元作业会标识仓库中的分支,并确保现有分支中未发生更改。如果点击左上角的 sample-app,应该会看到 master
作业。
您成功创建了 Jenkins 流水线!接下来,您将创建开发环境,以便进行持续集成。
开发分支是供开发者使用的一组环境。开发者可在这些环境中测试代码更改,然后进行提交,最终将其集成到实际网站。这些环境是应用的精简版,但在部署时仍需要使用与实际环境相同的机制。
如需从功能分支创建开发环境,可以将该分支推送到 Git 服务器,然后让 Jenkins 部署环境。
定义该流水线的 Jenkinsfile
使用 Jenkins Pipeline Groovy 语法编写而成。使用 Jenkinsfile
可以将整个构建流水线体现在与源代码共存的单个文件中。流水线支持并行等强大功能,且需要用户手动批准。
为了使流水线按预期运行,您需要修改 Jenkinsfile
以设置项目 ID。
vi
)中打开 Jenkinsfile:将您的 PROJECT_ID
添加到 REPLACE_WITH_YOUR_PROJECT_ID
值中。PROJECT_ID
就是项目 ID,可在本实验的 CONNECTION DETAILS
部分找到。您也可以运行 gcloud config get-value project
来查找项目 ID。
将 CLUSTER_ZONE
的值更改为 gcloud config get compute/zone
来获取此值。
Jenkinsfile
文件:按 ESC 键,然后输入以下内容(适用于 vi
用户):为了演示如何更改应用,请将 gceme 卡片从蓝色更改为橙色。
html.go
:<div class="card blue">
实例更改为以下内容:html.go
文件:按 ESC 键,然后输入以下内容:main.go
:将其更新为以下内容:
在此任务中,您将部署开发环境。
这将启动开发环境的构建。
将更改推送到 Git 仓库后,前往 Jenkins 界面,您会看到 new-feature
分支的构建已启动。系统接收这些更改最长可能需要一分钟时间。
kubectl --namespace=production apply...
消息。显示这个消息时,就表示 new-feature 分支现已部署到集群。如果您在 Build Executor
中没有看到任何内容,请不必担心。只需前往 Jenkins 首页,找到示例应用,就能验证是否已创建 new-feature
流水线。
localhost
发送请求并让 kubectl
代理将其转发到您的服务,验证应用是否可以访问:您应该会看到它返回 2.0.0,这是当前正在运行的版本。
如果看到与以下内容类似的错误:
curl
命令。出现以下输出时,请继续操作:您设置了开发环境!接下来,根据您在上一单元中学习的内容,部署 Canary 版本来测试新功能。
点击检查我的进度可验证您已完成的任务。如果您成功启动了 new-feature 分支的构建,系统会显示一个评估分数。
new-feature
分支的构建
您已验证应用在开发环境中运行的是最新代码,现在可以将代码部署到 Canary 环境中了。
2.0.0
:大功告成!您部署了 Canary 版本。接下来,可以将新版本部署到生产环境。
点击检查我的进度可验证您已完成的任务。如果您成功部署了 Canary 版本,系统会显示一个评估分数。
现在,我们的 Canary 版本已成功部署,而且也没有收到任何客户投诉,接下来可以将该版本部署到生产舰队的其他部分。
在 Jenkins 中,您应该会看到主流水线已启动。
点击检查我的进度可验证您已完成的任务。如果您成功启动了主流水线,系统会显示一个评估分数。
1.0.0
的实例,请尝试再次运行上述命令。如需停止此命令,请按 CTRL+C。输出示例:
您还可以前往 gceme 应用显示信息卡片的网站。卡片颜色从蓝色变为橙色。
输出示例:
我们在下方准备了一些单选题,以加强您对本实验所涉概念的理解。请尽您所能回答。
大功告成!
非常棒!您已成功将应用部署到生产环境!
本次实操实验到此结束。您在 Kubernetes Engine 中部署并使用了 Jenkins,还创建了持续交付/持续部署流水线。通过这次机会,您体验了如何在 Kubernetes Engine 中部署重要的 DevOps 工具,并配置该工具以在生产环境中使用。您使用了 kubectl 命令行工具和 YAML 文件中的部署配置,还了解了如何为开发/部署流程设置 Jenkins 流水线。有了这次实操经验,您应该能够放心在自己的 DevOps 环境中应用这些工具。
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
本手册的最后更新时间:2025 年 6 月 10 日
本实验的最后测试时间:2025 年 6 月 10 日
版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。
此内容目前不可用
一旦可用,我们会通过电子邮件告知您
太好了!
一旦可用,我们会通过电子邮件告知您
一次一个实验
确认结束所有现有实验并开始此实验