前言

最近学习了一点git打开了新世界的大门,git是一个很适合多人协作的工具,就像是当前的这个博客原来我是在本地的,用git可以做版本控制同时可以可以让学姐参与进来一起写博客。

用git之后同时也带来了一个问题,就是当分支合并的时候由谁来部署。

这篇文章就是关于如何自动化部署博客。

workflow

我们先来谈谈当前的工作流。

当前的仓库是分了3个分支,分别是:

  1. master 部署的分支
  2. yafa 我的开发分支
  3. chris 学姐的开发分支

当一片文章完成之后或者是修改过后提交到对应的开发分支,然后合并到master分支,合并之后推送到github仓库。之后就会触发github action构建并部署。总体的工作流如下:

Deployment Hugo Blog Github Action

Github Actions

这里用到的是Github Actions,当推送到master分支的时候会触发动作,并且按照Github Actions中的内容进行构建和部署。

这次用的是私有仓库Github现在私有仓库是有2000分钟的Github Actions使用额度,对于我这种只是更新博客来说绰绰有余了,之后也会考虑利用这个做点其他的项目。

在网站的源码仓库创建文件夹:

1
mkdir -pv  .github/workflows

创建并编辑.github/workflows/deploy_hugo_site.yml文件

1
nano -w .github/workflows/deploy_hugo_site.yml

内容如下:

 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
35
36
37
38
# .github/workflows/deploy_hugo_site.yml
name: Deploy Hugo Site

on:
  push:
    branches:
    - master

jobs:
  deploy:

    # build agent
    runs-on: ubuntu-18.04
    steps:
    - uses: actions/checkout@v2

    # install / setup hugo
    # https://github.com/peaceiris/actions-hugo
    - name: Setup Hugo
      uses: peaceiris/actions-hugo@v2
      with:
        hugo-version: '0.79.1'

    # build site
    - name: Build
      run: |
        git submodule update --init
        hugo --minify        

    # deploy to destination repo
    # https://github.com/peaceiris/actions-gh-pages
    - name: Deploy
      uses: peaceiris/actions-gh-pages@v3
      with:
        deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
        external_repository: yafa-xena/yafa-xena.github.io
        publish_branch: main
        publish_dir: ./public

保存并退出。

这里如果你要使用的话需要注意修改以下部分:

  • yafa-xena/yafa-xena.github.io 这里修改成你的仓库地址
  • main 这里修改成你仓库对应的主分支比如说master

创建SSH KEY

这里需要创建一对ssh密钥用于Github Action 构建完成之后推送到yafa-xena.github.io这个公开仓库。

1
ssh-keygen -t rsa -C "hugo_deploy" -b 4096 -f ~/.ssh/hugo_deploy

注意不要输入密码,这里需要免密执行。

接下来我们需要将这两个key放到对应的位置。

首先在源仓库添加Secret:

sources repo secret 选择添加,注意这里要填入的是私钥的内容,关于这部分内容可以通过:

1
cat .ssh/hugo_deploy

这条命令查看,将内容复制粘贴到新加的key中。

接下来是在yafa-xena.github.io这个仓库中添加部署Key也就是公钥:

Depoly github.io Key

测试

在源码仓库随意创建一个文件,然后部署提交到master分支之后应该就可以看到触发构建动作了。

后记

通过这次的自动化构建工作让我体验到了DevOps的冰山一角,接下来我会继续探索Github Actions看看还可以怎样高效利用。

参考资料