arrow_back

使用 Cloud Build 和 Firebase 流水线部署 Hugo 网站

登录 加入
Quick tip: Review the prerequisites before you run the lab
Use an Incognito or private browser window to run this lab. This prevents any conflicts between your personal account and the student account, which may cause extra charges incurred to your personal account.
欢迎加入我们的社区,一起测试和分享您的知识!
done
学习 700 多个动手实验和课程并获得相关技能徽章

使用 Cloud Build 和 Firebase 流水线部署 Hugo 网站

实验 1 小时 universal_currency_alt 5 个积分 show_chart 中级
info 此实验可能会提供 AI 工具来支持您学习。
欢迎加入我们的社区,一起测试和分享您的知识!
done
学习 700 多个动手实验和课程并获得相关技能徽章

GSP747

Google Cloud 自学实验的徽标

概览

在本实验中,您将创建一个流水线,以便通过静态网站开发工具 Hugo 来部署网站。您需要将网站内容存储在 Cloud Source Repositories 中,并通过 Firebase 部署该网站,然后使用 Cloud Build 创建流水线,以自动部署提交到代码库的新内容。

目标

在本实验中,您将学到以下内容:

  • 静态网站概览
  • 使用 Hugo 设置网站
  • 将网站内容存储在 Cloud Source Repositories 中
  • 使用 Firebase 部署网站
  • 使用 Cloud Build 创建构建流水线以自动完成部署

前提条件

本文中提供的说明足以指导您完成本实验。您可能还会发现,具备一些与所使用的服务相关的实操体验也很有帮助。下面是一些其他可能有用的实验:

静态网站的优势

诸如 Hugo 之类的静态网站开发工具之所以受欢迎,是因为它们能够构建不需要网络服务器的网站。对于静态网络平台,无需维护服务器操作系统或软件。但是需要注意一些运维方面的问题。例如,您可能需要对发布的内容进行版本控制,将网站托管在内容分发网络(“CDN”)上,以及预配 SSL 证书。

若要满足这些需要,可以在 Google Cloud 上使用持续集成/持续部署流水线。开发者可以使用部署流水线自动执行整个部署过程,从而加速创新。在本实验中,您将学习如何构建可演示此自动化过程的流水线。

设置和要求

点击“开始实验”按钮前的注意事项

请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。

此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。我们会为您提供新的临时凭据,让您可以在实验规定的时间内用来登录和访问 Google Cloud。

为完成此实验,您需要:

  • 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
  • 完成实验的时间 - 请注意,实验开始后无法暂停。
注意:如果您已有自己的个人 Google Cloud 账号或项目,请不要在此实验中使用,以避免您的账号产生额外的费用。

如何开始实验并登录 Google Cloud 控制台

  1. 点击开始实验按钮。如果该实验需要付费,系统会打开一个弹出式窗口供您选择付款方式。左侧是实验详细信息面板,其中包含以下各项:

    • 打开 Google Cloud 控制台按钮
    • 剩余时间
    • 进行该实验时必须使用的临时凭据
    • 帮助您逐步完成本实验所需的其他信息(如果需要)
  2. 点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。

    该实验会启动资源并打开另一个标签页,显示登录页面。

    提示:请将这些标签页安排在不同的窗口中,并将它们并排显示。

    注意:如果您看见选择账号对话框,请点击使用其他账号
  3. 如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。

    {{{user_0.username | "<用户名>"}}}

    您也可以在实验详细信息面板中找到用户名

  4. 点击下一步

  5. 复制下面的密码,然后将其粘贴到欢迎对话框中。

    {{{user_0.password | "<密码>"}}}

    您也可以在实验详细信息面板中找到密码

  6. 点击下一步

    重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。 注意:在本次实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
  7. 继续在后续页面中点击以完成相应操作:

    • 接受条款及条件。
    • 由于该账号为临时账号,请勿添加账号恢复选项或双重验证。
    • 请勿注册免费试用。

片刻之后,系统会在此标签页中打开 Google Cloud 控制台。

注意:如需查看列有 Google Cloud 产品和服务的菜单,请点击左上角的导航菜单导航菜单图标

过程概览

这是您要构建的流水线示意图:

Cloud Build 流水线示意图

目标是能够提交代码并让代码触发流水线,然后流水线将部署网站。整个过程将分为两部分。第一部分,在本地构建网站并将其手动部署到 Firebase,以便您可以了解整个过程。第二部分,使用 Cloud Build 构建一个流水线来自动执行此过程。

任务 1. 手动部署

