Hugo博客action代码部署:action代码解析
Hugo博客的action代码:解析用aciton配置hugo博客的action代码
好的,这是视频中展示的、由社区贡献者 (peaceiris) 维护的用于通过 GitHub Actions 部署 Hugo 站点的 Actions 工作流 YAML 代码:
|
|
代码解释 (遵循托勒斯法则/Law of Demeter - 关注“做什么”而非“怎么做”的内部细节):
-
name: deploy- 作用: 给这个自动化流程(工作流)起个名字,叫做
deploy。这个名字会显示在 GitHub 仓库的 “Actions” 标签页里,方便你识别。 - 托勒斯法则: 你只需要知道这是流程的名字,不需要关心 GitHub 内部如何使用这个名字。
- 作用: 给这个自动化流程(工作流)起个名字,叫做
-
on: push: branches: [main]- 作用: 定义触发这个自动化流程的条件。这里设置的是:当你向
main这个分支推送 (push) 代码时,这个流程就会自动开始运行。 - 托勒斯法则: 你只需要知道“推送到 main 分支”这个动作会启动流程,不需要关心 GitHub 是如何监控推送事件或分支的。
- 作用: 定义触发这个自动化流程的条件。这里设置的是:当你向
-
jobs: deploy:- 作用: 定义这个流程中要执行的一个或多个任务组(作业)。这里只有一个任务组,名字叫
deploy。 - 托勒斯法则: 你只需要知道这里开始定义一个主要的工作单元,它包含了一系列要完成的步骤。
- 作用: 定义这个流程中要执行的一个或多个任务组(作业)。这里只有一个任务组,名字叫
-
runs-on: ubuntu-latest- 作用: 指定
deploy这个任务组运行在什么样的虚拟环境里。这里指定的是ubuntu-latest,意味着 GitHub 会提供一个最新的 Ubuntu Linux 虚拟服务器来运行后续步骤。 - 托勒斯法则: 你只需要知道你的自动化步骤将在一个 Linux 环境中执行,不需要关心这个环境是如何创建和管理的。
- 作用: 指定
-
steps:- 作用: 定义
deploy作业中要按顺序执行的具体步骤。
- 作用: 定义
-
- name: Checkout- 作用: 给这个步骤起个名字,叫
Checkout,方便在日志中查看。 - ♈
uses: actions/checkout@v4: 使用一个预先写好的、官方提供的“动作” (Action),叫做actions/checkout(版本是 v4)。♐这个动作的功能是**把你的仓库代码下载(检出)**到当前的虚拟运行环境中,以便后续步骤可以使用这些代码。 with: fetch-depth: 0: 这是给actions/checkout动作传递的一个参数。fetch-depth: 0的意思是下载完整的代码历史记录,而不是默认只下载最近的一次提交。部署动作peaceiris/actions-gh-pages有时需要完整的历史记录才能正确工作。- 托勒斯法则: 你只需要知道这个步骤会把你的代码准备好,并且需要完整的历史。你不需要知道
checkout动作内部是如何通过 Git 命令实现下载的。
- 作用: 给这个步骤起个名字,叫
-
- name: Setup Hugo- 作用: 步骤名,设置 Hugo 环境。
- ♈
uses: peaceiris/actions-hugo@v3: 使用一个由社区开发者 (peaceiris) 维护的 Action,叫做actions-hugo(版本是 v3)。这个动作专门用来安装和配置 Hugo。 【♓这一步的作用是把能够执行 hugo 命令的那个程序安装好 ,因为♐即使你的项目文件上传到了仓库,也仍然需要安装 Hugo 包。你上传到仓库的是你博客的“原材料”(Markdown 文件、主题、配置),而不是制作网站的“工具”(即 Hugo 程序本身))。” 托勒斯法则: 你只需要知道,这一步负责获取你的博客源代码(包括你的 Markdown 文章、主题、配置文件等),并将它们准备好,以便后续步骤使用。它确实使用了你推送到仓库的文件,♈Action 运行环境是一个临时的、干净的 Linux 系统,它默认并没有安装 Hugo 这个“工具”】 with:: 给actions-hugo动作传递参数:hugo-version: 'latest': 告诉动作要安装最新版本的 Hugo。extended: true: 告诉动作要安装 Hugo 的 Extended(扩展)版本。这个版本支持 SASS/SCSS 等高级功能,很多主题需要它。
- 托勒斯法则: 你只需要知道这个步骤会自动安装好你需要的 Hugo 版本,不需要关心它具体从哪里下载、如何安装。
-
- name: Build Web- 作用: 步骤名,构建网站。
run: hugo -D: 直接运行一条命令:hugo -D。这就是你在本地用来生成静态网站文件的命令。它会读取你的 Hugo 项目文件,并把最终的网站文件(HTML, CSS, JS, 图片等)生成到默认的public目录下。-D参数是包含标记为草稿 (draft) 的内容。- 托勒斯法则: 你只需要知道这个步骤执行了 Hugo 的构建命令,并产出了
public文件夹,就像你在本地操作一样。
-
- name: Deploy Web- 作用: 步骤名,部署网站。
uses: peaceiris/actions-gh-pages@v4: 使用另一个由 peaceiris 维护的 Action,叫做actions-gh-pages(版本是 v4)。这个动作专门用来将一个文件夹的内容推送到指定仓库的指定分支,非常适合部署到 GitHub Pages。with:: 给actions-gh-pages动作传递部署所需的参数:PERSONAL_TOKEN: ${{ secrets.TOKEN }}: 提供认证凭证。这个动作需要权限去推送代码到目标仓库。这里使用的是你之前创建并存储在仓库 Secrets 中的 Personal Access Token (PAT)。secrets.TOKEN表示去读取名为TOKEN的那个 Secret 的值。EXTERNAL_REPOSITORY: letere-gz/hugo-dev: 指定目标仓库。告诉动作要把public目录下的文件推送到letere-gz这个用户(或组织)下的hugo-dev仓库。你需要将letere-gz/hugo-dev替换成你自己的 GitHub 用户名和用于托管 GitHub Pages 的仓库名 (例如your-username/your-username.github.io)。PUBLISH_BRANCH: main: 指定目标分支。告诉动作要把文件推送到目标仓库的main分支。你需要根据你的 GitHub Pages 设置,将其修改为正确的目标分支 (常见的有gh-pages或main)。PUBLISH_DIR: ./public: 指定要部署的内容来源。告诉动作需要推送的是当前目录下public文件夹里的所有内容。commit_message: auto deploy: 设置部署时产生的 Git 提交信息。每次部署都是一次 Git 提交,这里设置提交信息为 “auto deploy”。
- 托勒斯法则: 你只需要知道这个步骤负责把
public目录的内容,使用你提供的 Token 认证后,推送到你指定的目标仓库和分支。你不需要关心它内部是如何进行 Git 操作和推送的。