使用github的actions自动部署文章
Table of Contents
Github Pages
记录使用github的actions自动化部署博客出现的一些问题
-
两个库,一个私有库存储博客源文件,另一个公开库
xxxx.github.io
-
在setting > Developer settings > Personal access tokens申请一个token,放开repo所有权限和workflow
-
在私有库中setting > Secrets > Actions 添加令牌,设置名称 HUGO_CL_TOKEN,值为上一步的token
-
在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
-
使用git push 提交更新到私有库后,actions会自动执行,更新到xxx.github.io存储库中,完成文章的更新
同步到vps
-
由于我之前在腾讯云服务器上搭建了自己的git服务,所以可以直接把源码push到vps对应的repo中
-
配置了git hook,把每次push到服务器的最新代码拉取一份到/var/www/blog目录中
hook脚本配置在了.git/hooks/post-receive中,就简单的git clone 命令拉取,这一步会涉及到用户目录权限等问题。
-
然后在本地仓库更改增加origin的地址
直接在.git/config中增加[remote “origin”]地址即可。这样操作的缺陷就是需要本地先生成静态文件才可以,后续考虑借助actions实现