首先在 Linux 实例上手动构建网站,以学习端到端流程。您还将使用此 Linux 实例来执行一些必要的一次性任务,以确保 Firebase 启动并正常运行。

连接到 Linux 实例

  1. 导航菜单上,选择 Compute Engine > 虚拟机实例。您将会看到一个已为您构建的实例。
  2. 在该行末尾,您应该会看到外部 IP 地址和 SSH 按钮(如下图所示)。如果这些内容被信息面板挡住了,可以关闭该面板以查看整行的内容。

突出显示的外部 IP 地址和 SSH 按钮

  1. 记下外部 IP 地址以备稍后使用。
  2. 点击 SSH。此时将出现一个窗口,您会看到一个 shell 提示。

在本地安装 Hugo

现在,在 Linux 实例中本地安装 Hugo,以便在本地先测试网站,然后再通过 Firebase 部署该网站。为了简化此过程,我们提供了一个 shell 脚本。

  1. 在 Linux 实例中,查看文件 installhugo.sh
cat /tmp/installhugo.sh

您还会看到以下内容:

输出

#!/bin/bash # Copyright 2020 Google Inc. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. _HUGO_VERSION=0.96.0 echo Downloading Hugo version $_HUGO_VERSION... wget \ --quiet \ -O hugo.tar.gz \ https://github.com/gohugoio/hugo/releases/download/v${_HUGO_VERSION}/hugo_extended_${_HUGO_VERSION}_Linux-64bit.tar.gz echo Extracting Hugo files into /tmp... mv hugo.tar.gz /tmp tar -C /tmp -xzf /tmp/hugo.tar.gz echo The Hugo binary is now at /tmp/hugo.
  1. 注意,此处使用了 wget 命令来下载 Hugo,并使用 tar 命令来解压缩 Hugo 归档文件。在本实验后面创建流水线时,您将会看到类似的命令。

  2. 输入下面的命令以运行脚本并安装 Hugo:

cd ~ /tmp/installhugo.sh

您会收到一条如下所示的消息,告诉您 Hugo 已安装在 /tmp 目录下。您可以构建网站基础架构了。

输出:Hugo 二进制文件现在位于 /tmp/hugo 目录下。

创建代码库和初始网站

现在,创建一个 Cloud Source Repositories 代码库来保存网站,然后将该代码库克隆到 Linux 实例。克隆代码库会在 shell 中创建该代码库的镜像。这样可方便您在 shell 中实现网站,以及稍后将所做的更改提交到文件系统中。在本实验的后面部分,您将设置一条流水线来响应这些提交到代码库中的更改。

  1. 在 Linux 虚拟机上安装 git

在 Linux 实例 shell 中输入以下命令:

sudo apt-get update sudo apt-get install git

对收到的所有提示,都回答 Yes

  1. 创建并克隆代码库。在 Linux 实例 shell 中输入以下命令:
cd ~ gcloud source repos create my_hugo_site gcloud source repos clone my_hugo_site

您将收到关于已创建和克隆代码库的确认消息,如下图所示。您可以忽略相关的两条警告消息,包括将向您收取此代码库的费用和代码库是空的。

输出中的警告消息

点击“检查我的进度”,验证已完成以下目标: 已创建源代码库

  1. 现在,您可以创建网站结构了。在 Linux shell 中输入以下命令:
cd ~ /tmp/hugo new site my_hugo_site --force

通常,hugo 命令可创建目录。--force 选项将在代码库目录(已存在)中创建网站。这样您就可以将 Git 相关信息保存在刚刚克隆的目录下。您将会看到如下所示的消息,指明网站已创建。

输出会显示祝贺消息,提示用户继续执行几个步骤,并列示一个网站以获得进一步的文档和指南

  1. 现在,安装 hello-friend-ng 主题以提供网站布局。在 Linux 实例 shell 中输入以下命令:
cd ~/my_hugo_site git clone \ https://github.com/rhazdon/hugo-theme-hello-friend-ng.git themes/hello-friend-ng echo 'theme = "hello-friend-ng"' >> config.toml

您将会看到如下所示的消息,指明已克隆主题。

指明操作成功的输出消息

  1. 从主题目录中移除 git 文件:
sudo rm -r themes/hello-friend-ng/.git sudo rm themes/hello-friend-ng/.gitignore 注意:为确保 Cloud Source Repository 将主题文件添加到版本控制中,应当移除 git 文件。
  1. 现在已经设置好网站结构,您可以预览了。输入以下命令,在 TCP 端口 8080 启动该网站:
cd ~/my_hugo_site /tmp/hugo server -D --bind 0.0.0.0 --port 8080

