IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    利用GitHub Actions实现Blog自动部署与发布

    Timothy发表于 2022-09-13 11:21:13
    love 0

    GitHub Actions是GitHub官方推出的持续集成服务。通过GitHub Actions可以为你的项目提供持续构建,测试,程序打包和部署一条龙服务。根据官方资料介绍,GitHub Actions为用户提供虚拟服务器环境,硬件规格为:

    • 2-core CPU
    • 7GB RAM
    • 14GB SSD

    支持的操作系统包括:

    • Windows Server 2019
    • Ubuntu 18.04
    • Ubuntu 16.04
    • macOS X Catalina 10.15

    正好,我基于Hexo的blog仓库也是放在GitHub,这样的虚拟环境配置用来持续构建和自动部署blog再合适不过了,还可以避免每次本地部署重复输入命令和CPU风扇狂转的困扰。

    配置过程

    环境介绍

    我的blog是基于Hexo的,所有的Markdown文件托管在GitHub的私有仓库中,另外,构建生成的静态页面是托管在另外一台阿里云国际版的VPS主机上。

    利用GitHub Actions需要达成的目标就是:每次提交或者更改新的blog文章,触发GitHub Actions进行构建,构建出静态页面后,直接发布到VPS上。

    生成部署专用SSH密钥对

    首先需要生成一对新的SSH密钥,注意这对密钥不能有密码保护,因为整个构建过程应该是自动的,有密码保护的密钥对会中断构建过程。

    将这对密钥的public key添加到托管blog的VPS对应账户的~/.ssh/authorized_keys中。然后在Blog仓库的Settings->Secrets里添加刚刚生成的私钥,名称为BLOG_DEPLOY_KEY。这样做的目地是保护私钥不被泄漏,这样在GitHub Actions中不用以明文的方式填入私钥。

    https://xiaozhou.net/pics/actions/1.png

    创建GitHub Actions

    以我的blog为例,在blog仓库的Actions选项卡下点击新建workflow,填入如下配置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    name: HEXO CI

    on: [push]

    jobs:
    build:
    runs-on: ubuntu-latest
    strategy:
    matrix:
    node-version: [10.x]

    steps:
    - uses: actions/checkout@v1

    - uses: webfactory/ssh-agent@v0.2.0
    with:
    ssh-private-key: |
    ${{ secrets.BLOG_DEPLOY_KEY }}
    - name: Use Node.js ${{ matrix.node-version }}
    uses: actions/setup-node@v1
    with:
    node-version: ${{ matrix.node-version }}

    - name: Configuration environment
    run: |
    ssh-keyscan -p 22833 xiaozhou.net >> ~/.ssh/known_hosts

    - name: Install dependencies
    run: |
    npm i -g hexo-cli
    npm i
    - name: Deploy hexo
    run: |
    hexo g -d

    构建过程中有几个要点:

    • 构建环境基于Ubuntu,并使用node 10.x
    • 构建中用到了webfactory/ssh-agent用来缓存部署blog所用到的私钥
    • 每次构建触发的时候,先初始化基于node 10.x的环境
    • 扫描目标VPS的公钥,并保存到虚拟环境的~/.ssh/known_hosts中,这样可以避免部署时候要求用户输入确认的步骤。
    • 构建前先初始化好hexo的环境,并安装所有依赖
    • 最后,进行静态页面的构建并直接发布

    一切准备就绪,为了测试blog的自动构建和发布,可以尝试新建或者修改一篇blog post,然后在仓库的Actions中,就能看到自动触发的构建流程了。

    https://xiaozhou.net/pics/actions/2.png

    https://xiaozhou.net/pics/actions/3.png



沪ICP备19023445号-2号
友情链接