Github Actions自动部署hexo博客到阿里云OSS

1. 为何我要持续部署

经过Hexo搭建的我的博客,虽然很强大、很方便,输入hexo clean&&hexo g -d就能快速生成静态页面并部署访问。但Hexo生成的是静态页面,无后端,这些工做都是在本地的电脑上操做的,若是更换电脑了,还须要在 github 上冲下拉取源代码,从新搭建环境再部署。若电脑不在身边想要随时编辑文章,就有点困难了。另外,每次在本机部署完,还要将源代码push到仓库。node

这样操做显然是有些繁琐的。好在Github Actions提供了解决方案,能够为仓库添加自动化的操做,将Hexo博客源代码(不是生成的public文件夹,是整个项目代码)放在 Github 上,编写Github Actions的工做流程后,每次只需将本地pushGithubGithub Actions会帮咱们自动完成全部的部署工做。git

个人博客是部署到阿里云OSS,支持 CDN 加速,全站开启HTTPS访问,关键是费用超级低!github

2. 整体部署思路

  • Hexo 博客项目上传到 Github
  • 在阿里云OSS中建立Bucket,并配置为静态页面托管
  • 拿到BucketAccessKeyIdAccessKeySecret,配置进 Github 仓库里
  • 编写Github Actions工做流程
  • 本地触发push命令时,Github Actions开始自动部署

3. 实现部署过程

3.1 上传 Hexo 项目

这个就不用说了吧,在 Github 上建立个私有仓库,将本地的 hexo 博客项目源代码上传上去。npm

另外说一点,我删除了.gitignore文件,将项目的所有文件都上传到仓库了(包括node_modules等等),这样每次Github Actions每次在部署时,不用从新下在所需的依赖包了,可能速度会快一点吧(我也不知道会不会快一点)。可是第一次 Push 时,所需的时间很长,自行考虑要不要这样作。gulp

3.2 建立Bucket

在阿里云OSS中建立Bucket,注意建立的时候,读写权限必定要改成公共读ubuntu

建立完成后,在基础设置中,找到静态页面,做以下配置:后端

随后能够配置该Bucket访问的域名,配置 CDN 加速,并上传HTTPS 证书。点击传输管理bash

3.3 获取AccessKey

将鼠标放到阿里云页面右上角的头像,点击AccessKey管理,获取AccessKeyIdAccessKeySecret,推荐使用子用户AccessKeymarkdown

由于AccessKey权限很高,直接将其暴露在代码中很是危险,因此将其配置到 Github 仓库的Secrets中,至关于做为常量使用。hexo

在存储 Hexo 源代码的仓库中点击Settings,找到Secrets,添加两项。名称为KEYSECRET,值分别为AccessKeyIdAccessKeySecret

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 到仓库,仓库又自动完成部署!