[Tools] GitHub Action 部署文档网站

news/2025/2/1 13:39:21/文章来源:https://www.cnblogs.com/Answer1215/p/18696259

关于部署网站,理论上来讲,只要你有一个服务器,你要采用什么样的方式来部署都是可以的。但是前提是你需要有一个服务器(物理机、云服务器)。

这节课我们部署文档网站选择使用 github 来进行部署,因为 GitHub 为我们提供了一个免费的服务器,一个账号只有一个,只要你在 GitHub 上面有账号,你就能够轻松的创建一个免费的网站,这个免费的网站就特别适合拿来做个人博客、个人简历、文档网站。

要使用 github 来创建免费网站,有两个概念大家需要稍做了解:

  • github pages
  • github action

github pages

这是其实就是 github 所提供的一个免费的静态网站托管服务,它允许你将你的 html、css 和 js 托管到 github 仓库里面,之后会将这个仓库作为一个网站提供给访问者,这个 github pages 托管服务,一个账号只能对应一个网站,这个网站就特别适合拿来做个人博客、项目文档、简历等静态网站。

官网地址如下:https://pages.github.com/

GitHub Pages 的特点:

  • 免费:对于公开仓库,GitHub Pages 提供免费的静态网站托管服务。
  • 支持自定义域名:可以将您自己的域名与 GitHub Pages 网站关联。
  • HTTPS 支持:GitHub Pages 支持 HTTPS,确保您的网站内容在传输过程中受到保护。
  • 简单的部署:只需将静态文件推送到 GitHub 仓库,GitHub Pages 就会自动部署并更新您的网站。

github action

这是是一个自动化工具,允许你在 github 仓库里面定义你的工作流并且执行。有了这个工具之后,可以让我们在代码推送、拉取请求、issue 创建等工作全部实现自动化,自动执行构建、测试、部署等任务

官网地址如下:https://github.com/features/actions

GitHub Actions 的特点:

  • 集成在 GitHub 中:无需使用第三方 CI/CD 工具,直接在 GitHub 仓库中管理和执行自动化任务。
  • 可定制:您可以创建自己的工作流,定义一系列的步骤和任务,根据项目需求进行调整。
  • 支持多种语言和平台:GitHub Actions 支持各种编程语言和操作系统,包括 Windows、macOSLinux
  • 可扩展性:可以使用 GitHub 社区提供的大量预构建 Actions,也可以创建自己的 Actions

部署实战

首先第一步,我们需要将上节课的文档项目变为一个代码仓库

git init

接下来在项目根目录下面创建一个名为 .gitignore 的文件,该文件会记录不需要上传到远端仓库的目录或者文件

# 记录不需要上传到远端仓库的目录或者文件
node_modules

接下来我们就需要来定义我们的工作流,在项目根目录下面创建一个 .github/workflows目录,在该目录中创建一个名为 deploy.yml 部署文件,该文件内部就会记录我们的工作流

name: Deploy
on:workflow_dispatch: {}push:branches:- main
jobs:deploy:runs-on: ubuntu-latestpermissions:pages: writeid-token: writeenvironment:name: github-pagesurl: ${{ steps.deployment.outputs.page_url }}steps:- uses: actions/checkout@v3with:fetch-depth: 0- uses: actions/setup-node@v3with:node-version: 16cache: npm- run: npm ci- name: Buildrun: npm run docs:build- uses: actions/configure-pages@v2- uses: actions/upload-pages-artifact@v1with:path: docs/.vitepress/dist- name: Deployid: deploymentuses: actions/deploy-pages@v1
  • name:该工作流的名称,这里我们的名称叫做 Deploy
  • on:定义触发工作流的事件,在上面的例子中,工作流会在以下情况触发:
    • 当你手动触发时
    • 当你推送代码到 main 分支的时候
  • jobs:定义要运行的一组任务
    • deploy:表示要运行一个名为 deploy 的任务
      • runs-on:定义你的任务是在哪种类型的机器上面运行
      • permissions:工作流需要的权限
      • environment:运行工作流的环境
      • steps:定义任务中要执行的一系列任务
        • 第一步:使用 actions/checkout@v3 操作检出您的仓库。
        • 第二步:使用 actions/setup-node@v3 操作设置指定版本的 Node.js 环境。这里是使用 Node.js 16 和 npm 缓存。
        • 第三步:运行 npm ci 命令以安装项目依赖项。
        • 第四步:运行名为 "Build" 的步骤,执行 npm run docs:build 命令以构建文档。
        • 第五步:使用 actions/configure-pages@v2 操作配置 GitHub Pages。
        • 第六步:使用 actions/upload-pages-artifact@v1 操作将构建产物(位于 docs/.vitepress/dist 目录下)上传为工作流制品。
        • 第七步:运行名为 "Deploy" 的步骤,使用 actions/deploy-pages@v1 操作部署文档到 GitHub Pages。并使用 id 参数将此步骤的 ID 设置为 "deployment",以便在后续步骤中引用。

任务流文件准备好了之后,我们就可以开始准备推送了。在推送之前还有两个工作需要做:

  • 确保文档项目没有问题
  • 确保代码仓库工作区是干净的

接下来我们需要来到 github 官网,创建一个名为 username.github.io 的仓库,注意将 username 替换为你 github 账号的 username

image-20230609113447037

仓库创建好之后,通过如下的命令将我们本地的仓库推送到远端仓库:

git remote add origin git@github.com:xj89959853/xj89959853.github.io.git
git branch -M main
git push -u origin main

