什么是 GitHub Actions ?

GitHub Actions 是一个 CI/CD(持续集成/持续部署)工具,GitHub 于 2018 年 10 月推出,正式版于 2019 年 11 月正式推出。

本文假设你已经有了自己的 hexo 静态博客,因此只简单介绍了自动化部署需要的设置。

创建代码仓库

1.我已经有了 tonywdy.github.io 仓库用来存放静态博客页面,仓库类型是 public

2.新建一个 myblog 仓库用来存放 Hexo 项目的源码,这个仓库的类型是 private



记得勾选 Add a Readme file 来完成 repository 的初始化

生成部署密钥

Git Bash Here中执行

# 生成秘钥
ssh-keygen -f github-deploy-key

一路按回车直到生成成功



会在当前目录中生成两个文件,私钥文件 github-deploy-key 和公钥文件 github-deploy-key.pub

配置部署密钥

私钥

复制 github-deploy-key 文件内容,在 myblog 仓库 Settings -> Secrets -> New repository secret 页面上添加。



1.在 Name 输入框填写 HEXO_DEPLOY_PRI

2.在 Value 输入框填写 github-deploy-key 文件内容



添加完成



另外建一个用于同步到 gitee 的私钥,用于存储 gitee 的密码

1.在 Name 输入框填写 GITEE_PASSWORD

2.在 Value 输入框填写 gitee 的密码

公钥

复制 github-deploy-key.pub 文件内容,在 wbsu2003.github.io 仓库 Settings -> Deploy keys -> Add deploy key 页面上添加。

1.在 Title 输入框填写 HEXO_DEPLOY_PUB

2.在 Key 输入框填写 github-deploy-key.pub 文件内容

3.勾选 Allow write access 选项



添加完成

同步代码

接下来把群晖上的 blog 提交到了 myblog 仓库

# 将 blog 目录变成 git 可以管理的仓库
git init # 把文件添加到版本库中
git add . # 把文件提交到仓库。引号内为提交注释
git commit -m '第一次提交' # 关联到远程库
git remote add origin https://github.com/wbsu2003/myblog.git # 或者
git remote add origin git@github.com:wbsu2003/myblog.git # 把本地库的内容推送到远程
## 第一次使用加上了-u参数,是推送内容并关联分支。
git push -u origin main # 下次直接提交
git push origin main # 强制更新
git push -f origin main

如果要同步到本地,可以执行下面的命令进行拉取

# 同步下拉代码
git pull origin main

创建 Workflow

在 myblog 根目录下创建 .github/workflows/deploy.yml 文件,目录结构如下。

myblog (repository)
└── .github
└── workflows
└── deploy.yml

deploy.yml 的内容如下

理论上只要修改环境变量 env 部分和 Install dependencies