Hugo 将构建并部署该网站,以便在 TCP 端口 8080 上访问,如下图所示。服务器将一直运行,直到您按下 CTRL+C 停止它。

命令提示符终端

  1. 打开一个浏览器标签页,并浏览至端口 8080 的外部 IP 地址。通过以下网址,将 [EXTERNAL IP] 替换为实例的外部 IP 地址:
http://[EXTERNAL IP]:8080

网站应如下所示。

我的新 Hugo 网站页面

点击“检查我的进度”,验证已完成以下目标: 可通过端口 8080 访问网站

  1. 返回到 Linux shell,并按下 CTRL+C 停止 Hugo 服务器。

将网站部署到 Firebase

  1. 在 Linux 实例 shell 中安装 Firebase CLI:
curl -sL https://firebase.tools | bash
  1. 现在,您需要初始化 Firebase。在 shell 中输入以下命令:
cd ~/my_hugo_site firebase init
  1. 使用箭头键和空格键选择 Hosting:为 Firebase Hosting 配置文件,并(可选)设置 GitHub 操作部署,然后按 Enter 键。在系统要求您选择项目选项时,选择使用现有项目,然后使用箭头键和空格键选择实验说明页面中提供的项目 ID 并按 Enter 键。对于公共目录,可选择默认值公共。如需配置为单页应用,则选择默认值 N。如需设置为通过 GitHub 自动构建和部署,则选择 N

当系统询问您是否覆盖任何现有文件时,选择“Y”。

  1. 现在,您可以部署应用了。在 Linux 实例 shell 中输入以下命令,以使用 Hugo 重新构建网站并通过 Firebase 进行部署:
/tmp/hugo && firebase deploy
  1. 部署完应用后,您会收到 Hosting 网址。点击该网址,您将会看到通过 Firebase CDN(内容分发网络)部署的同一个网站。如果收到常见的“欢迎”消息,请稍等几分钟让 CDN 完成初始化,然后再刷新浏览器窗口。保存此 Hosting 网址以备稍后使用。

至此,您已经在本地完成了整个部署。接下来,使用 Cloud Build 自动执行端到端流程。

任务 2. 自动进行部署

执行初始提交

构建流水线的目标是在代码库发生更改时能够触发构建。首先需要对代码库执行初始提交,以验证您能否进行进一步的更改。

  1. 在 Linux shell 中输入以下命令,以配置 git 命令的全局参数。务必输入相应的引号:
git config --global user.name "hugo" git config --global user.email "hugo@blogger.com"
  1. 在 Linux shell 中输入以下命令,以创建 .gitignore 文件来排除代码库中的某些目录:
cd ~/my_hugo_site echo "resources" >> .gitignore
  1. 输入以下命令来对代码库执行初始提交:
git add . git commit -m "Add app to Cloud Source Repositories" git push -u origin master

现在,您已经将网站的初始版本提交(上传)到了 Google Cloud。

配置构建

Cloud Build 使用代码库根目录中的文件 cloudbuild.yaml 来执行构建。此文件为 YAML 格式。间距和缩进非常重要,因此我们已经为您将该文件放在 Linux 实例上。

  1. 在 Linux shell 中输入以下命令。请注意,cp 命令末尾有一个终止句点 ("."):
cd ~/my_hugo_site cp /tmp/cloudbuild.yaml .
  1. 运行以下命令以查看 cloudbuild.yaml 文件的内容。由于长度原因,有些行已换行。
cat cloudbuild.yaml

输出

# Copyright 2020 Google Inc. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. steps: - name: 'gcr.io/cloud-builders/curl' args: - '--quiet' - '-O' # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. steps: - name: 'gcr.io/cloud-builders/curl' args: - '--quiet' - '-O' - 'firebase' - 'https://firebase.tools/bin/linux/latest' - name: 'gcr.io/cloud-builders/curl' args: - '--quiet' - '-O' - 'hugo.tar.gz' - 'https://github.com/gohugoio/hugo/releases/download/v${_HUGO_VERSION}/hugo_extended_${_HUGO_VERSION}_Linux-64bit.tar.gz' waitFor: ['-'] - name: 'ubuntu:20.04' args: - 'bash' - '-c' - | mv hugo.tar.gz /tmp tar -C /tmp -xzf /tmp/hugo.tar.gz mv firebase /tmp chmod 755 /tmp/firebase /tmp/hugo /tmp/firebase deploy --project ${PROJECT_ID} --non-interactive --only hosting -m "Build ${BUILD_ID}" substitutions: _HUGO_VERSION: 0.96.0 options: defaultLogsBucketBehavior: REGIONAL_USER_OWNED_BUCKET
  1. 下面是对 cloudbuild.yaml 文件的一些观察结果:
  • 此文件中有三个命名的步骤,每个步骤通过一个容器映像来执行。前两个步骤使用一个由 Google 支持的构建器,通过 curl 来下载 Hugo 和 Firebase 工具。这两个步骤并行运行。使用 curl 构建器的速度比手动安装 curl 更快。
  • 第三个步骤使用标准 Ubuntu 容器来安装 Hugo 和 Firebase,然后构建和部署网站。通过为每个部署安装 Hugo 和 Firebase,您可以根据需要随时更改 Hugo 的版本,并使用 Firebase 的最新版本。
  • tarwget 命令与之前在 installhugo.sh 脚本中的使用情形几乎完全相同。
  • 此文件还使用了一个自定义替代变量 (_HUGO_VERSION) 和一个 Google 提供的替代变量 (PROJECT_ID),以便可以在不同环境中使用此模板。
  • 系统会创建 Hugo 和 Firebase 的二进制文件并安装在临时目录中,以免将它们意外部署到网站本身。

