系列文章:
(一)Jenkins 与 CI/CD | 容器化启动 Jenkins with docker in docker
(二)Jenkins 与 CI/CD | 基于 VitePress 快速搭建静态网站
(三)Jenkins 与 CI/CD | 在 GitHub 中发布静态网站
前言
第二篇文章介绍了使用 Docker 构建基于 VitePress 的静态资源站点。完成第二章的内容后,作者只能在开发环境中看到自己的“成果”,而无法让互联网上的用户访问。你或许已经访问过以 github.io 为域名后缀的网站,现在开始你也可以拥有。本文介绍利用 GitHub Workflows 在 GitHub 仓库中发布静态网站。
更令人惊喜的是,该流程原生支持了 CI/CD,所有的资源以及能力均由 GitHub 免费提供。
GitHub 真的是一个强大的网站,全球最大程序员交友网站!
介绍
在 GitHub 网站上工作流相关的概念包括:GitHub Workflow、GitHub Actions、GitHub Pages。
这三个概念不是并列关系,下面将做简要介绍。
GitHub Workflows 与 GitHub Actions
工作流是一个可配置的自动化过程,将运行一个或多个作业。工作流由签入到存储库的 YAML 文件定义,并将在存储库中的事件触发时运行,或者可以手动触发,或者按照定义的计划。
工作流在存储库的 .github/workflow
目录中定义。一个存储库可以有多个工作流,每个工作流都可以执行一组不同的任务,例如:
- 构建和测试拉取请求
- 每次创建版本时部署您的应用程序
- 每当打开新问题时添加标签
工作流基础
工作流必须包含以下基本组件:
- 一个或多个将触发工作流的事件。
- 一个或多个作业,每个作业都将在运行机器上执行并运行一系列一个或多个步骤。
- 每个步骤都可以运行您定义的脚本或运行操作,这是一个可重用的扩展,可以简化您的工作流程。
有关这些基本组件的更多信息,请参阅了解 GitHub 操作
GitHub Actions 是一个持续集成和持续交付(CI/CD)平台,允许您自动化构建、测试和部署管道。您可以创建工作流,以便在将更改推送到存储库时运行测试,或者将合并的拉取请求部署到生产环境。
用 GitHub Actions 来实现 GitHub Workflow 所规划出来的自动化流程。
GitHub Pages
You can use GitHub Pages to host a website about yourself, your organization, or your project directly from a repository on GitHub.
您可以使用 GitHub Pages 直接从 GitHub 上的存储库托管有关您自己、您的组织或您的项目的网站。GitHub Pages是一个静态站点托管服务,它直接从GitHub上的存储库获取超文本标记语言、CSS 和 JavaScript 文件,可选地通过构建过程运行文件,并发布网站。
GitHub Workflow 规划好自动化流程,GitHub Actions 充当这个流程的执行者。当涉及到 GitHub Pages 相关项目时,借助 GitHub Actions 编写的自动化流程,可以轻松搞定繁琐任务。例如,每次更新博客仓库的源码后,利用 Actions 设定的 Workflow,自动运行构建工具把 markdown 转成 HTML,再把生成的静态文件推送至 gh-pages
分支,触发 GitHub Pages 更新站点内容,全程无需手动干预,紧密串联起从代码更新到网页更新的链路。
静态站点发布
在开始本章节之前,请先阅读系列文章的前两篇。
项目构建概述:
- 创建 GitHub-Token,支持开发者模式访问 GitHub
- 创建并配置
github-actions.yaml
,目录.github/workflows/github-actions.yaml
- 在 GitHub 部署域名中添加项目名前缀
docker-vitepress
创建 GitHub Token
该过程在文章「(一)Jenkins 与 CI/CD | 容器化启动 Jenkins with docker in docker」有描述。
传送门:创建 GitHub Token
概述:
- 设置 Token 名,Note:
MY_GITHUB_TOKEN
(自定义名称,建议全大写); - 设置仓库权限;
- 生成 Token,请妥善保管(关闭后不可查看),将在下一小节用于登陆 GitHub。
Workflow 配置文件
在该项目的 GitHub 仓库 Settings 中配置仓库密钥
- Settings
- Security -> Secrets and variables -> Actions
- 创建新的仓库密钥: New repository secret
- 密钥命名为
VITE_TOKEN
,密钥为上一小节中获取的一串 TOKEN
定义 workflow 配置文件,询问 ChatGPT、Kimi、豆包,或者 IDE 插件:腾讯云 AI 代码助手、Mars Code
基于 GitHub-Workflows 模板,定义配置文件 .github/workflows/github-actions.yaml
。
name: VitePress-hope Github Deploy
on:
# 1. 自动触发:当在 main 分支上执行 push 动作时
push:
branches:
- main
# 2. 手动触发
workflow_dispatch:
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
version: 9
run_install: false
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
- name: Build
run: pnpm run docs:build
- name: Deploy 🚀
uses: JamesIves/github-pages-deploy-action@v4
with:
token: ${{secrets.VITE_TOKEN}}
folder: docs/.vitepress/dist
git-config-name: xiaolinstar
git-config-email: xing.xiaolin@foxmail.com
在配置文件 38-40 行,设置个性化参数
token
:${{secrets.VITE_TOKEN}}
git-config-name
: GitHub 用户名git-config-email
: GitHub 用户邮箱
当执行 git push 更新本 GitHub 仓库时,会自动触发 GitHub Actions;
workflow_dispatch
也支持点击按钮,手动触发。
添加域名前缀
GitHub Pages 发布和传统云服务器发布在域名上的区别:
- 云服务器个性域名:specific-domain.com/
- GitHub域名:xiaolinstar.github.io/docker-vite…
GitHub Pages 发布方式比云服务器发布多了仓库名前缀,需要在项目部署时做区分和处理,以兼容这两类发布方式。
VitePress 项目的主要配置文件包括两个:
- docs/index.md
- docs/.vitepress/config.mts
只需在 config.mts
中添加 2 行代码即可区分项目部署方式。 修改后的config.mts
内容如下(添加的代码已用注释标注)
import { defineConfig } from 'vitepress'
// @ts-ignore (*) 网站基础路径,区分GitHub部署和常规部署
const basePath = process.env.GITHUB_ACTIONS === 'true' ? '/docker-vitepress/' : '/'
// https://vitepress.dev/reference/site-config
export default defineConfig({
base: basePath, // (*) 设置域名前缀
title: "My Awesome Project",
description: "A VitePress Site",
themeConfig: {
// https://vitepress.dev/reference/default-theme-config
nav: [
{ text: 'Home', link: '/' },
{ text: 'Examples', link: '/markdown-examples' }
],
sidebar: [
{
text: 'Examples',
items: [
{ text: 'Markdown Examples', link: '/markdown-examples' },
{ text: 'Runtime API Examples', link: '/api-examples' }
]
}
],
socialLinks: [
{ icon: 'github', link: 'https://github.com/vuejs/vitepress' }
]
}
})
上述两小节均在本地开发,完成后推送到 GitHub 仓库。
启用 GitHub Pages
依据 github-acitons.yaml
配置文件, 触发 GitHub Actions 后,会在仓库生成 gh-pages 分支,将用于部署 GitHub Pages。
Actions 执行成功(下图为手动触发效果):
生成新的仓库分支 ph-pages:
在 GitHub Actions 中执行了构建的动作,但要发布为网页,需要启用 GitHub Pages。
下图展示,GitHub Pages 将 分支 gh-pages 发布。
GitHub Pages 本质上也是一个 Actions 中的工作流,点击保存后,可以在 Actions 中看到一下执行动作:
pages build and deployment
站点发布完成后,即可输入域名查看效果:
何以 CI/CD
静态资源网站没有后端数据库,对网站的维护是以源代码的形式进行的。优点是网站配置更新、修改非常灵活;缺点是以源代码的方式维护网站,需要一定的编程基础。
不过,编辑文章是通过编辑 Markdown 文件进行的,只要会使用 Markdown 来编辑文章,就可轻松驾驭网站维护。
网站维护工作流:
时序图是理想情况:每个步骤只执行一次且执行成功
sequenceDiagram
本地 IDE ->> 本地 IDE: 项目维护:配置、文章编辑
本地 IDE ->> 本地 IDE: 在开发环境查看更新效果
本地 IDE ->> 本地 IDE: 预发布查看更新效果
本地 IDE ->> GitHub 仓库: 推送变更到 GitHub 仓库
GitHub 仓库 ->> GitHub 仓库: 执行 Workflows,项目重新构建
GitHub 仓库 ->> 本地 IDE: 网站更新成功
本地 IDE ->> 本地 IDE: 查看发布效果
网站维护
部署的网站如何维护呢?有了 CI/CD,该过程非常简单优雅,本小节做简单演示。
当前网站效果:
下面进行网站信息维护,更新项目首页,使其展示中文信息。
修改 /docs/index.md
中的项目标题和描述,部分截取:
---
# https://vitepress.dev/reference/default-theme-home-page
layout: home
hero:
name: "我的精彩项目"
text: "一个 VitePress 网站"
tagline: 微软是一家伟大的公司,是 GitHub 的拥有者
actions:
- theme: brand
text: Markdown Examples
link: /markdown-examples
- theme: alt
text: API Examples
link: /api-examples
features:
- title: Feature A
details: Lorem ipsum dolor sit amet, consectetur adipiscing elit
- title: Feature B
details: Lorem ipsum dolor sit amet, consectetur adipiscing elit
- title: Feature C
details: Lorem ipsum dolor sit amet, consectetur adipiscing elit
---
提交 git 版本,并推送到远程 GitHub 仓库,自动触发 workflow,网站更新。
从发布到部署完成,整个过程作者只需一个 git push
,发布耗时不到 2 分钟,就可以看到更新后到网站。
该项目公网访问地址:xiaolinstar.github.io/docker-vite…
总结
本文在部署 VitePress 静态网站的基础上,将项目通过 GitHub Pages 以生产发布。首先对 GitHub Workflows 等概念进行简单介绍,然后手把手实现 GitHub 仓库发布,最后演示了网站维护的方法,轻松实现最简单的 CI/CD。
本文中静态网站发布是依靠 GitHub 提供的能力,开发者对流程编排的能力并无太多参与。下一篇文章,将在云服务器上发布项目,并使用 Jenkins 体验设计 CI/CD 的流程,这将是一个里程碑,或者是 CI/CD 中的 Hello World。
关注微信公众号,获取运维资讯
如果此篇文章对你有所帮助,感谢你的点赞与收藏,也欢迎在评论区友好交流。
微信搜索关注公众号:持续运维
参考
- 关于 GitHub workflows docs.github.com/en/actions/…
- 了解 GitHub 操作 docs.github.com/en/actions/…
- 关于 GitHub Pages docs.github.com/en/pages/ge…
- 我的精彩网站 xiaolinstar.github.io/docker-vite…
- github-pages-deploy-action github.com/JamesIves/g…