# Action 的名字
name: Hexo Auto Deploy on:
# 触发条件1:main 分支收到 push 后执行任务。
push:
branches:
- main
# 触发条件2:手动按钮
workflow_dispatch: # 这里放环境变量,需要替换成你自己的
env:
# Hexo 编译后使用此 git 用户部署到 github 仓库
GIT_USER: wbsu2003
# Hexo 编译后使用此 git 邮箱部署到 github 仓库
GIT_EMAIL: wbsu2003@gmail.com
# Hexo 编译后要部署的 github 仓库
GIT_DEPLOY_REPO: wbsu2003/wbsu2003.github.io
# Hexo 编译后要部署到的分支
GIT_DEPLOY_BRANCH: master # Hexo 编译后使用此 gitee 用户部署到gitee仓库
GITEE_USER: wbsu2003
# Hexo 编译后要部署的 gitee 仓库
GITEE_DEPLOY_REPO: wbsu2003/wbsu2003
# Hexo 编译后要部署到的分支
GITEE_DEPLOY_BRANCH: master # 注意替换为你的 GitHub 源仓库地址
GIT_SOURCE_REPO: git@github.com:wbsu2003/wbsu2003.github.io.git
# 注意替换为你的 Gitee 目标仓库地址
GITEE_DESTINATION_REPO: git@gitee.com:wbsu2003/wbsu2003.git jobs:
build:
name: Build on node ${{ matrix.node_version }} and ${{ matrix.os }}
runs-on: ubuntu-latest
if: github.event.repository.owner.id == github.event.sender.id
strategy:
matrix:
os: [ubuntu-18.04]
node_version: [12.x] steps:
- name: Checkout
uses: actions/checkout@v2 - name: Checkout deploy repo
uses: actions/checkout@v2
with:
repository: ${{ env.GIT_DEPLOY_REPO }}
ref: ${{ env.GIT_DEPLOY_BRANCH }}
path: .deploy_git - name: Use Node.js ${{ matrix.node_version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node_version }} - name: Configuration environment
env:
HEXO_DEPLOY_PRI: ${{secrets.HEXO_DEPLOY_PRI}}
run: |
sudo timedatectl set-timezone "Asia/Shanghai"
mkdir -p ~/.ssh/
echo "$HEXO_DEPLOY_PRI" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
# coding 已取消同步
ssh-keyscan -t rsa e.coding.net >> ~/.ssh/known_hosts
ssh-keyscan -t rsa gitee.com >> ~/.ssh/known_hosts
git config --global user.name $GIT_USER
git config --global user.email $GIT_EMAIL - name: Install dependencies
run: |
npm install hexo-cli -g
npm install
# 根据你安装的组件进行安装
npm uninstall hexo-generator-index --save
npm install hexo-baidu-url-submit hexo-generator-index2 hexo-symbols-count-time hexo-blog-encrypt hexo-deployer-git --save
# 复制中文语言包,解决菜单英文的问题
cp zh-CN.yml node_modules/hexo-theme-next/languages/ - name: Deploy hexo
run: |
npm run deploy # 以下为发布到gitee
- name: Sync to Gitee
uses: wearerequired/git-mirror-action@master
env:
# 直接使用了 HEXO_DEPLOY_PRI
SSH_PRIVATE_KEY: ${{ secrets.HEXO_DEPLOY_PRI }}
with:
# GitHub 源仓库地址
source-repo: ${{ env.GIT_SOURCE_REPO }}
# Gitee 目标仓库地址
destination-repo: ${{ env.GITEE_DESTINATION_REPO }} - name: Build Gitee Pages
uses: yanglbme/gitee-pages-action@main
with:
# 你的 Gitee 用户名
gitee-username: ${{ env.GITEE_USER }}
# 注意在 Settings->Secrets 配置 GITEE_PASSWORD
gitee-password: ${{ secrets.GITEE_PASSWORD }}
# 你的 Gitee 仓库,仓库名严格区分大小写,请准确填写,否则会出错
gitee-repo: ${{ env.GITEE_DEPLOY_REPO }}
# 要部署的分支,默认是 master,若是其他分支,则需要指定(指定的分支必须存在)
branch: ${{ env.GITEE_DEPLOY_BRANCH }}

触发部署

我在 hexo 的菜单中建了一个 发文 菜单,地址指向了 myblog 仓库中的 _post 目录



只要将 md 文件通过 Add file –> Upload files 上传到仓库,就会自动触发自动部署

目前的发布时间都在 3 分钟以内

小结

本文是照着参考文档做的,如果您在实践中遇到什么问题,请多看看原文,不管怎么说,我是个学生都能成功,你也一样可以的

参考文档

利用 Github Actions 自动部署 Hexo 博客 | Sanonz

地址:https://sanonz.github.io/2020/deploy-a-hexo-blog-from-github-actions/


利用github Actions自动同步项目到gitee并自动部署Gitee Pages

地址:https://bore.vip/archives/github-actions-sync-to-gitee/

