什么是 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中plt.plot()、plt.scatter()和plt.legend函数的用法示例

    参考:http://www.cppcns.com/jiaoben/python/471948.html https://blog.csdn.net/weixin_44825185/article/de ...

  2. 菜鸟学git的基本命令及常见错误

    Git init //在当前项目工程下履行这个号令相当于把当前项目git化,变身!\ git config --global user.name "xxx" # 配置用户名 git ...

  3. TypeScript 泛型(generic) 入门介绍

    TypeScript 泛型函数 下面来创建第一个使用泛型的例子:identity函数.这个函数会返回任何传入它的值.你可以把这个函数当成是echo命令.不用泛型的话,这个函数可能是下面这样: func ...

  4. 在jupyternotebook中写C/C++

    在jupyter notebook中写C/C++,最大的好处就是不用写main()函数,直接调用写好的函数即可执行. #include<stdio.h> int sum(int a,int ...

  5. bat-使用bat安装jdk和配置环境变量

    文件路径 @echo off Setlocal enabledelayedexpansion @REM vscode中自动开启延迟环境变量扩展, %~d0 cd %~dp0 @REM dir echo ...

  6. Python基础教程:模块重载的五种方法

    环境准备 新建一个 foo 文件夹,其下包含一个 bar.py 文件 $ tree foo foo └── bar.py 0 directories, 1 file bar.py 的内容非常简单,只写 ...

  7. MAC帧的格式&&wireshark分析MAC帧

    MAC帧的格式 MAC帧较为简单,由五个字段组成 目的地址:6字节 源地址:6字节 类型字段:2字节,用来标志上一层使用的是什么协议,以便把收到的MAC地址帧的数据交给上一层的这个协议. 数据字段:其 ...

  8. RocketMQ 集群的搭建部署 以及rocketmq-console-ng仪表台的安装部署

    在 RocketMQ 主要的组件如下. NameServerNameServer 集群,Topic 的路由注册中心,为客户端根据 Topic 提供路由服务,从而引导客户端向 Broker 发送消息.N ...

  9. 项目中使用@Transactional需要注意的点

    项目如果是Spring Boot.或者Spring Cloud,切记需要在启动类上加入@EnableTransactionManagement该注解.否则事务不生效. @Transactional是一 ...

  10. 多线程与高并发(一)—— 自顶向下理解Synchronized实现原理

    一. 什么是锁? 在多线程中,多个线程同时对某一个资源进行访问,容易出现数据不一致问题,为保证并发安全,通常会采取线程互斥的手段对线程进行访问限制,这个互斥的手段就可以称为锁.锁的本质是状态+指针,当 ...