hexo-CI自动部署
构建说明
hexo博客项目已经构建有好一段时间了,一般都是直接通过指令进行发布,为了适配在不同地方编辑笔记快速直接发布可采用CI的方式进行自动部署,此处介绍的是通过GitHab Actions Github Pages的方式进行发布(分仓库存储:用于区分版本源文件管理&网站发布版本管理),随后则可直接通过typora编辑md文件并上传到指定仓库路径,自动部署网站内容
Github Page:是github
网站提供的静态网站服务
travis: 是在线托管的CI
服务,用Travis
来进行持续集成,参考文章
github Actions:借助Github原生CI/CD构建自动部署
- 原有hexo部署三连:
原有构建思路:A仓库管理源码提交信息、B仓库管理构建后的代码版本信息
代码语言:javascript复制hexo clean & hexo g & hexo deploy
- 分支推送 CI自动部署
基于上述思路是将source和发布仓库进行分离,可考虑在源码仓库下借助github pages CI自动集成部署环境,构建工作流部署信息(可同源仓库发布或者跨仓库发布)
代码语言:javascript复制 CICD概念:「持续集成(Continuous Integration)」、「持续交付(Continuous Delivery)」、「持续部署(Continuous Deployment)」
代码语言:javascript复制# 本地编辑文件推送到指定的分支
# 构建CI环境自动部署
1.github Actions 跨仓库发布
在源码仓库构建配置文件:.github/.workflows/autoDeploy.yml
- action设计思路:
a.拉取指定分支代码(gh-pages)
b.设定node.js环境、构建项目模块依赖缓存
c.服务器验证并执行指令部署
- action配置参考
可先从Github Actions仓库、Github Marketplace中搜索可用的Actions,在此基础上造轮子
构建配置参考
- 采用SSH方式推送指定仓库,通过指令生成新的SSH秘钥
# 在当前目录生成hexo-deploy-key私钥文件和hexo-deploy-key.pub公钥文件
ssh-keygen -f hexo-deploy-key -C "username.github.io"
A仓库存储源文件内容,B仓库存储发布内容,则在B仓库中配置公钥文件,A仓库中配置私钥文件
B仓库配置:Settings -> Deploy keys -> 添加Deploy key -> 填充 hexo-deploy-key.pub文件内容,勾选Allow write access
配置
A仓库配置:Settings -> Secrets -> Actions -> 添加属性配置HEXO_DEPLOY_KEY_PRI
,填充hexo-deploy-key私钥文件内容
- autoDeploy.yml文件编辑
其构建原理为监听指定分支变化,通过checkout分支、访问目录、部署环境并执行hexo三连。除却github仓库访问权限,其他相关的配置均引用代码中的内容(和本地发布操作一样,只不过是让机器替代执行)
代码语言:javascript复制# 文件路径 .github/workflows/autoDeploy.yml
name: CI自动部署
on:
push:
branches: [dev] # 当push指定分支操作触发时执行自动部署
jobs:
hexo-deployment:
runs-on: ubuntu-latest
env:
TZ: Asia/Shanghai
steps:
- name: 1.checkout分支
uses: actions/checkout@v2
with:
ref: dev
# 如果主题不是通过git submodule方式引入则不需要配置
- name: extend:Checkout主题仓库
uses: actions/checkout@v2
with:
repository: holic-x/hexo-theme-butterfly # 主题仓库位置(可以指向自己fork的项目)
ref: dev-custom # 拉取分支
path: themes/butterfly # 拉取内容到指定位置
- name: 2.node环境安装
uses: actions/setup-node@v1
with:
node-version: '12.x'
- name: 3.缓存 Hexo 模块,提高构建速度
uses: actions/cache@v1
id: cache
with:
path: node_modules
key: ${{runner.OS}}-${{hashFiles('**/package-lock.json')}}
- name: 4.安装依赖
if: steps.cache.outputs.cache-hit != 'true'
run: |
npm install --save
- name: 5.服务器验证
env:
ACTION_DEPLOY_KEY: ${{ secrets.HEXO_DEPLOY_KEY_PRI }}
run: |
sudo timedatectl set-timezone "Asia/Shanghai"
mkdir -p ~/.ssh/
echo "$ACTION_DEPLOY_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts # 填写服务器IP(如果是自建Git仓库则填写相应的服务器IP)
- name: 6.三连操作部署
env:
BAIDU_TOKEN: ${{ secrets.BAIDU_TOKEN }} # 设置环境变量BAIDU_TOKEN
BING_TOKEN: ${{ secrets.BING_TOKEN }} # 设置环境变量BING_TOKEN
GIT_NAME: ${{ secrets.GIT_NAME }}
GIT_EMAIL: ${{ secrets.GIT_EMAIL }}
run: |
git config --global user.name ${GIT_NAME} # GitHub用户名
git config --global user.email ${GIT_EMAIL} # GitHub用户名邮箱
npx hexo clean && npx hexo g && npx hexo deploy
或者可以直接引用现成的轮子:
a.部署到Github Pages:theme-keep/hexo-deploy-github-pages-action
b.部署到腾讯云服务器:easingthemes/ssh-deploy
- 检查_config.yml文件
部署内容格式参考如下所示
代码语言:javascript复制deploy:
type: git
repository: git@github.com:username/username.github.io.git
branch: master
name: username
email: username@gmail.com
2.CI引入自动提交URL至搜索引擎
结合hexo-submit-urls-to-search-engine插件,参考SEO优化说明
在Settings->Secrets->Actions中配置属性,随后添加一个步骤用于发布
参数 | 说明 |
---|---|
BAIDU_TOKEN | 根据文档指示生成 |
BING_TOKEN | 根据文档指示生成 |
| |
- 部署操作部分配置环境变量
- name: 6.三连操作部署
env:
BAIDU_TOKEN: ${{ secrets.BAIDU_TOKEN }} # 设置环境变量BAIDU_TOKEN
BING_TOKEN: ${{ secrets.BING_TOKEN }} # 设置环境变量BING_TOKEN
GIT_NAME: ${{ secrets.GIT_NAME }}
GIT_EMAIL: ${{ secrets.GIT_EMAIL }}
run: |
git config --global user.name ${GIT_NAME} # GitHub用户名
git config --global user.email ${GIT_EMAIL} # GitHub用户名邮箱
npx hexo clean && npx hexo g && npx hexo deploy