什么是 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. python 的 @staticmethod和@classmethod和普通实例方法

    参考:https://www.huaweicloud.com/articles/12607084.html https://blog.csdn.net/qq_30708445/article/deta ...

  2. kali渗透测试阅读目录

    一.渗透测试介绍 渗透测试介绍及渗透环境配置 二.信息收集 kali 信息收集 三.漏洞扫描 kali 漏洞扫描 四.漏洞利用 kali msf漏洞利用

  3. VisionPro · C# · 界面显示视觉结果图像

    程序界面通过 CogRecordDisplay 控件显示视觉运行结果图像. 按指定图像显示,代码如下: using System; using System.Windows.Forms; using ...

  4. Python自动化办公:将文本文档内容批量分类导入Excel表格

    序言 (https://jq.qq.com/?_wv=1027&k=GmeRhIX0) 它来了,它又来了. 本文实现用Python将文本文件自动保存到Excel表格里面去. 需求 将锦江区.t ...

  5. HashSet 添加/遍历元素源码分析

    HashSet 类图 HashSet 简单说明 HashSet 实现了 Set 接口 HashSet 底层实际上是由 HashMap 实现的 public HashSet() { map = new ...

  6. java-Stream的总结

    JAVA中的Stream 01.什么是Stream Stream是JDK8中引入,Stream是一个来自数据源的元素序列并支持聚合操作.可以让你以一种声明的方式处理数据,Stream 使用一种类似用 ...

  7. 【python】下载中国大学MOOC的视频

    [python]下载中国大学MOOC的视频 脚本目标: 输入课程id和cookie下载整个课程的视频文件,方便复习时候看 网站的反爬机制分析: 分析数据包的目的:找到获取m3u8文件的路径 1. 从第 ...

  8. IIS部署的H5的单页面跳转的配置

    <?xml version="1.0" encoding="UTF-8"?><configuration> <system.web ...

  9. Solution -「CF520E」Pluses everywhere

    Step 1. 转化一步题目:考虑有 \(n\) 个小球,每个小球有 \(a_i\) 的价值,\(m\) 个板子,把板子插进小球间的空隙,且不能插在第 \(1\) 个球之前与第 \(n\) 个球之后. ...

  10. 【中国象棋人机对战】引入了AI算法,学习低代码和高代码如何混编并互相调用

    以低代码和高代码(原生JS代码)混编的方式引入了AI算法,学习如何使用表达式调用原生代码的.整个过程在众触低代码应用平台进行,适合高阶学员. AI智能级别演示 AI算法分三个等级,体现出来的智能水平不 ...