实现 Github Actions 持续部署

完整实现 Github Actions 持续部署!

更新

浏览 Docker 方法,发现它模拟的是本地生成 SSH 密钥,然后通过密钥连接并推送代码到远程仓库。我也尝试把 entrypoint.sh中的命令化为一个个步骤,直接放在 jobs 中,而不是放在 Docker 容器中,但是发现我不会 linux,所以后面再说。

最终选择仍以 token 为路径,来提交代码。

实现

代码如下:

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
39
40
41
42
43
44
# 文件路径 .github/workflows/deployment.yml
name: Deployment

on:
push:
branches: [main] # only push events on source branch trigger deployment

jobs:
hexo-deployment:
runs-on: ubuntu-latest
env:
TZ: Asia/Shanghai

steps:
- name: Checkout source
uses: actions/checkout@v2
with:
submodules: true

- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: '12.x'

- name: Install dependencies & Generate static files
run: |
node -v
npm i -g hexo-cli
npm i
hexo clean
hexo g
- name: Deploy to Github Pages
env:
GIT_NAME: WillCAI2020
GIT_EMAIL: ${{ secrets.GIT_EMAIL_BLOG }}
REPO: github.com/WillCAI2020/WillCAI2020.github.io
GH_TOKEN: ${{ secrets.GH_TOKEN_BLOG }}
run: |
cd ./public && git init && git checkout -b main && git add .
git config --global user.name $GIT_NAME
git config --global user.email $GIT_EMAIL
git commit -m "GitHub Actions Auto Builder at $(date +'%Y-%m-%d %H:%M:%S')"
git push --force --quiet "https://$GH_TOKEN@$REPO" main:main

注意

变量命名以及步骤解释在 此文 均有讲解,这里不再赘述。

  1. 分支

    2020年10月份开始 GitHub 把默认的 master 分支换成了 main 分支。为了方便,我在远程仓库的分支也设为了 main 分支。这里注意:本地 git init后默认仍为 master 分支,此时应将新建 main 分支,并切换到 main 分支。

    1
    2
    //新建 main 分支,并切换到 main 分支
    git checkout -b main
  2. 仓库

    我的源码放在了仓库 blog 中,但是为使用 gh-pages,生成的 public 静态文件必须放在 username.github.io 的仓库中。

    故而添加的 Secrets 变量均在 bolg 仓库中。

错误总结

原本我的仓库均只有 main 分支,而 jobs 代码并未加上 git checkout -b main,导致报错 error: failed to push some refs to,根据此文,同时浏览了 Git push 讲解,然后从“分支名不完整、没有提交代码、本地与远程产生冲突”入手。

经过一番苦思,突然想到把远程那虚拟主机当成自己的电脑,直接 git init,然后 git add .,提交的不就是本地的 master 分支吗,但是我 git push指明本地的是 main 分支,而 main 分支不存在当然会报错,于是加上 git checkout -b main,解决问题。