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

目标
在本实验中,您将学习如何执行以下任务:
- 在 GitHub 上创建 Git 代码库
- 创建简单的 Python 应用
- 在 Cloud Shell 中测试 Web 应用
- 定义 Docker 构建
- 使用 Cloud Build 和 Artifact Registry 管理 Docker 映像
- 使用触发器自动执行构建
- 测试构建更改
前提条件
如果您还没有 GitHub 账号,则需要创建 GitHub 账号
建议
- 使用已有的 GitHub 账号(如果有)。GitHub 更容易将新账号视为垃圾账号加以屏蔽。
-
在 GitHub 账号中配置双重身份验证,以降低账号被标记为垃圾账号的几率。
R
设置实验环境
对于每个实验,您都会免费获得一个新的 Google Cloud 项目及一组资源,它们都有固定的使用时限。
-
请使用无痕式窗口登录 Qwiklabs。
-
留意实验的访问时限(例如 1:15:00
)并确保能在相应时间段内完成实验。
系统不提供暂停功能。如有需要,您可以重新开始实验,不过必须从头开始。
-
准备就绪时,点击开始实验。
-
请记好您的实验凭据(用户名和密码)。您需要使用这组凭据来登录 Google Cloud 控制台。
-
点击打开 Google 控制台。
-
点击使用其他帐号,然后将此实验的凭据复制并粘贴到相应提示框中。
如果您使用其他凭据,将会收到错误消息或产生费用。
-
接受条款并跳过恢复资源页面。
任务 1:创建 Git 代码库
首先,您将使用 GitHub 创建一个 Git 代码库。此 Git 代码库将用于存储您的源代码。最终,您将创建一个构建触发器,在代码推送到代码库时启动持续集成流水线。
- 点击 Cloud 控制台,然后在新标签页中点击激活 Cloud Shell (
)。
- 如果出现提示,点击继续。
- 运行以下命令以安装 GitHub CLI:
curl -sS https://webi.sh/gh | sh
- 登录 GitHub CLI
gh auth login
按 Enter
键接受默认选项。阅读 CLI 工具中的说明,通过 GitHub 网站登录。
- 确认您已登录:
gh api user -q ".login"
如果您已成功登录,此命令应会输出您的 GitHub 用户名。
- 创建
GITHUB_USERNAME
变量
GITHUB_USERNAME=$(gh api user -q ".login")
- 确认您已创建环境变量:
echo ${GITHUB_USERNAME}
如果您已成功创建该变量,此命令应会输出您的 GitHub 用户名。
- 设置全局 git 凭证:
git config --global user.name "${GITHUB_USERNAME}"
git config --global user.email "${USER_EMAIL}"
此命令会为您的 Cloud Shell 终端创建一个 git 用户。
- 创建一个名为 devops-repo 的空 GitHub 代码库:
gh repo create devops-repo --private
- 在 Cloud Shell 中输入以下命令,创建一个名为
gcp-course
的文件夹:
mkdir gcp-course
- 切换到您刚刚创建的文件夹:
cd gcp-course
- 现在,克隆您刚刚创建的空代码库。如果出现提示,请点击授权。
gh repo clone devops-repo
注意:您可能会看到一条警告,提示您克隆了一个空代码库。此时,这属于正常情况。
- 上一条命令创建了一个名为
devops-repo
的空文件夹。切换到该文件夹:
cd devops-repo
任务 2. 创建简单的 Python 应用
您需要一些源代码,以对其进行管理。因此,您将创建一个简单的 Python Flask Web 应用。该应用仅比“Hello World”稍微复杂一点,但足以测试您将构建的流水线。
- 在 Cloud Shell 中,点击打开编辑器 (
) 以打开代码编辑器。
- 在左侧的探索器树中选择 gcp-course > devops-repo 文件夹。
- 点击 devops-repo。
- 点击新建文件。
- 将该文件命名为
main.py
,然后按 Enter 键。
- 将以下代码粘贴到您刚刚创建的文件中:
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)
- 如需保存更改,按 CTRL + S。
- 点击
devops-repo
文件夹。
- 点击新建文件夹。
- 将该文件夹命名为
templates
,然后按 Enter 键。
- 右键点击
templates
文件夹,然后创建一个名为 layout.html
的新文件。
- 添加以下代码并像之前一样保存文件:
<!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>
-
同样在 templates 文件夹中,添加另一个名为 index.html
的新文件。
-
添加以下代码并像之前一样保存文件:
{% extends "layout.html" %}
{% block content %}
<div class="jumbotron">
<div class="container">
<h1>{{model.title}}</h1>
</div>
</div>
{% endblock %}
-
在 Python 中,应用正常运行需满足的前提条件是使用 pip 管理的。现在,您将添加一个文件,其中列出了此应用的相关要求。
-
在 devops-repo 文件夹(不是 templates 文件夹)中,创建一个新文件,然后将以下内容添加到该文件并将其保存为 requirements.txt
:
Flask>=2.0.3
- 您现在有了一些文件,让我们将它们保存到代码库中。首先,您需要将创建的所有文件添加到本地 Git 代码库中。点击打开终端,然后在 Cloud Shell 中输入以下代码:
cd ~/gcp-course/devops-repo
git add --all
- 如需将更改提交到代码库,您必须表明自己的身份。请输入以下命令,但使用您自己的信息(您可以使用自己的 Gmail 地址或任何其他电子邮件地址):
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
- 现在,在本地提交更改:
git commit -a -m "Initial Commit"
- 您在本地提交了更改,但尚未更新您在 Cloud Source Repositories 中创建的 Git 代码库。请输入以下命令,将您的更改推送到云端:
git push origin main
- 刷新 GitHub 网页。您应该会看到刚刚创建的文件。
任务 3:定义 Docker 构建
使用 Docker 的第一步是创建一个名为 Dockerfile 的文件。该文件定义了 Docker 容器的构建方式。您现在将创建该文件。
- 点击打开编辑器,然后展开 gcp-course/devops-repo 文件夹。选择 devops-repo 文件夹后,点击新建文件,然后将新文件命名为 Dockerfile。
Dockerfile 文件用于定义容器的构建方式。
- 在文件顶部,输入以下内容:
FROM python:3.9
这是基础映像。您可以选择多个基础映像。在此示例中,您使用的是已经安装了 Python 的基础映像。
- 输入以下内容:
WORKDIR /app
COPY . .
这些代码行将源代码从当前文件夹复制到容器映像的 /app 文件夹中。
- 输入以下内容:
RUN pip install gunicorn
RUN pip install -r requirements.txt
此命令使用 pip 将 Python 应用的要求安装到容器中。Gunicorn 是一个 Python 网络服务器,将用于运行 Web 应用。
- 输入以下内容:
ENV PORT=80
CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 main:app
环境变量设置将用于运行应用的端口(在本例中为 80)。最后一行代码使用 gunicorn Web 服务器来运行 Web 应用。
- 核实已完成的文件内容如下,并保存该文件:
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 Build 和 Artifact Registry。
- 点击打开终端以返回 Cloud Shell。确保您位于正确的文件夹:
cd ~/gcp-course/devops-repo
- Cloud Shell 环境变量 DEVSHELL_PROJECT_ID 会自动存储您当前的项目 ID。要在 Artifact Registry 中存储映像,项目 ID 是必需的。请输入以下命令,查看您的项目 ID:
echo $DEVSHELL_PROJECT_ID
- 输入以下命令,创建一个名为“devops-repo”的 Artifact Registry 制品库:
gcloud artifacts repositories create devops-repo \
--repository-format=docker \
--location={{{ project_0.default_region | "REGION" }}}
- 输入以下命令,配置 Docker 以向 Artifact Registry Docker 制品库进行身份验证:
gcloud auth configure-docker {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev
- 输入以下命令,使用 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 中。
-
在 Google Cloud 控制台标题栏的搜索字段中输入 Artifact Registry,然后点击搜索结果中的 Artifact Registry。
-
点击 Artifact Registry 旁边的固定图标。
-
点击 devops-repo。
-
点击 devops-image。系统应该会列出您的映像。
-
在 Google Cloud 控制台标题栏的搜索字段中输入 Cloud Build,然后点击搜索结果中的 Cloud Build。
-
点击 Cloud Build 旁边的固定图标。
-
您的构建应该会列在历史记录中。
您现在将尝试从 Compute Engine 虚拟机运行此映像。
-
在导航菜单中,点击 Compute Engine > 虚拟机实例。
-
点击创建实例以创建虚拟机。
-
在创建实例页面上,指定以下内容,并将其余设置保留为默认值:
属性 |
值 |
操作系统和存储空间 > 容器 |
点击“部署容器” |
容器映像 |
“-docker.pkg.dev//devops-repo/devops-image:v0.1”并点击“选择” |
网络 > 防火墙 |
允许 HTTP 流量 |
-
点击创建。
-
虚拟机启动后,点击其外部 IP 地址。一个浏览器标签页将打开,并显示 Hello DevOps Fans
。
注意:在创建虚拟机后,您可能必须等待一分钟左右,让 Docker 容器启动。
- 您现在将更改保存到 Git 代码库中。在 Cloud Shell 中输入以下内容,确保您位于正确的文件夹,并将新的 Dockerfile 添加到 Git 中:
cd ~/gcp-course/devops-repo
git add --all
- 在本地提交您的更改:
git commit -am "Added Docker Support"
- 将更改推送到 Cloud Source Repositories:
git push origin main
点击检查我的进度,验证已完成以下目标:
使用 Cloud Build 和 Artifact Registry 管理 Docker 映像。
任务 5. 使用触发器自动执行构建
-
在导航菜单上,点击 Cloud Build。构建记录页面应该会打开,并且您的记录中应该会有一个或多个构建。
-
点击设置。
-
从“服务账号”下拉菜单中,选择 @.iam.gserviceaccount.com
-
启用设置为首选服务账号选项。将 Cloud Build
服务的状态设置为已启用。
-
前往左侧导航栏中的触发器,然后点击创建触发器。
-
指定下列内容:
名称:devops-trigger
区域:
在代码库部分,点击连接新代码库
- 在连接代码库窗格中,选择 GitHub(Cloud Build GitHub 应用),然后点击“继续”。
- 选择“{your github username}/devops-repo”作为代码库,点击“确定”,然后选择“{your github username}/devops-repo(GitHub 应用)”。
- 接受相关条款及条件,然后点击连接
分支:.*(任何分支)
配置类型:Cloud Build 配置文件(yaml 或 json)
位置:内嵌
-
点击打开编辑器,将代码替换为下述代码,然后点击完成。
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
-
对于服务账号,请选择以您的项目 ID 开头的服务账号,该账号类似于 (@.iam.gserviceaccount.com),然后点击创建。
-
如需测试触发器,请点击运行,然后点击运行触发器。
-
点击历史记录链接,您应该会看到构建正在运行。等待构建完成,然后点击它的链接以查看其详细信息。
-
向下滚动并查看日志。这里的构建输出就是您在自己的机器上运行它时会看到的输出。
-
返回到 Artifact Registry 服务。您应该会在 devops-repo > devops-image 文件夹中看到一个新映像。
-
返回到 Cloud Shell 代码编辑器。在 gcp-course/devops-repo
文件夹中找到 main.py
文件。
-
在 main() 函数中,将标题属性更改为“Hello Build Trigger
”,如下所示:
@app.route("/")
def main():
model = {"title": "Hello Build Trigger."}
return render_template("index.html", model=model)
- 使用以下命令提交更改:
cd ~/gcp-course/devops-repo
git commit -a -m "Testing Build Trigger"
- 输入以下内容以将您的更改推送到 Cloud Source Repositories:
git push origin main
- 返回到 Cloud 控制台和 Cloud Build 服务。您应该会看到另一个构建正在运行。
点击“检查我的进度”以验证是否完成了以下目标:
使用触发器自动执行构建
任务 6:测试构建更改
-
构建完成后,请点击它以查看其详细信息。
-
点击执行详细信息。
-
点击映像名称。这会将您重定向到 Artifact Registry 中的映像页面。
-
在窗格顶部,点击映像名称旁边的复制路径。您在接下来的步骤中会用到此名称。其格式如下所示:
{{{project_0.default_region | Lab Region }}}-docker.pkg.dev/{{{project_0.project_id|Project ID}}}/devops-demo/devops-image@sha256:8aede81a8b6ba1a90d4d808f509d05ddbb1cee60a50ebcf0cee46e1df9a54810
注意:请勿使用摘要中的映像名称。
-
前往 Compute Engine 服务。像您之前所做的那样,创建一个新的虚拟机来测试此映像。点击部署容器,然后粘贴您刚刚复制的映像。
-
选择允许 HTTP 流量。
-
创建机器后,请在浏览器中向虚拟机的外部 IP 地址发出请求,以测试您的更改。系统应显示您的新消息。
注意:在创建虚拟机后,您可能必须等待几分钟,让 Docker 容器启动。
点击“检查我的进度”以验证是否完成了以下目标:
测试构建更改。
恭喜!
在本实验中,您使用 GitHub、Cloud Build、构建触发器和 Artifact Registry 构建了一条持续集成流水线。
结束实验
完成实验后,请点击结束实验。Google Cloud Skills Boost 会移除您使用过的资源并为您清理帐号。
系统会提示您为实验体验评分。请选择相应的星级数,输入评论,然后点击提交。
星级数的含义如下:
- 1 颗星 = 非常不满意
- 2 颗星 = 不满意
- 3 颗星 = 一般
- 4 颗星 = 满意
- 5 颗星 = 非常满意
如果您不想提供反馈,可以关闭该对话框。
如果要留言反馈、提出建议或做出更正,请使用支持标签页。
版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名称和产品名称可能是其各自相关公司的商标。