arrow_back

构建 DevOps 流水线

登录 加入
访问 700 多个实验和课程

构建 DevOps 流水线

实验 2 个小时 universal_currency_alt 5 个积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
访问 700 多个实验和课程

概览

在本实验中,您将使用 GitHub、Cloud Build、构建触发器和 Artifact Registry 构建一条持续集成流水线。

持续集成流水线架构

目标

在本实验中,您将学习如何执行以下任务:

  • 在 GitHub 上创建 Git 代码库
  • 创建简单的 Python 应用
  • 在 Cloud Shell 中测试 Web 应用
  • 定义 Docker 构建
  • 使用 Cloud Build 和 Artifact Registry 管理 Docker 映像
  • 使用触发器自动执行构建
  • 测试构建更改

前提条件

如果您还没有 GitHub 账号,则需要创建 GitHub 账号

建议

  1. 使用已有的 GitHub 账号(如果有)。GitHub 更容易将新账号视为垃圾账号加以屏蔽。
  2. 在 GitHub 账号中配置双重身份验证,以降低账号被标记为垃圾账号的几率。 R

设置实验环境

对于每个实验,您都会免费获得一个新的 Google Cloud 项目及一组资源,它们都有固定的使用时限。

  1. 请使用无痕式窗口登录 Qwiklabs。

  2. 留意实验的访问时限(例如 1:15:00)并确保能在相应时间段内完成实验。
    系统不提供暂停功能。如有需要,您可以重新开始实验,不过必须从头开始。

  3. 准备就绪时,点击开始实验

  4. 请记好您的实验凭据(用户名密码)。您需要使用这组凭据来登录 Google Cloud 控制台。

  5. 点击打开 Google 控制台

  6. 点击使用其他帐号,然后将实验的凭据复制并粘贴到相应提示框中。
    如果您使用其他凭据,将会收到错误消息或产生费用

  7. 接受条款并跳过恢复资源页面。

任务 1:创建 Git 代码库

首先,您将使用 GitHub 创建一个 Git 代码库。此 Git 代码库将用于存储您的源代码。最终,您将创建一个构建触发器,在代码推送到代码库时启动持续集成流水线。

  1. 点击 Cloud 控制台,然后在新标签页中点击激活 Cloud Shell (Cloud Shell 图标)。
  2. 如果出现提示,点击继续
  3. 运行以下命令以安装 GitHub CLI
curl -sS https://webi.sh/gh | sh
  1. 登录 GitHub CLI
gh auth login

Enter 键接受默认选项。阅读 CLI 工具中的说明,通过 GitHub 网站登录。

  1. 确认您已登录:
gh api user -q ".login"

如果您已成功登录,此命令应会输出您的 GitHub 用户名。

  1. 创建 GITHUB_USERNAME 变量
GITHUB_USERNAME=$(gh api user -q ".login")
  1. 确认您已创建环境变量:
echo ${GITHUB_USERNAME}

如果您已成功创建该变量,此命令应会输出您的 GitHub 用户名。

  1. 设置全局 git 凭证:
git config --global user.name "${GITHUB_USERNAME}" git config --global user.email "${USER_EMAIL}"

此命令会为您的 Cloud Shell 终端创建一个 git 用户。

  1. 创建一个名为 devops-repo 的空 GitHub 代码库:
gh repo create devops-repo --private
  1. 在 Cloud Shell 中输入以下命令,创建一个名为 gcp-course 的文件夹:
mkdir gcp-course
  1. 切换到您刚刚创建的文件夹:
cd gcp-course
  1. 现在,克隆您刚刚创建的空代码库。如果出现提示,请点击授权
gh repo clone devops-repo 注意:您可能会看到一条警告,提示您克隆了一个空代码库。此时,这属于正常情况。
  1. 上一条命令创建了一个名为 devops-repo 的空文件夹。切换到该文件夹:
cd devops-repo

任务 2. 创建简单的 Python 应用

