本博客暂时没有公开 git 仓库的打算,但可以展示一下我的 GitHub Action 配置。
GitHub action 的准备阶段如下:指定 push 到 master 分支时触发,指定环境为 ubuntu-latest。
1 2 3 4 5 6 7 8 9 10 11 12 13 name: Deploy Hexo on: [push ]jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 with: ref: master
安装 hexo 主题:hexo-theme-yuzu
。
1 2 3 4 - name: Update Submodule run: | git submodule init git submodule update --remote
安装 pandoc 和 pandoc-crossref,合并所有 bib 文件。
1 2 3 4 5 6 7 8 9 10 11 - name: Install pandoc with crossref run: | wget -q https://github.com/jgm/pandoc/releases/download/2.16.2/pandoc-2.16.2-linux-amd64.tar.gz tar zxf pandoc-2.16.2-linux-amd64.tar.gz mv pandoc-2.16.2/bin/pandoc pandoc wget -q https://github.com/lierdakil/pandoc-crossref/releases/download/v0.3.12.1a/pandoc-crossref-Linux.tar.xz tar xf pandoc-crossref-Linux.tar.xz echo "$PWD" >> $GITHUB_PATH - name: Generate bib file run: cat ./source/_bibs/*.bib >./bibfile.bib
安装 nodejs 环境。
1 2 3 4 - name: Setup Node uses: actions/setup-node@v1 with: node-version: "12"
生成静态文件并部署。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 - name: Hexo Generate run: | rm -rf ./node_modules npm install npm run clean npm run build - name: SFTP Deploy env: SSH_PRIVATE: ${{ secrets.SSH_PRIVATE }} uses: wlixcc/SFTP-Deploy-Action@v1.2.1 with: username: ubuntu port: 21212 server: www.cerallin.top ssh_private_key: ${{ secrets.SSH_PRIVATE }} local_path: ./public/* remote_path: /var/www/notes.cerallin.top args: '-o ConnectTimeout=5'
更新
后来我发现 sftp 太慢了,因为美国访问我的腾讯云服务器本来 ttl 就长,再加上所有文件都要传输一遍。但是众所周知,大多数文件并不会在每次渲染时都更新,因此我把最后一个 step 改成了基于 rsync 的同步。
1 2 3 4 5 6 7 8 9 10 11 12 13 - name: Hexo Deploy id: deploy uses: Pendect/action-rsyncer@v1.1.0 env: DEPLOY_KEY: ${{ secrets.SSH_PRIVATE }} with: flags: '-avzrc --delete' options: '' src: 'public/' dest: 'cerallin@host:/path/to/notes' - name: Display deploy status run: echo "${{ steps.deploy.outputs.status }} "
更新
再后来我把我的小说站和主题展示网站的部署全部自动化了。
我的cerallin.github.io 是 hexo 生成后的静态网址。虽然可以在xxx.github.io
repo 里直接上传 hexo 的整个配置,但我并不想把我的_config.yml
暴露给别人。好在 hexo 早就提供了基于 git 的部署方案:
1 2 3 4 5 6 deploy: - type: 'git' repo: git@github.com:cerallin/cerallin.github.io branch: master
这样配置的好处是,我的 hexo 在本地修改,然后运行hexo deploy
即可上传到cerallin.github.io
仓库。在此基础上,我又把本地 hexo 用 git 管理起来,并使用 GitHub Action 自动部署。
为此,首先需要生成一对 RSA 密钥,以实现自动化部署时的身份认证。
首先设置cerallin.github.io
仓库的Deploy keys
为公钥;然后设置私有仓库的secrets.SSH_KEY
为私钥。最后配置私有仓库的 GitHub Action,其(局部)配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 - steps: - name: Setup Deploy Key env: HEXO_DEPLOY_KEY: ${{ secrets.SSH_KEY }} run: | mkdir -p ~/.ssh/ echo "$HEXO_DEPLOY_KEY" > ~/.ssh/id_rsa chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa ssh-keyscan github.com >> ~/.ssh/known_hosts npm install hexo-cli -g npm install - name: Deploy run: | npm run clean npm run deploy
P.S. 配套的本地提交 git 的 shell:
1 2 3 4 5 6 7 blog-update () { sed -i "s_^ _\n_" ./source/_posts/*.md git add -A && git commit -m "Updated at $(TZ=Asia/Shanghai date +'%F %H:%M:%S') " git push }
其中,一开始的 sed 指令是为了适配我的小说网站,从 Pure Writer 复制粘贴来的文本每段开头自带两个全角空格,使用 sed 指令将它们全部转换为换行,这样在 Markdown 语法中自然形成分段。
Fin.