hexo-CI自动部署

2022-06-15 19:52:37 浏览数 (1)

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设计思路:
代码语言:javascript复制
a.拉取指定分支代码(gh-pages)
b.设定node.js环境、构建项目模块依赖缓存
c.服务器验证并执行指令部署
  • action配置参考

​ 可先从Github Actions仓库、Github Marketplace中搜索可用的Actions,在此基础上造轮子

构建配置参考

  • 采用SSH方式推送指定仓库,通过指令生成新的SSH秘钥
代码语言:javascript复制
# 在当前目录生成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

根据文档指示生成

| ​ |

  • 部署操作部分配置环境变量
代码语言:javascript复制
- 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

0 人点赞