您需要一些源代码,以对其进行管理。因此,您将创建一个简单的 Python Flask Web 应用。该应用仅比“Hello World”稍微复杂一点,但足以测试您将构建的流水线。

  1. 在 Cloud Shell 中,点击打开编辑器 (“编辑器”图标) 以打开代码编辑器。
  2. 在左侧的探索器树中选择 gcp-course > devops-repo 文件夹。
  3. 点击 devops-repo
  4. 点击新建文件
  5. 将该文件命名为 main.py,然后按 Enter 键。
  6. 将以下代码粘贴到您刚刚创建的文件中:
from flask import Flask, render_template, request app = Flask(__name__) @app.route("/") def main(): model = {"title": "Hello DevOps Fans."} return render_template('index.html', model=model) if __name__ == "__main__": app.run(host='0.0.0.0', port=8080, debug=True, threaded=True)
  1. 如需保存更改,按 CTRL + S
  2. 点击 devops-repo 文件夹。
  3. 点击新建文件夹
  4. 将该文件夹命名为 templates,然后按 Enter 键。
  5. 右键点击 templates 文件夹,然后创建一个名为 layout.html 的新文件。
  6. 添加以下代码并像之前一样保存文件:
<!doctype html> <html lang="en"> <head> <title>{{model.title}}</title> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"> </head> <body> <div class="container"> {% block content %}{% endblock %} <footer></footer> </div> </body> </html>
  1. 同样在 templates 文件夹中,添加另一个名为 index.html 的新文件。

  2. 添加以下代码并像之前一样保存文件:

{% extends "layout.html" %} {% block content %} <div class="jumbotron"> <div class="container"> <h1>{{model.title}}</h1> </div> </div> {% endblock %}
  1. 在 Python 中,应用正常运行需满足的前提条件是使用 pip 管理的。现在,您将添加一个文件,其中列出了此应用的相关要求。

  2. devops-repo 文件夹(不是 templates 文件夹)中,创建一个新文件,然后将以下内容添加到该文件并将其保存为 requirements.txt

Flask>=2.0.3
  1. 您现在有了一些文件,让我们将它们保存到代码库中。首先,您需要将创建的所有文件添加到本地 Git 代码库中。点击打开终端,然后在 Cloud Shell 中输入以下代码:
cd ~/gcp-course/devops-repo git add --all
  1. 如需将更改提交到代码库,您必须表明自己的身份。请输入以下命令,但使用您自己的信息(您可以使用自己的 Gmail 地址或任何其他电子邮件地址):
git config --global user.email "you@example.com" git config --global user.name "Your Name"
  1. 现在,在本地提交更改:
git commit -a -m "Initial Commit"
  1. 您在本地提交了更改,但尚未更新您在 Cloud Source Repositories 中创建的 Git 代码库。请输入以下命令,将您的更改推送到云端:
git push origin main
  1. 刷新 GitHub 网页。您应该会看到刚刚创建的文件。

任务 3:定义 Docker 构建

使用 Docker 的第一步是创建一个名为 Dockerfile 的文件。该文件定义了 Docker 容器的构建方式。您现在将创建该文件。

  1. 点击打开编辑器,然后展开 gcp-course/devops-repo 文件夹。选择 devops-repo 文件夹后,点击新建文件,然后将新文件命名为 Dockerfile

Dockerfile 文件用于定义容器的构建方式。

  1. 在文件顶部,输入以下内容:
FROM python:3.9

这是基础映像。您可以选择多个基础映像。在此示例中,您使用的是已经安装了 Python 的基础映像。

  1. 输入以下内容:
WORKDIR /app COPY . .

这些代码行将源代码从当前文件夹复制到容器映像的 /app 文件夹中。

  1. 输入以下内容:
RUN pip install gunicorn RUN pip install -r requirements.txt

此命令使用 pip 将 Python 应用的要求安装到容器中。Gunicorn 是一个 Python 网络服务器,将用于运行 Web 应用。

  1. 输入以下内容:
ENV PORT=80 CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 main:app

环境变量设置将用于运行应用的端口(在本例中为 80)。最后一行代码使用 gunicorn Web 服务器来运行 Web 应用。

  1. 核实已完成的文件内容如下,并保存该文件:
FROM python:3.9 WORKDIR /app COPY . . RUN pip install gunicorn RUN pip install -r requirements.txt ENV PORT=80 CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 main:app

任务 4. 使用 Cloud Build 和 Artifact Registry 管理 Docker 映像

Docker 映像需要构建,并存储在某个地方。您将用到 Cloud BuildArtifact Registry

  1. 点击打开终端以返回 Cloud Shell。确保您位于正确的文件夹:
cd ~/gcp-course/devops-repo
  1. Cloud Shell 环境变量 DEVSHELL_PROJECT_ID 会自动存储您当前的项目 ID。要在 Artifact Registry 中存储映像,项目 ID 是必需的。请输入以下命令,查看您的项目 ID:
echo $DEVSHELL_PROJECT_ID
  1. 输入以下命令,创建一个名为“devops-repo”的 Artifact Registry 制品库:
gcloud artifacts repositories create devops-repo \ --repository-format=docker \ --location={{{ project_0.default_region | "REGION" }}}
  1. 输入以下命令,配置 Docker 以向 Artifact Registry Docker 制品库进行身份验证:
gcloud auth configure-docker {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev
  1. 输入以下命令,使用 Cloud Build 创建映像并将其存储在 Artifact Registry 中:
gcloud builds submit --tag {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/$DEVSHELL_PROJECT_ID/devops-repo/devops-image:v0.1。

请注意命令中的环境变量。映像将存储在 Artifact Registry 中。

  1. 在 Google Cloud 控制台标题栏的搜索字段中输入 Artifact Registry,然后点击搜索结果中的 Artifact Registry

  2. 点击 Artifact Registry 旁边的固定图标。

  3. 点击 devops-repo

  4. 点击 devops-image。系统应该会列出您的映像。

  5. 在 Google Cloud 控制台标题栏的搜索字段中输入 Cloud Build,然后点击搜索结果中的 Cloud Build

  6. 点击 Cloud Build 旁边的固定图标。

  7. 您的构建应该会列在历史记录中。

您现在将尝试从 Compute Engine 虚拟机运行此映像。

  1. 导航菜单中,点击 Compute Engine > 虚拟机实例

  2. 点击创建实例以创建虚拟机。

  3. 创建实例页面上,指定以下内容,并将其余设置保留为默认值:

属性
操作系统和存储空间 > 容器 点击“部署容器”
容器映像 -docker.pkg.dev//devops-repo/devops-image:v0.1”并点击“选择”
网络 > 防火墙 允许 HTTP 流量
  1. 点击创建

  2. 虚拟机启动后,点击其外部 IP 地址。一个浏览器标签页将打开,并显示 Hello DevOps Fans

注意:在创建虚拟机后,您可能必须等待一分钟左右,让 Docker 容器启动。
  1. 您现在将更改保存到 Git 代码库中。在 Cloud Shell 中输入以下内容,确保您位于正确的文件夹,并将新的 Dockerfile 添加到 Git 中:
cd ~/gcp-course/devops-repo git add --all
  1. 在本地提交您的更改:
git commit -am "Added Docker Support"
  1. 将更改推送到 Cloud Source Repositories:
git push origin main

点击检查我的进度,验证已完成以下目标: 使用 Cloud Build 和 Artifact Registry 管理 Docker 映像。

任务 5. 使用触发器自动执行构建

  1. 导航菜单上,点击 Cloud Build构建记录页面应该会打开,并且您的记录中应该会有一个或多个构建。

  2. 点击设置

  3. 从“服务账号”下拉菜单中,选择 @.iam.gserviceaccount.com

  4. 启用设置为首选服务账号选项。将 Cloud Build 服务的状态设置为已启用

  5. 前往左侧导航栏中的触发器,然后点击创建触发器

  6. 指定下列内容:

    名称:devops-trigger

    区域

    代码库部分,点击连接新代码库

    • 连接代码库窗格中,选择 GitHub(Cloud Build GitHub 应用),然后点击“继续”。
    • 选择“{your github username}/devops-repo”作为代码库,点击“确定”,然后选择“{your github username}/devops-repo(GitHub 应用)”。
    • 接受相关条款及条件,然后点击连接

    分支:.*(任何分支)

    配置类型:Cloud Build 配置文件(yaml 或 json)

    位置:内嵌

  7. 点击打开编辑器,将代码替换为下述代码,然后点击完成

steps: - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', '{{{project_0.default_region|REGION}}}-docker.pkg.dev/{{{project_0.project_id|Project ID}}}/devops-repo/devops-image:$COMMIT_SHA', '.'] images: - '{{{project_0.default_region|REGION}}}-docker.pkg.dev/{{{project_0.project_id|Project ID}}}/devops-repo/devops-image:$COMMIT_SHA' options: logging: CLOUD_LOGGING_ONLY
  1. 对于服务账号,请选择以您的项目 ID 开头的服务账号,该账号类似于 (@.iam.gserviceaccount.com),然后点击创建

  2. 如需测试触发器,请点击运行,然后点击运行触发器

  3. 点击历史记录链接,您应该会看到构建正在运行。等待构建完成,然后点击它的链接以查看其详细信息。

  4. 向下滚动并查看日志。这里的构建输出就是您在自己的机器上运行它时会看到的输出。

  5. 返回到 Artifact Registry 服务。您应该会在 devops-repo > devops-image 文件夹中看到一个新映像。

  6. 返回到 Cloud Shell 代码编辑器。在 gcp-course/devops-repo 文件夹中找到 main.py 文件。

  7. 在 main() 函数中,将标题属性更改为“Hello Build Trigger”,如下所示:

@app.route("/") def main(): model = {"title": "Hello Build Trigger."} return render_template("index.html", model=model)
  1. 使用以下命令提交更改:
cd ~/gcp-course/devops-repo git commit -a -m "Testing Build Trigger"
  1. 输入以下内容以将您的更改推送到 Cloud Source Repositories:
git push origin main
  1. 返回到 Cloud 控制台和 Cloud Build 服务。您应该会看到另一个构建正在运行。

点击“检查我的进度”以验证是否完成了以下目标: 使用触发器自动执行构建

任务 6:测试构建更改

  1. 构建完成后,请点击它以查看其详细信息。

  2. 点击执行详细信息

  3. 点击映像名称。这会将您重定向到 Artifact Registry 中的映像页面。

  4. 在窗格顶部,点击映像名称旁边的复制路径。您在接下来的步骤中会用到此名称。其格式如下所示:

{{{project_0.default_region | Lab Region }}}-docker.pkg.dev/{{{project_0.project_id|Project ID}}}/devops-demo/devops-image@sha256:8aede81a8b6ba1a90d4d808f509d05ddbb1cee60a50ebcf0cee46e1df9a54810 注意:请勿使用摘要中的映像名称。
  1. 前往 Compute Engine 服务。像您之前所做的那样,创建一个新的虚拟机来测试此映像。点击部署容器,然后粘贴您刚刚复制的映像。

  2. 选择允许 HTTP 流量

  3. 创建机器后,请在浏览器中向虚拟机的外部 IP 地址发出请求,以测试您的更改。系统应显示您的新消息。

注意:在创建虚拟机后,您可能必须等待几分钟,让 Docker 容器启动。

点击“检查我的进度”以验证是否完成了以下目标: 测试构建更改。

恭喜!

在本实验中,您使用 GitHub、Cloud Build、构建触发器和 Artifact Registry 构建了一条持续集成流水线。

结束实验

完成实验后,请点击结束实验。Google Cloud Skills Boost 会移除您使用过的资源并为您清理帐号。

系统会提示您为实验体验评分。请选择相应的星级数,输入评论,然后点击提交

星级数的含义如下:

  • 1 颗星 = 非常不满意
  • 2 颗星 = 不满意
  • 3 颗星 = 一般
  • 4 颗星 = 满意
  • 5 颗星 = 非常满意

如果您不想提供反馈,可以关闭该对话框。

如果要留言反馈、提出建议或做出更正,请使用支持标签页。

版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名称和产品名称可能是其各自相关公司的商标。

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

请使用无痕模式或无痕式浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。