推送到远端仓库之后,github actions 就会根据我们的工作流配置文件自动的执行任务流,你可以在 actions 面板看到对应的执行进度

image-20230609114314960

点击 【pages build and deployment】,里面就可以看到部署的网站链接

image-20230609114407385

补充内容

目前我们的 github 账号是一个普通的用户站点,而非项目站点。如果是用户或者组织站点,需要将内容部署在默认的 master 或者 main 分支的根目录下面。

因此我们需要确保最终我们打包好了的内容部署到站点的根目录下面。

所以这里我对工作流文件做了一些更新:

name: Deploy
on:workflow_dispatch: {}push:branches:- main
jobs:deploy:runs-on: ubuntu-latestpermissions:pages: writeid-token: writeenvironment:name: github-pagesurl: ${{ steps.deployment.outputs.page_url }}steps:- uses: actions/checkout@v3with:fetch-depth: 0- uses: actions/setup-node@v3with:node-version: 16cache: npm- run: npm ci- name: Buildrun: npm run docs:build- name: Move built files to root directory and clean uprun: |rm -rf guide referencemv docs/.vitepress/dist/* ./rm -rf docs/.vitepress/dist- uses: actions/configure-pages@v2- uses: actions/upload-pages-artifact@v1with:path: ./- name: Deployid: deploymentuses: actions/deploy-pages@v1

工作流文件修改完毕后,还是一样的步骤,首先提交工作区,让工作区变得干净,然后通过:

git push -u origin main

提交到远端仓库。

注意有些时候你可能会面临这么一种情况,已经提交了新的任务流文件,在 Actions 面板,看到所有的任务也已经运行完毕了,但是仍然是 404

  • 清除一下浏览器的缓存
  • 重新触发工作流

image-20230609143500096

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/877562.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Tools] VitePress搭建文档网站

创建 API 文档可以选择如下的 3 种方式:功能较少,可以直接写在 README.md 文件里面 内容较多,可以单独写一个文件 API 数量众多(Vue、React 这种级别),需要考虑单独拿一个网站来做详细的文档支持这里我们要搭建的网站实际上就是一个文档网站,这个时候我们可以选择静态站…

[Tools] 搭建文档网站

创建 API 文档可以选择如下的 3 种方式:功能较少,可以直接写在 README.md 文件里面 内容较多,可以单独写一个文件 API 数量众多(Vue、React 这种级别),需要考虑单独拿一个网站来做详细的文档支持这里我们要搭建的网站实际上就是一个文档网站,这个时候我们可以选择静态站…

java中的HsahMap

HsahMap HashMap 是 Java 中最常用的集合类之一,它实现了 Map 接口,基于哈希表存储键值对 HashMap的存储是无顺序的 HashMap存储的是键值对(key-value)其中键key是唯一的,值(value)可以重复。 HashMap的底层是数组和链表 HashMap的常见方法 添加方法: 1,put(K key, V valu…

MyBatis的增删改查实现

首先还是使用上一篇文章相同的数据表和实体类,如下图所示1 package com.loubin.pojo;2 3 public class User {4 private int id;5 private String name;6 private String pwd;7 8 public int getId() {9 return id; 10 } 11 12 public void …

Reqable:现代化 API 调试工具

Reqable 是一款专为开发者设计的现代化 API 调试工具,旨在简化 API 开发、测试和调试的流程。 它支持多种协议(如 HTTP、HTTPS、WebSocket 等),并提供了丰富的功能,帮助开发者更高效地构建、调试和分析 API 请求与响应。 Reqable 以其简洁的设计、强大的功能和卓越的性能,…

DeepSeek-R1?别信新闻,它真能打败 OpenAI?

Yy DeepSeek-R1?别信新闻 它真的是那个打败 OpenAI 的开源黑马模型,还是又一条假新闻? Fabio Matricardi它真的那么厉害……是在哪方面? 前言:DeepSeek在大模型小型以及优化的道路上探索蒸馏和纯强化学习的路径获得的一点成绩确实让美国人紧张了一把,但同时也招致了更严格…

6.演讲比赛流程管理系统

基于STL的演讲比赛流程管理系统。1.需求2.文件目录3.代码 3.1Speaker.h #pragma once #include<iostream> using namespace std;class Speaker {public:string m_Name;double m_Score[2];};3.2SpeechManager.h #pragma once #include<iostream> #include<vector…

Qwen2.5-VL:更强大的多模态大模型|附实测结果

模型更新简述 几天前,通义千问更新了最新的多模态大模型Qwen2.5-VL,拥有包含 3B、7B 和 72B 在内的 3 个模型尺寸,同时完全开源,可在huggingface和modelscope下载到所有模型权重。 1. 更灵活的时空维度处理 ● 空间维度上,动态地将不同尺寸的图像转换为不同长度的token,并…

第五节上,图像分类实战,食物分类

随机种子固定随机结果,方便复现 def seed_everything(seed):torch.manual_seed(seed)torch.cuda.manual_seed(seed)torch.cuda.manual_seed_all(seed)torch.backends.cudnn.benchmark = Falsetorch.backends.cudnn.deterministic = Truerandom.seed(seed)np.random.seed(seed)o…

对比使用DeepSeek与文新一言,了解DeepSeek的关键技术论文

DeepSeek是国内大模型技术的新秀,最近也在业界和媒体界火爆出圈,所以想学习一下其技术。 大模型时代,学习知识,当然首先想到利用大模型,由于在过去一年,对DeepSeek使用不多,所以想和文新一言(4.0 Turbo)对比使用。 通过对比,针对同一个问题“DeepSeek发扬开源文化,将…