• 基于 Github Actions 自动部署 Hexo 博客


    前言

    前不久使用了 Hexo 搭建独立博客,我是部署在我的腾讯云轻量应用服务器上的,每次都需要 hexo deploy 然后打包、上传、解压和刷新 CDN,非常麻烦。我的服务器配置也不高 2C2G 无法安装 Jenkins,所以采用了比较简单和免费的 Github Actions 来进行打包、上传。然后我自己写了一个 Agent 来做解压和刷新 CDN 的工作,整套流程完全自动化。

    如果 Hexo 博客是放在 OSS 存储里的,比如腾讯云 COS,可以不使用 Agent,直接通过 Github Actions 上传。

    image-20220707130528538

    Hexo Deploy Agent

    Hexo 部署 Agent,基于 Github Actions 可实现完全自动化部署 Hexo 博客,每次提交都会自动打包、部署、更新和刷新 CDN 缓存。

    特性:

    • Golang 编写,资源占用低,能适应低配服务器

    • 支持 Github Action 或者 Jenkins 等自动化工具

    • 通过 CURL 上传部署包

    • 解压、动态更新网站文件

    • 目录级别刷新 CDN(目前仅支持腾讯云)

    • 支持部署消息推送(目前仅支持钉钉)

    Demo: https://xcmaster.com/

    开源地址:https://github.com/stulzq/hexo-deploy-agent

    刷新 CDN 的目的:因为 hexo 是以生成静态文件部署的,CDN 默认是全部缓存了的,如果有变更需要主动刷新,一般采用目录刷新的方式。

    快速开始

    部署 Agent

    部署 Agent 需要虚拟机或者轻量应用服务器,支持二进制和 Docker 方式运行

    二进制

    
    export agent_version=v0.2.0
    
    wget https://github.com/stulzq/hexo-deploy-agent/releases/download/$hexo_version/hexo_deploy_agent_$(agent_version)_linux_amd64.tar.gz
    
    tar -xzvf hexo_deploy_agent_$(agent_version)_linux_amd64.tar.gz
    
    cd hexo_deploy_agent_$(agent_version)_linux_amd64
    
    # 修改配置 conf/config.yml
    
    chmod +x hexo_deploy_agent
    ./hexo_deploy_agent
    
    

    Docker

    mkdir -p /data/hexo-deploy-agent/conf
    
    curl https://raw.githubusercontent.com/stulzq/hexo-deploy-agent/main/conf/config.yml -o /data/hexo-deploy-agent/config.yml
    
    # 修改配置 /data/hexo-deploy-agent/config.yml
    
    docker run --name hexo-deploy-agent \
      -v /data/hexo-deploy-agent/conf:/app/conf \
      -v /data/hexo-deploy-agent/logs:/app/logs \
      -d stulzq/hexo-deploy-agent:v0.2.0
    
    

    修改配置

    log:
      level: Debug # 日志级别
    
    deploy:
      blog_dir: /wwwroot/blog # 网站根目录
      cdn:
        enable: false # 是否启用腾讯云 cdn 目录刷新 https://console.cloud.tencent.com/cdn/refresh
        accessKey: # 腾讯云 ak & sk https://console.cloud.tencent.com/cam/capi
        secretKey:
        flushType: flush
        refreshPaths:
          - https://xcmaster.com/ # 刷新路径
      dingtalk:
        enable: false # 是否发送钉钉机器人消息
        url: # 钉钉机器人 url
    

    Github Actions 配置

    在你的博客根目录下新建文件夹

    mkdir -p .github/workflows
    cd .github/workflows
    

    新建配置文件

    touch deploy.yml
    

    添加配置

    name: Deploy
    
    on:
      push:
        branches:
          - master
    
    jobs:
      build:
        name: build and package
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v3
          - uses: actions/setup-node@v3
            with:
              node-version: 16
              registry-url: https://registry.npmjs.org/
              cache: 'npm'
          - name: Install dependencies
            run: npm ci
          - name: Deploy
            run: npm run deploy
          - name: Package
            run: |
              mkdir /home/runner/work/release
              cd public
              zip -r /home/runner/work/release/site.zip ./*
              cd ../
          - name: Upload artifacts
            uses: actions/upload-artifact@v2
            with:
              name: site
              path: /home/runner/work/release
          - name: Clean
            run: |
              rm -rf public
              rm -rf /home/runner/work/release
    
      publish:
        name: publish blog
        needs: build
        runs-on: ubuntu-latest
        steps:
          - name: Download build artifacts
            uses: actions/download-artifact@v1
            with:
              name: site
          - name: upload
            env:
              UPLOAD_URL: ${{ secrets.UPLOAD_URL }}
            run: curl -X POST -F "f=@site/site.zip" $UPLOAD_URL
    
    
    折叠

    该配置依赖 Github Action Secret

    进入项目仓库的 Settings -> Secrets -> Actions 新建一个 Secret:

    • 名称: UPLOAD_URL
    • 值:http://<agentIp>:<agentPort>/deploy/upload 示例:http://127.0.0.1:9190/deploy/upload

    可以直接使用国内云服务器,POST 部署包速度也是很快的

    配置完成!

    其他项目

  • 相关阅读:
    Kafka系列之:APIS
    day071:网络编程(IP、端口、协议)、InetAddress类、UDP协议、TCP协议
    快速搭建云原生开发环境(k8s+pv+prometheus+grafana)
    Matlab之绘制地球
    AlexNet网络的搭建
    计算并输出杨辉三角(C语言)
    定时任务实现方案总结
    springboot项目配置flyway菜鸟级别教程
    封装window10-21H1踩的坑,无法分析或处理pass[specialize]应答文件
    JS(Dom操作)第十八课
  • 原文地址:https://www.cnblogs.com/stulzq/p/16454312.html