1. 为什么我要持续部署
通过Hexo
搭建的个人博客,虽然很强大、很方便,输入hexo clean&&hexo g -d
就能快速生成静态页面并部署访问。但Hexo
生成的是静态页面,无后端,这些工作都是在本地的电脑上操作的,如果更换电脑了,还需要在 github 上冲下拉取源代码,重新搭建环境再部署。若电脑不在身边想要随时编辑文章,就有点困难了。另外,每次在本机部署完,还要将源代码push
到仓库。
这样操作显然是有些繁琐的。好在Github Actions
提供了解决方案,可以为仓库添加自动化的操作,将Hexo
博客源代码(不是生成的public
文件夹,是整个项目代码)放在 Github 上,编写Github Actions
的工作流程后,每次只需将本地push
到Github
,Github Actions
会帮我们自动完成所有的部署工作。
我的博客是部署到阿里云OSS
,支持 CDN 加速,全站开启HTTPS
访问,关键是费用超级低!
2. 总体部署思路
- Hexo 博客项目上传到 Github
- 在阿里云
OSS
中创建Bucket
,并配置为静态页面托管 - 拿到
Bucket
的AccessKeyId
和AccessKeySecret
,配置进 Github 仓库里 - 编写
Github Actions
工作流程 - 本地触发
push
命令时,Github Actions
开始自动部署
3. 实现部署过程
3.1 上传 Hexo 项目
这个就不用说了吧,在 Github 上创建个私有仓库,将本地的 hexo 博客项目源代码上传上去。
另外说一点,我删除了.gitignore
文件,将项目的全部文件都上传到仓库了(包括node_modules
等等),这样每次Github Actions
每次在部署时,不用重新下在所需的依赖包了,可能速度会快一点吧(我也不知道会不会快一点)。但是第一次 Push 时,所需的时间很长,自行考虑要不要这样做。
3.2 创建Bucket
在阿里云OSS
中创建Bucket
,注意创建的时候,读写权限
一定要改为公共读
。
创建完成后,在基础设置
中,找到静态页面
,作如下配置:
随后可以配置该Bucket
访问的域名,配置 CDN 加速,并上传HTTPS 证书
。点击传输管理
:
3.3 获取AccessKey
将鼠标放到阿里云页面右上角的头像,点击AccessKey
管理,获取AccessKeyId
和AccessKeySecret
,推荐使用子用户AccessKey
。
因为AccessKey
权限很高,直接将其暴露在代码中非常危险,所以将其配置到 Github 仓库的Secrets
中,相当于作为常量
使用。
在存储 Hexo 源代码的仓库中点击Settings
,找到Secrets
,添加两项。名称为KEY
和SECRET
,值分别为AccessKeyId
和AccessKeySecret
。
3.4 编写工作流程
在存储 Hexo 源代码的仓库中点击Actions
,点击set up a workflow yourself
:
将下面所有代码复制到代码区,并根据注释稍作修改:
# workflow name
name: Hexo Blog CI
# 在main分支上有push命令时触发该流程
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository master branch
uses: actions/checkout@master
- name: Setup Node.js 10.x
uses: actions/setup-node@master
with:
node-version: '10.x'
- name: Setup Hexo Dependencies
run: |
# npm install # 若没有上传依赖包,则把这行的注释解除
npm install -g hexo-cli
hexo clean
hexo generate
gulp # 我安装了压缩静态文件的插件,若没有安装,将这行删除
- name: setup aliyun oss
uses: manyuanrong/setup-ossutil@master
with:
endpoint: oss-cn-hangzhou.aliyuncs.com
access-key-id: ${{ secrets.KEY }} # 刚刚配置过的AccessKeyId
access-key-secret: ${{ secrets.SECRET }} # 刚刚配置过的AccessKeySecret
- name: cp files to aliyun
run: ossutil cp -rf public oss://xxxxx/ # 将xxxxx改为创建的Bucket名称,-rf表示覆盖
完成后点击Start commit
按钮。
3.5 完成!
随后Github Actions
便开始第一次工作,出现绿色勾勾
则表示部署成功!快打开域名查看吧~
因为刚刚在远程仓库创建了main.yml
,可以先在本地执行git pull
,同步远程最新的文件,再进行push
。
4. 如何远程使用
完成部署后,我们就可以在脱离本地项目,在远程仓库发布、修改文章啦,即使电脑不在身边也不怕!
可以借助[HexoPlusPlus]实现一个类似后台的页面,在这上面发布新文章、修改文章等操作。
☑ 当然了,也可以直接在 Github 仓库中,管理文章。
5. 另外工作
如果电脑在身边,我还是习惯在本地管理博客,再push
,虽然不用自己输入hexo clean&&hexo g -d
,但是要自己输入git add .
、git commit -m 'xxx'
、git push
,还是太麻烦了。
因为实在太懒,写了一个.BAT
脚本文件,放在项目中。
@echo off
git pull
git add .
git commit -m 'WIN10'
git push
这样我在本地修改完后,只需双击运行该脚本即可,自动 push 到仓库,仓库又自动完成部署!