创建 Cloud Build 触发器

现在创建一个触发器来回应对代码库的主分支执行的提交。

  1. 在命令行中,输入以下命令:
gcloud alpha builds triggers import --source=/tmp/trigger.yaml
  1. 触发器配置中包含以下详细信息:
字段
名称 commit-to-master-branch
说明 Push to master
事件 推送到分支
代码库 my_hugo_site
分支(正则表达式) ^master$(务必取消选中“反转正则表达式”)
构建配置 Cloud Build 配置文件(yaml 或 json)
Cloud Build 配置文件位置 / cloudbuild.yaml

Cloud Build 服务账号

Cloud Build 服务账号需要具备相应的权限才能使用 Firebase 来部署网站。

Cloud Build 角色 说明
[PROJECT_NUMBER@cloudbuild.gserviceaccount.com roles/firebasehosting.admin 对 Hosting 资源的完整读写权限

测试流水线

现在您已经创建了流水线,可以对网站进行更改并提交,验证更改是否生效。

  1. 在 Linux shell 中输入以下命令,进入代码库目录:
cd ~/my_hugo_site
  1. 修改 config.toml 文件并更改其标题:
Blogging with Hugo and Cloud Build
  1. 在 Linux shell 中输入以下命令,以将所做的更改提交到代码库并触发 Cloud Build 流水线:
git add . git commit -m "I updated the site title" git push -u origin master
  1. 查阅构建历史记录以查看构建状态:
gcloud builds list
  1. 查阅构建日志以了解当前构建:
gcloud builds log $(gcloud builds list --format='value(ID)' --filter=$(git rev-parse HEAD))
  1. 从执行的构建获取网址:
gcloud builds log $(gcloud builds list --format='value(ID)' --filter=$(git rev-parse HEAD)) | grep "Hosting URL"
  1. 浏览到 Hosting 网址以查看结果。您还可以前往 Firebase 控制台查看项目,以便查找域名。
注意:CDN 可能需要几分钟的时间来更新并显示更新后的网站信息。 注意:网站具有 SSL 证书,可通过 https(超文本传输安全协议)协议进行访问。

点击“检查我的进度”,验证已完成以下目标: 已成功启动 Cloud Build

恭喜!

您已经学习了 Cloud Build 如何编排流水线以将 Hugo 网站快速部署到 Firebase,这可为您提供 CDN 和 SSL 证书。借助 Cloud Build,您可以根据需要定制整个流程。部署时间缩短还有助于您加快创新步伐,并且轻松地测试网站的修订版本。如需了解详情,请查阅 Cloud Build 和 Firebase 文档。

Google Cloud 培训和认证

…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。

上次更新手册的时间:2024 年 9 月 25 日

上次测试实验的时间:2024 年 9 月 25 日

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

Before you begin

  1. Labs create a Google Cloud project and resources for a fixed time
  2. Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
  3. On the top left of your screen, click Start lab to begin

Use private browsing

  1. Copy the provided Username and Password for the lab
  2. Click Open console in private mode

Sign in to the Console

  1. Sign in using your lab credentials. Using other credentials might cause errors or incur charges.
  2. Accept the terms, and skip the recovery resource page
  3. Don't click End lab unless you've finished the lab or want to restart it, as it will clear your work and remove the project

此内容目前不可用

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

太好了!

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

One lab at a time

Confirm to end all existing labs and start this one

Use private browsing to run the lab

Use an Incognito or private browser window to run this lab. This prevents any conflicts between your personal account and the Student account, which may cause extra charges incurred to your personal account.