网页源码管理与GitHubActions自动部署

因为自己老是手贱,不知道就把哪里改了,然后就会出一些莫名奇妙的问题,甚至可以折腾好几天,所以特别需要用git进行源码管理。奈何自己对于git理解不到位,使用起来很吃力,在借鉴了几位大佬的文章后,才渐渐上手,在此记录一下操作,遇到的bug,以及解决办法。

参考文章:

1.使用Github Action实现全自动部署

2.hexo博客搭建–源码管理

源码管理

方案

私有仓库Hexoblog:源码

公开仓库HysenEcho.github.io:静态网页

步骤

上传源码

1
2
3
4
5
6
7
8
9
10
# 与远程 Git 仓库建立连接,只此一次即可  
git remote add origin https://github.com/你的用户名/你的名字.github.io

# 添加到缓存区
git add -A
git commit -m "这次做了什么更改,简单描述下即可"
# 推送至远程仓库
git push
# 第一次提交,你可能需设置一下默认提交分支
# git push --set-upstream origin hexo

问题:themes文件夹被当做子模块上传,未成功

这里同样涉及到后面的自动部署,是否能读取主题,此处要把themes文件夹.git移除,见下方==问题1==

先删除子模块

参考链接:删除子模块

首先把该子模块备份,然后执行

1
2
3
git rm -r --cached themes
git commit -a -m 'remove themes submodule'
git push origin main
重新加入

1、进入到子模块的目录,删除原来的git地址

1
git remote rm origin

2、重新回到主目录,进行add commit push

1
2
3
4
5
git status
git add themes/
git commit -m "add AAAAA_business again"
git remote add origin git@github.com:HysenEcho/Hexoblog.git
git push origin main

新建脚本

每次推送都要输入这三条命令,你可能觉得有些麻烦。那么你可以编写 bash 脚本。

譬如,在根目录下新建 update.sh

1
2
3
4
5
6
7
8
# 如果没有消息后缀,默认提交信息为 `:Hysen: update content`
info=$1
if ["$info" = ""];
then info=":Hysen: update content"
fi
git add -A
git commit -m "$info"
git push origin master

此后更新的话,只需要在终端执行 sh update.sh 即可。

出现问题

问题1:git add报错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
warning: adding embedded git repository: themes/hexo-theme-huhu
hint: You've added another git repository inside your current repository.
hint: Clones of the outer repository will not contain the contents of
hint: the embedded repository and will not know how to obtain it.
hint: If you meant to add a submodule, use:
hint:
hint: git submodule add <url> themes/hexo-theme-huhu
hint:
hint: If you added this path by mistake, you can remove it from the
hint: index with:
hint:
hint: git rm --cached themes/hexo-theme-huhu
hint:
hint: See "git help submodule" for more information.

因为在父仓库内部克隆一个仓库 /themes/anzhiyu (从另一个 rope 克隆过来的),会添加为子模块,但是不知道这个模块仓库所在的 url ,因此在 GitHub 上无法打开这个文件夹

解决方法

参考:1.使用Github Action实现全自动部署–源码管理部分

删除或者先把[Blogroot]/themes/butterfly/.git移动到非博客文件夹目录下,原因是主题文件夹下的.git文件夹的存在会导致其被识别成子项目,从而无法被上传到源码仓库

问题2 git push报错

1
2
3
$ git push --set-upstream origin hexo
error: src refspec hexo does not match any
error: failed to push some refs to 'https://github.com/HysenEcho/HysenEcho.github.io'

后来重新输入,改为master,还是报错

1
2
$ git push --set-upstream origin master
fatal: unable to access 'https://github.com/HysenEcho/HysenEcho.github.io/': Recv failure: Connection was reset

解决方法

参考文章:解决Recv failure: Connection was reset

1、在git中执行git config –global –unset http.proxy和git config –global –unset https.proxy

1
2
git config --global --unset http.proxy
git config --global --unset https.proxy

2、在cmd下执行ipconfig/flushdns 清理DNS缓存

1
ipconfig/flushdns

3、重新push

自动部署

参考文章:

1.https://www.imql.life/2020/01/24/My_HexoBlog_with_NexT_3/

2.https://blog.ccknbc.cc/posts/hexo-toss/

利用gitaction自动部署

新建工作流文件

前往博客构建仓库,创建一个工作流文件(一个 yml 文件):

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
name: hexo-build
# 仓库main分支有推送时执行jobs下定义的任务
on:
push:
branches:
- main
# 设置时区为上海
env:
TZ: Asia/Shanghai
jobs:
# 定义名为blog-build的任务
blog-build:
# 定义运行的操作系统
runs-on: ubuntu-latest
# 定义步骤
steps:
# 签出仓库的默认分支,此处即为main,同时迁出子项目,此处即为主题仓库
- name: Checkout
uses: actions/checkout@v3
with:
submodules: false
# 安装v12.14.0的Node.js,同时进行全局缓存
- name: Install Node.js v18.17.0
uses: actions/setup-node@v3
with:
node-version: "18.17.0"
cache: "npm"
- name: 安装 Hexo
run: |
export TZ='Asia/Shanghai'
npm install hexo-cli -g

# 缓存文件夹node_modules并生成唯一码
- name: Cache dependencies
uses: actions/cache@v3
id: cache-dependencies
with:
path: node_modules
key: ${{runner.OS}}-${{hashFiles('**/package-lock.json')}}
# 如果唯一码为比对成功,重新安装依赖

- name: Install dependencies
if: steps.cache-dependencies.outputs.cache-hit != 'true'
run: npm install --save
- name: Generate
run: |
hexo clean
npm i && npx hexo g

- name: Setup private rsa key
env:
DEPLOY_KEY: ${{secrets.DEPLOYKEY}}
run: |
mkdir -p ~/.ssh/
echo "$DEPLOY_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
# ssh-keyscan gitee.com >> ~/.ssh/known_hosts

- name: Deploy
run: |
git config --global user.name "${{secrets.GITHUBUSERNAME}}"
git config --global user.email "${{secrets.GITHUBEMAIL}}"
npm run build && npm run deploy

添加secrets

  • 指定 DEPLOYKEY 的值,此值为我们电脑用户文件夹下 .ssh 下 id_rsa 的内容,即私钥,该私钥在安装和配置 Git 时生成。

  • 指定GITHUBUSERNAME的值,即自己的 GitHub 用户名。

  • 指定 GITHUBEMAIL的值,即自己的 GitHub 邮箱。

    当每次更新时,直接执行脚本即可自动部署。