用GitHub Actions自动部署Hexo的更多相关文章

  1. 基于 Github Actions 自动部署 Hexo 博客

    前言 前不久使用了 Hexo 搭建独立博客,我是部署在我的腾讯云轻量应用服务器上的,每次都需要 hexo deploy 然后打包.上传.解压和刷新 CDN,非常麻烦.我的服务器配置也不高 2C2G 无 ...

  2. 使用 Github Actions 自动部署 Angular 应用到 Github Pages

    前言 最近在学习 Angular,一些基础的语法也学习的差不多了,就在 github 上新建了一个代码仓库,准备用 ng-zorro 搭个后台应用的模板,方便自己以后写些小东西时可以直接使用.前端项目 ...

  3. 5 分钟教你快速掌握 GitHub Actions 自动部署博客

    自从 GitHub 宣布 GitHub Actions 在平台上对所有开发人员和存储库可用以来,GitHub Actions 越来越受欢迎.很多第三方平台在生态系统中有速度等限制,将进一步推动开发人员 ...

  4. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(四)-使用Travis自动部署Hexo(2)

    前言 前面一篇文章介绍了Travis自动部署Hexo的常规使用教程,也是个人比较推荐的方法. 前文最后也提到了在Windows系统中可能会有一些小问题,为了在Windows系统中也可以实现使用Trav ...

  5. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(三)-使用Travis自动部署Hexo(1)

    前言 前面两篇文章介绍了在github上使用hexo搭建博客的基本环境和hexo相关参数设置等. 基于目前,博客基本上是可以完美运行了. 但是,有一点是不太好,就是源码同步问题,如果在不同的电脑上写文 ...

  6. 使用Travis CI自动部署Hexo到GitHub

    原文链接(转载请注明出处):使用Travis CI自动部署Hexo到GitHub 前言 使用 hexo + gitPages 搭建个人博客的人都知道,每当要发表一篇博文,第一步得手动使用 hexo g ...

  7. 使用Travis CI自动部署Hexo博客

    自从使用GitHub Pages和Hexo来发布博客之后,不得不说方便了许多,只需要几个简单的命令博客就发布了.但在不断的使用中发现每次的发布操作也挺耗时的. 我一般的操作是将平时整理好的md文件放到 ...

  8. 利用 Github Actions 自动更新 docfx 文档

    利用 Github Actions 自动更新 docfx 文档 Intro docfx 是微软出品一个 .NET API 文档框架,有一个理念是代码即文档,会根据项目代码自动生成 API 文档,即使没 ...

  9. 如何使用 Github Actions 自动抓取每日必应壁纸?

    如何白嫖 Github 服务器自动抓取必应搜索的每日壁纸呢? 如果你访问过必应搜索网站,那么你一定会被搜索页面的壁纸吸引,必应搜索的壁纸每日不同,自动更换,十分精美.这篇文章会介绍如何一步步分析出必应 ...

随机推荐

  1. django框架5

    内容概要 模板语法之过滤器(类似于内置函数) 模板语法之标签(类似于流程控制) 自定义过滤器.标签.inclusion_tag 模板的导入 模板的继承 注释语法补充 前期数据准备(测试环境搭建) al ...

  2. ASP已老,尚能饭否?

    我对ASP的感情,跟大海一样深.我用它实现了第一个动态网页,也用它做了毕业设计,毕业设计的名字是<毕业设计管理系统>(是不是有点绕).在 PHP 和 ASP.NET.Java 高歌猛进的今 ...

  3. 用console画条龙?

    相识 console一定是各位前端er最熟悉的小伙伴了,无论是console控制台,还是console对象,做前端做久了,打开一个网页总是莫名自然的顺手打开控制台,有些调皮的网站还会故意在控制台输出一 ...

  4. 训练一个图像分类器demo in PyTorch【学习笔记】

    [学习源]Tutorials > Deep Learning with PyTorch: A 60 Minute Blitz > Training a Classifier   本文相当于 ...

  5. HDFS数据平衡

    一.datanode之间的数据平衡 1.1.介绍 ​ Hadoop 分布式文件系统(Hadoop Distributed FilSystem),简称 HDFS,被设计成适合运行在通用硬件上的分布式文件 ...

  6. CesiumJS 2022^ 源码解读[0] - 文章目录与源码工程结构

    很高兴你能在浮躁的年代里还有兴趣阅读源代码,CesiumJS 至今已有十年以上,代码量也积累了三十多万行(未压缩状态). 我也很荣幸自己的文章能被读者看到,如果对你有帮助.有启发,点个赞就是对我最大的 ...

  7. Tapdata Cloud 2.1.4 来啦:数据连接又上新,PolarDB MySQL、轻流开始接入,可自动标记不支持的字段类型

      需求持续更新,优化一刻不停--Tapdata Cloud 2.1.4 来啦!   最新发布的版本中,在新增数据连接之余,默认标记不支持同步的字段类型,避免因此影响任务的正常运行. 更新速览 ① 数 ...

  8. Map集合概述和Map常用子类

    概述java.util.Map接口 Map<K,V> 有两个泛型 类型参数:K - 此映射所维护的键的类型V - 映射值的类型 特点:1.Map集合是双列集合,一个元素包含两个值,一个是k ...

  9. C# 11 的新特性和改进前瞻

    前言 .NET 7 的开发还剩下一个多月就要进入 RC,C# 11 的新特性和改进也即将敲定.在这个时间点上,不少新特性都已经实现完毕并合并入主分支 C# 11 包含的新特性和改进非常多,类型系统相比 ...

  10. SSH 多密钥配置

    目录 前言 一.SSH 是什么 二.密钥生成工具 三.密钥类型 四.本地配置 1.单密钥配置 2.多密钥配置 五.远端配置 1.GitHub/Gitee 2.服务器 前言 当我们从 GitHub 克隆 ...