本文将介绍如何在GitHub中部署静态博客,并尽可能自动化改流程

前置条件

  • 独立域名
  • 远程Linux服务器
  • GitHub账户
  • Hugo 静态博客生成工具
  • Jenkins 简化部署流程工具

生成博客并部署到GitHub Page

这一步网上教程比较多,这里就不再赘述,初次部署 hugo 博客时参考官方教程

自动化部署

为了简化在多个PC上的博客同步问题,可以将博客统一部署到一个远程服务器中。这里使用Jenkins来完成自动化部署博客。

在服务器上克隆博客源码

git clone --recursive [git url]

使用 –recursive 是由于博客中使用了Git Submodule功能,可以将博客源码和生成的静态博客分别部署到不同的仓库或同一个仓库不同分支.

为了备份博客源码我们在Github的同一仓库中使用dev分支来存储源码,master分支存储public/下生成的静态博客内容。

  - master  静态博客
  - dev     源码

Jenkins设置

  • 新建部署博客的构建流程

    # Deploy blog
    cd [blog path]
    echo "Deploying updates to GitHub..."
    # Build the project.
    hugo # if using a theme, replace with `hugo -t <YOURTHEME>`
    # Go To Public folder
    cd public
    # Add changes to git.
    git add .
    # Commit changes.
    msg="rebuilding site `date`"
    git commit -m "$msg"
    # Push source and build repos.
    git push origin master
    
    • 新建博客备份的构建流程

      # Backup site
      cd [blog path]
      echo "Backup site to GitHub.."
      # Add changes to git.
      git add .
      # Commit changes.
      msg="backup site `date`"
      git commit -m "$msg"
      # Push source and build repos.
      git push origin dev
      

远程编辑内容

推荐使用VSCode,在扩展中安装官方远程开发环境remote,本地使用ssh-copy-id免密登陆服务器,VSCode中使用Remote-SSH配置SSH属性后连接至远程环境即可。

FAQ

删除特定Submodule

来自 Remove Submodule

rm .gitmodules
rm -rf path_to_submodule/
git rm --cached path_to_submodule (目录后不要添加/)
rm -rf .git/modules/<submodule name>

删除所有Submodule

来自 Remove Submodule

git config --remove-section submodule."Complete submodule name"

添加Submodule

git submodule add -b [branch name] [email protected]:<USERNAME>/<USERNAME>.github.io.git [dir name]

从远程分支恢复submodule

具体可以参考 Git教程

初次clone后submodule目录是空的,需要手动拉取数据

git submodule init
git submodule update

更快捷的方式是在clone时添加参数

git clone --recursive [git url]