使用github的actions自动部署文章

Table of Contents

Github Pages

记录使用github的actions自动化部署博客出现的一些问题

  1. 两个库,一个私有库存储博客源文件,另一个公开库xxxx.github.io

  2. 在setting > Developer settings > Personal access tokens申请一个token,放开repo所有权限和workflow

  3. 在私有库中setting > Secrets > Actions 添加令牌,设置名称 HUGO_CL_TOKEN,值为上一步的token

  4. 在repo中新建.github\workflows\xxx(自行设置).yml文件 (参考文章)

    name: HU CI # 名字自取
    
    on:
      push:
        branches:
          [ master ] # 这里的意思是当 main分支发生push的时候,运行下面的jobs
    
    jobs:
      deploy: # 任务名自取
        runs-on: ubuntu-latest	# 在什么环境运行任务
        steps:
          - name: Checkout
            uses: actions/checkout@v3	# 引用actions/checkout这个action,与所在的github仓库同名
            with:
              submodules: 'recursive'  # Fetch Hugo themes (true OR recursive) 获取submodule主题
              fetch-depth: 0    # Fetch all history for .GitInfo and .Lastmod
    
          - name: Setup Hugo	# 步骤名自取
            uses: peaceiris/actions-hugo@v2	# hugo官方提供的action,用于在任务环境中获取hugo
            with:
              hugo-version: 'latest'	# 获取最新版本的hugo
              # extended: true
    
          - name: Build
            run: hugo --minify     # 构建静态网页
    
          - name: Deploy
            uses: peaceiris/actions-gh-pages@v3	 # 一个自动发布github pages的action
            if: ${{ github.ref == 'refs/heads/master' }}
            with:
              # github_token: ${{ secrets.GITHUB_TOKEN }} 该项适用于发布到源码相同repo的情况,不能用于发布到其他repo
              external_repository: mugeliu/mugeliu.github.io	# 发布到哪个repo
              personal_token: ${{ secrets.HUGO_CL_TOKEN }}	# 发布到其他repo需要提供上面生成的personal access token
              publish_dir: ./public	# 注意这里指的是要发布哪个文件夹的内容,而不是指发布到目的仓库的什么位置,因为hugo默认生成静态网页到public文件夹,所以这里发布public文件夹里的内容
              publish_branch: master	# 发布到哪个branch
    
  5. 使用git push 提交更新到私有库后,actions会自动执行,更新到xxx.github.io存储库中,完成文章的更新

同步到vps

  1. 由于我之前在腾讯云服务器上搭建了自己的git服务,所以可以直接把源码push到vps对应的repo中

  2. 配置了git hook,把每次push到服务器的最新代码拉取一份到/var/www/blog目录中

    hook脚本配置在了.git/hooks/post-receive中,就简单的git clone 命令拉取,这一步会涉及到用户目录权限等问题。

  3. 然后在本地仓库更改增加origin的地址

    直接在.git/config中增加[remote “origin”]地址即可。这样操作的缺陷就是需要本地先生成静态文件才可以,后续考虑借助actions实现