使用Github Actions实现全自动增量部署

Github Actions简介

[Github Actions\1(https://github.com/features/actions)是 GitHub于2018年10月推出的一个CI\CD服务。

CI/CD解释

CI\CD 其实说的是三件事情:「持续集成(Continuous Integration)」、「持续交付(Continuous Delivery)」、「持续部署(Continuous Deployment)」。
因为「持续交付」和「持续部署」的英文缩写是一样的,所以这三件事情缩写成了 CI\CD

每次部署Hexo都需要运行指令三件套,随着文章越来越多,编译的时间也随之越来越长,通过Github Actions,我们只需要在每次完成博客的编写或修改以后,将改动直接push到远程仓库,之后的编译部署的工作统统交给CI来完成即可,如果是看过Coding部署教程的小伙伴,应该对这种持续部署的操作有所感触。

教程常量声明

感谢@YML的反馈。以下将使用特定的常量名来指代一些名词。此处建议读者直接使用教程内容的常量名。在最后再逐一搜索替换。这样可以避免对各种常量名的混淆。

常量名 常量释义
[Blogroot] 本地存放博客源码的文件夹路径
[SourceRepo] 存放博客源码的私有仓库名
[SiteBlogRepo] 存放编译好的博客页面的公有仓库名 Site指站点,教程中会替换成 Github、Gitee、Coding
[SiteUsername] 用户名 Site指站点,教程中会替换成 Github、Gitee、Coding
[SiteToken] 申请到的令牌码 Site指站点,教程中会替换成 Github、Gitee、Coding
[GithubEmail] 与github绑定的主邮箱,建议使用Gmail
[TokenUser] Coding配置特有的令牌用户名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 在记事本中逐个记录,方便替换,以下为我的示例。就是把这些资料都集中记录在一个记事本文件中。
[Blogroot]:E:\Blogroot

[SourceRepo]:Akilarlxh/Hexo-blog-source

[SiteBlogRepo]
[GithubBlogRepo]:Akilarlxh.github.io
[GiteeBlogRepo]:akilar
[CodingBlogRepo]:akilar/akilar

[SiteUsername]
[GithubUsername]:Akilarlxh
[GiteeUsername]:Akilar
[CodingUsername]:akilar

[SiteToken]
[GithubToken]:15076c8eb9c874sad676bc9bfb13sadw86babf2
[GiteeToken]:f57acasdadgar4578603adas5d8w79bb
[CodingToken]:a4e45daf78as1f2670dcbbcfd5as7d8asd8cd66a77

[GithubEmail]:akilarlxh@gmail.com

[TokenUser]:RAxDiobbRi

Github Actions使用教程

获取Token

为了确保交由Github Actions来持续部署时,Github Actions具备足够的权限来进行hexo deploy操作,需要先获取Token,博主分别在GithubGiteeCoding处部署了静态页面,所以也就需要获取这三处的Token

访问Github->头像(右上角)->Settings->Developer Settings->Personal access tokens->generate new token,创建的Token名称随意,但必须勾选repo项和workflows项。
img
img
image-20231231170818812

token只会显示这一次,之后将无法查看,所以务必保证你已经记录下了Token。之后如果忘记了就只能重新生成重新配置了。

访问Gitee->头像(右上角)->设置->私人令牌->生成新令牌
image-20231231170942052
img

Token只会显示这一次,之后将无法查看,所以务必保证你已经记录下了Token。之后如果忘记了就只能重新生成重新配置了。

关于coding相关内容不再具备参考价值。Coding被腾讯云收购以后,现已停止提供静态页面部署功能,腾讯云将静态页面部署业务转移至webify,部署页面更加简单明了,速度也相当不错,当然,毕竟是腾讯家的产品,是按量计费的。

访问Coding->头像(右上角)->个人账户设置->访问令牌->新建令牌。
img

Coding的配置还需要用到令牌用户名[TokenUser],务必牢记,在接下来的deploy配置项中会写到。

image-20231231171056021

image-20231231171113018

Token只会显示这一次,之后将无法查看,所以务必保证你已经记录下了Token。之后如果忘记了就只能重新生成重新配置了。

创建存放源码的私有仓库

我们需要创建一个用来存放Hexo博客源码的私有仓库[SourceRepo],这点在Win10Hexo博客搭建教程中有提到。为了保持教程的连贯,此处再写一遍。

img

创建完成后,需要把博客的源码push到这里。首先获取远程仓库地址,此处虽然SSHHTTPS均可。SSH在绑定过ssh key的设备上无需再输入密码,HTTPS则需要输入密码,但是SSH偶尔会遇到端口占用的情况。请自主选择。

SSH密钥与公钥的生成与使用

SSH密钥对包含两个部分,一个是公钥(public key),一个是私钥(private key)。私钥应始终保密,公钥则可以用于指定哪些使用配套私钥的用户可以访问你的服务。以下是在Linux、Mac OS或Windows的Git Bash终端中创建SSH密钥对的步骤:

  1. 打开你的命令行界面。
  2. 输入以下命令来创建一个新的SSH密钥对:
1
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • ‘-t rsa’ 代表密钥类型(这里选择的是 RSA),‘-b 4096’ 表示密钥长度(4096位)
  • ‘-C’ 是一个备注,通常填写你的邮箱,可以更容易地识别你的密钥。
  1. 当系统提示你 “Enter a file in which to save the key” (输入一个用于保存密钥的文件),你可以接受默认文件位置(一般都在C盘,注意观察一下),直接按 Enter。如果你想设置一个自定义的位置和名字,可以直接输入路径。
  2. 系统会提示你输入一个安全的密码(passphrase),这个密码将被用于保护你的私钥。你也可以选择不设置密码,直接按 Enter。

这个过程将会在 ~/.ssh 目录下(如果选择了默认设置)创建两个文件,id_rsaid_rsa.pub,分别是你的私钥公钥

下面是如何使用SSH公钥的一般步骤:

  1. 将你的公钥(id_rsa.pub文件中的内容)添加到远端服务器(如 Github)。

    为了将公钥添加到Github,你需要这样做:

    在你的本地电脑打开 id_rsa.pub 文件,复制其中的全部内容。你可以使用很多方法打开这个文件,比如直接在文本编辑器中打开,或者在命令行中使用以下命令:

    1
    cat ~/.ssh/id_rsa.pub

    该命令将输出你的公钥内容。

    a. 登录你的GitHub账号,然后点击右上角的头像,选择"Settings"。

    b. 在左侧的侧边栏,选择"SSH and GPG keys"。

    c. 点击右上角的"New SSH key"按钮。

    d. 在"Title"框中,输入这个SSH键的名称。你可以选择任何帮助你记忆这个键的名字。

    e. 在"Key"框中,粘贴你刚才复制的公钥。

    f. 点击"Add SSH key"按钮。

    完成之后,你就可以使用你的私钥在你的电脑和GitHub之间建立安全的连接了。这意味着,当你进行Git操作的时候,无需再输入用户名和密码,系统将自动验证你的身份。

  2. 在使用SSH连接服务的时候,你只需要在你的本地机器上保存你的私钥,SSH客户端会自动使用你的私钥和远端服务器进行安全验证。

注意,不要泄漏你的私钥(id_rsa),这可能会导致你的服务被非法访问。如果你觉得你的私钥可能被泄漏,你需要立刻在所有服务上撤销这个公钥,然后生成一个新的密钥对。

配置Github Actions

  1. [Blogroot]新建.github文件夹,注意开头是有个.的。然后在.github内新建workflows文件夹,再在workflows文件夹内新建autodeploy.yml,在[Blogroot]/.github/workflows/autodeploy.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
# 当有改动推送到master分支时,启动Actions
- name: 安装 Node
uses: actions/setup-node@v1
with:
node-version: "18.x" #actions使用的node版本,建议大版本和本地保持一致。可以在本地用node -v查询版本号。

- name: 安装 Hexo
run: |
export TZ='Asia/Shanghai'
npm install hexo-cli -g

- name: 缓存 Hexo
uses: actions/cache@v1
id: cache
with:
path: node_modules
key: ${{runner.OS}}-${{hashFiles('**/package-lock.json')}}

- name: 安装依赖
if: steps.cache.outputs.cache-hit != 'true'
run: |
npm install --save

- name: 生成静态文件
run: |
hexo clean
hexo generate

- name: 部署 #此处master:master 指从本地的master分支提交到远程仓库的master分支,若远程仓库没有对应分支则新建一个。如有其他需要,可以根据自己的需求更改。
run: |
cd ./public
git init
git config --global user.name '${{ secrets.GITHUBUSERNAME }}'
git config --global user.email '${{ secrets.GITHUBEMAIL }}'
git add .
git commit -m "${{ github.event.head_commit.message }} $(date +"%Z %Y-%m-%d %A %H:%M:%S") Updated By Github Actions"
git checkout -b main #此代码为 Ai-China 试过报错(找不到main分支)后添加,添加后即可正常部署。
git push --force --quiet "https://${{ secrets.GITHUBUSERNAME }}:${{ secrets.GITHUBTOKEN }}@github.com/${{ secrets.GITHUBUSERNAME }}/${{ secrets.GITHUBPNAME }}.git" master:master #此处Ai-China也有修改,原代码应该是少命名了一个变量(GITHUBPNAME),而且要适用没有发布在Github Pages的情况,需要将最后的.github.io.git改为.git
#git push --force --quiet "https://${{ secrets.TOKENUSER }}:${{ secrets.CODINGTOKEN }}@e.coding.net/${{ secrets.CODINGUSERNAME }}/${{ secrets.CODINGBLOGREPO }}.git" master:master #coding部署写法,需要的自行取消注释
#git push --force --quiet "https://${{ secrets.GITEEUSERNAME }}:${{ secrets.GITEETOKEN }}@gitee.com/${{ secrets.GITEEUSERNAME }}/${{ secrets.GITEEUSERNAME }}.git" master:master #gitee部署写法,需要的自行取消注释

注意最后一行的master:master指从本地的master分支提交到远程仓库的master分支,需要根据你自己的实际情况进行调整(都改成main即可)。本地分支可以在git bash中看到。线上分支可以在提交仓库中查看。因为“政治正确”的原因,github在2020年10月将默认分支改为main。而git软件在本地默认创建的分支依然是master,所以若你线上仓库默认分支是main,这里应该写成master:main,表示从本地的master推送到远程的main。

这里主要在于配置上文的安装依赖和生成静态文件,如果还安装了其他的需要在部署前输入相应指令的也可以按照这个思路来修改。
同时,此处还涉及到Gitee的自动部署即使不开通Gitee pages pro,也可以完成自动更新
详情可以访问卓越科技-使用Github Actions 自动部署博客
插件配置教程则是参考以下文档

  1. hexo-bilibili-bangumi,使用该插件若是无效,请检查你的B站追番信息是否是公开的,在个人空间处设置。
  2. Butterfly文档-gulp压缩
  3. Gitee Pages Actions
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
name: 自动部署
# 当有改动推送到master分支时,启动Actions
on:
push:
branches:
- master
#2020年10月后github新建仓库默认分支改为main,注意更改
release:
types:
- published

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: 检查分支
uses: actions/checkout@v2
with:
ref: master

- name: 安装 Node
uses: actions/setup-node@v1
with:
node-version: "12.x" #actions使用的node版本,建议大版本和本地保持一致。可以在本地用node -v查询版本号。

- name: 安装 Hexo
run: |
export TZ='Asia/Shanghai'
npm install hexo-cli -g

- name: 缓存 Hexo
uses: actions/cache@v1
id: cache
with:
path: node_modules
key: ${{runner.OS}}-${{hashFiles('**/package-lock.json')}}

- name: 安装依赖
if: steps.cache.outputs.cache-hit != 'true'
run: |
npm install gulp-cli -g #全局安装gulp
npm install --save

- name: 生成静态文件
run: |
hexo clean
hexo bangumi -u #bilibili番剧更新
hexo generate
gulp

- name: 部署 #此处master:master 指从本地的master分支提交到远程仓库的master分支,若远程仓库没有对应分支则新建一个。如有其他需要,可以根据自己的需求更改。
run: |
cd ./public
git init
git config --global user.name '${{ secrets.GITHUBUSERNAME }}'
git config --global user.email '${{ secrets.GITHUBEMAIL }}'
git add .
git commit -m "${{ github.event.head_commit.message }} $(date +"%Z %Y-%m-%d %A %H:%M:%S") Updated By Github Actions"
git push --force --quiet "https://${{ secrets.GITHUBUSERNAME }}:${{ secrets.GITHUBTOKEN }}@github.com/${{ secrets.GITHUBUSERNAME }}/${{ secrets.GITHUBUSERNAME }}.github.io.git" master:master
#git push --force --quiet "https://${{ secrets.TOKENUSER }}:${{ secrets.CODINGTOKEN }}@e.coding.net/${{ secrets.CODINGUSERNAME }}/${{ secrets.CODINGBLOGREPO }}.git" master:master #coding部署写法,需要的自行取消注释
#git push --force --quiet "https://${{ secrets.GITEEUSERNAME }}:${{ secrets.GITEETOKEN }}@gitee.com/${{ secrets.GITEEUSERNAME }}/${{ secrets.GITEEUSERNAME }}.git" master:master #gitee部署写法,需要的自行取消注释

#同步到gitee这一步,如果上面写了推送到gitee仓库的git push指令了,那同步到 Gitee 这一块就不需要了。
- name: 同步到 Gitee
uses: wearerequired/git-mirror-action@master
env:
# 注意在github私有仓库的Settings->Secrets 配置 GITEE_RSA_PRIVATE_KEY
SSH_PRIVATE_KEY: ${{ secrets.GITEE_RSA_PRIVATE_KEY }}
with:
# 注意替换为你的 GitHub 源仓库地址
source-repo: "git@github.com:${{ secrets.GITHUBUSERNAME }}/${{ secrets.GITHUBUSERNAME }}.github.io.git"
# 注意替换为你的 Gitee 目标仓库地址
destination-repo: "git@gitee.com:${{ secrets.GITEEUSERNAME }}/${{ secrets.GITEEUSERNAME }}.git"
# 这里就是模拟了一个点击更新网站按钮的动作。可以实现gitee page 自动更新。
- name: 构建 Gitee Pages
uses: yanglbme/gitee-pages-action@master
with:
# 注意替换为你的 Gitee 用户名
gitee-username: ${{ secrets.GITEEUSERNAME }}
# 注意在在github私有仓库的Settings->Secrets 配置 GITEE_PASSWORD
gitee-password: ${{ secrets.GITEE_PASSWORD }}
# 注意替换为你的 Gitee 仓库
gitee-repo: ${{ secrets.GITEEUSERNAME }}/${{ secrets.GITEEUSERNAME }}

注意最后一行的master:master指从本地的master分支提交到远程仓库的master分支,需要根据你自己的实际情况进行调整。本地分支可以在git bash中看到。线上分支可以在提交仓库中查看。因为“政治正确”的原因,github在2020年10月将默认分支改为main。而git软件在本地默认创建的分支依然是master,所以若你线上仓库默认分支是main,这里应该写成master:main,表示从本地的master推送到远程的main。

img

这里的GITEE_RSA_PRIVATE_KEY指你的个人密钥,在配置SSH-KEY时,我们用来与Github绑定的是公钥,而私钥存放在(以win10为例)C:\Users\userneme\.ssh\id_rsa文件内,内容格式类似于下方代码,使用时将包括-----BEGIN RSA PRIVATE KEY----------END RSA PRIVATE KEY-----在内的全部内容都存放到变量值里。

1
2
3
4
5
6
7
8
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEApM/T7rRtc9sNcd7NNZHMOZU7e7322leY5JauIxJEgQYpdrfO
vQB9PPpeMudAyCvAlaM?????????XO21G7RNejl4dLEflBh68TB93DlK/k/3KizMf
jewpXU3HHpFSSyiIA7Mi8ur39ybbG4oWEHI/Mnjq?????????e5oiVvYNux2
TazhAoGAL8h8XrB0t????????????????W2Ul4AomH1mu+rtIz2sQZdREVL4
dskwWvzoGOyNBPreLXWHBY6fg34dhNaZvNDZPGGd3bK6arMRdzrAynQio0CE0zwm
zJEo1tpUvqujmYMRnM1+jYHOPqU5sIvnEy5xovAzECPUSUs43Ag=
-----END RSA PRIVATE KEY-----

可能遇到的bug:

  1. Gitee用github actions自动部署更新收到短信,提示异地登录需要验证码。
    因为github actions使用的是美国的服务器,所以,使用github Actions来远程更新gitee的站点部署时,会收到异地登陆的短信,提示需要验证码。这个在脚本作者的issues里有相应的解决方案:登陆失败 #6
    • 在微信上搜索Gitee微信公众号,在微信公众号内绑定自己的Gitee账号,这样虽然还是会有异地登录提示,但是发过来的消息不再需要填写验证码,而且提醒若不是你在操作,请及时修改密码。(某种意义上就是我在操作,所以我选择不改密码2333)
    • 使用VPN,通过美国IP登录一次Gitee。(一般第一步就能把问题解决了,用不到第二步。)
  2. Gitee部署失败
    脚本的原理是用程序代替人工去点击Gitee Pages的更新按钮。所以需要你先手动做一次页面部署,确保有那个更新按钮在,脚本才有生效的前提。
  1. 之后需要自己到仓库的Settings->Secrets and variables->actions 下添加环境变量,变量名参考脚本中出现的,依次添加(有改动,请注意上方代码注释)
    image-20231231180933831image-20231231181007907

例如,脚本中必要的变量为
GITHUBUSERNAMEGITHUBEMAILGITHUBTOKENGITHUBPNAME,因此添加这4条变量。变量具体内容释义可以查看本文开头。

img

重新设置远程仓库和分支

  1. 添加屏蔽项
    因为能够使用指令进行安装的内容不包括在需要提交的源码内,所有我们需要将这些内容添加到屏蔽项,表示不上传到github上。这样可以显著减少需要提交的文件量和加快提交速度。
    打开[Blogroot]/.gitignore,输入以下内容:
1
2
3
4
5
6
7
8
9
10
.DS_Store
Thumbs.db
db.json
*.log
node_modules/
public/
.deploy*/
.deploy_git*/
.idea
themes/butterfly/.git

​ 如果不是butterfly主题,记得替换最后一行内容为你自己当前使用的主题。

  1. 提交源码到私有仓库[SourceRepo]
    在博客根目录[Blogroot]下启动终端,使用git指令重设仓库地址。这样在新建仓库,我们仍旧可以保留珍贵的commit history,便于版本回滚。
1
2
3
4
5
6
7
8
9
git remote rm origin # 删除原有仓库链接
git remote add origin git@github.com:[GithubUsername]/[SourceRepo].git #[SourceRepo]为新的存放源码的github私有仓库
git checkout -b master # 切换到master分支,
#2020年10月后github新建仓库默认分支改为main,注意更改
# 如果不是,后面的所有设置的分支记得保持一致
git add .
git commit -m "github actions update"
git push origin master
#2020年10月后github新建仓库默认分支改为main,注意更改
  1. 可能遇到的bug
    因为butterfly主题文件夹下的.git文件夹的存在,那么主题文件夹会被识别子项目。从而无法被上传到源码仓库。若是遇到添加屏蔽项,但是还是无法正常上传主题文件夹的情况。请先将本地源码中的themes文件夹移动到别的目录下。然后commit一次。接着将themes文件夹移动回来,再commit一次。
    要是还不行,那就删了butterfly主题文件夹下的.git文件夹,然后再重复上述的commit操作
  1. 删除或者先把[Blogroot]/themes/butterfly/.git移动到非博客文件夹目录下,原因是主题文件夹下的.git文件夹的存在会导致其被识别成子项目,从而无法被上传到源码仓库。
  2. 在博客根目录[Blogroot]路径下运行指令
1
2
3
4
5
git init #初始化
git remote add origin git@github.com:[GithubUsername]/[SourceRepo].git #[SourceRepo]为存放源码的github私有仓库
git checkout -b master # 切换到master分支,
#2020年10月后github新建仓库默认分支改为main,注意更改
# 如果不是,后面的所有设置的分支记得保持一致
  1. 添加屏蔽项
    因为能够使用指令进行安装的内容不包括在需要提交的源码内,所有我们需要将这些内容添加到屏蔽项,表示不上传到github上。这样可以显著减少需要提交的文件量和加快提交速度。
    打开[Blogroot]/.gitignore,输入以下内容:
1
2
3
4
5
6
7
8
9
10
.DS_Store
Thumbs.db
db.json
*.log
node_modules/
public/
.deploy*/
.deploy_git*/
.idea
themes/butterfly/.git
  1. 如果不是butterfly主题,记得替换最后一行内容为你自己当前使用的主题。
    之后再运行git提交指令,将博客源码提交到github上。牢记下方的三行指令,以后都是通过这个指令进行提交。
1
2
3
4
git add .
git commit -m "github actions update" #引号内的内容可以自行更改作为提交记录。
git push origin master
#2020年10月后github新建仓库默认分支改为main,注意更改
  1. 此时你的主题文件夹若已经被正常上传,并且你也添加了主题文件夹下的.git文件夹的屏蔽项。那你可以考虑把第二步移走或删除的.git放回来,用作以后升级。(不禁怀疑真的有人会去用这个方式来升级吗)

查看部署情况

此时,打开GIthub存放源码的私有仓库,找到Actions。

img

根据刚刚的Commit记录(messages信息)找到相应的任务

img

点击Deploy查看部署情况

img

若全部打钩,恭喜你,你现在可以享受自动部署的快感了。

可能遇到的bug

要是在github action部署时遇到unknown block tag: "tagname"这样的报错,说明你可能没有正确上传主题文件夹,也可能遇到安装依赖或生成页面失败的情况。

  1. 是否将node_modules也上传到源码仓库[SourceRepo]了。源码仓库不需要有node_modules文件夹。
  2. 是否有将[Blogroot]/themes/下的主题文件夹上传,例如检查[SourceRepo]内的[Blogroot]/themes/Butterfly是否为空文件夹。为了能够正常编译页面,源码仓库需要有[Blogroot]/themes/Butterfly文件夹及它所包含的主题文件内容。
    为了避免这两点,需要添加git屏蔽项。通过给.gitignore添加屏蔽项解决。
    打开[Blogroot]/.gitignore,输入以下内容:
1
2
3
4
5
6
7
8
9
10
.DS_Store
Thumbs.db
db.json
*.log
node_modules/
public/
.deploy*/
.deploy_git*/
.idea
themes/butterfly/.git
  1. 若是遇到添加屏蔽项,但是还是无法正常上传主题文件夹的情况。
  • 请先将本地源码中的themes/butterfly文件夹下的.git文件夹删除。
  • 然后将butterfly文件夹移动到别的目录下。然后commit一次。
  • 接着将butterfly文件夹移动回来,再commit一次。

若是遇到spawn failed报错。在github actions的配置中出现这一报错。一般是因为涉及到部署地址的配置项有误。

  1. 首先排查你在[Blogroot]\_config.ymldeploy配置项是否按照上文配置deploy项中的步骤正确组装配置链接。
  2. 其次排查[Blogroot]\.github\workflows\autodeploy.yml中各个关于仓库链接的配置内容,注意按照注释指引检查空格、分支等。
  3. 更多可能的因素和解决方案可以参考@洪哥HEO写的方案:Hexo错误:spawn failed的解决方法

部分不愿意用教程给出的变量名的可能遇到未知bug,此处给出官方的命名规则:

以下规则适用于密码名称:

密钥名称只能包含字母数字字符([a-z]、[A-Z]、[0-9])或下划线 (_)。 不允许空格。

密钥名称不得以 GITHUB_ 前缀开头。

密钥名称不能以数字开头。

密钥名称不区分大小写。

密钥名称在所创建的级别上必须是唯一的。

本地分支和线上分支不一致导致总是提交不上。
注意观察autodeploy.yml文件中

1
git push --force --quiet "https://${{ secrets.GITHUBUSERNAME }}:${{ secrets.GITHUBTOKEN }}@github.com/${{ secrets.GITHUBUSERNAME }}/${{ secrets.GITHUBUSERNAME }}.github.io.git" master:master

末尾的master:master指从本地的master分支提交到远程仓库的master分支。需要根据实际情况进行调整。本地的分支可在git bash中查看。线上的分支可在仓库查看。比如本地默认分支是master,线上默认分支是main,应该改成master:main。
会遇到这类问题,一般是有同学直接全局替换master为main导致。

错误信息 fatal: repository 'https://github.com/***/***.github.io.git/' not found 表示 git 无法找到你想要推送的 GitHub 仓库。

可能的原因有以下几个:

  1. 仓库不存在: 检查你的 GitHub 仓库是否确实存在,仓库名是否输入正确(大小写、拼写等)。
  2. Secrets 变量错误:确认 GitHub Actions 的 secrets 有正确地设置,所有变量名及其值都是正确的,并且确实存在。尝试在 GitHub 仓库的 “Settings” 菜单下的 “Secrets” 选项中查看和确认这些值。
  3. 权限问题:检查你的 GITHUBTOKEN 是否有合适的权限,至少要有对应仓库的写权限。
  4. 仓库名问题:仓库名 $.github.io.git 中包含 .github.io,这通常用于 GitHub Pages服务,如果你的仓库并非用于此,那可能不需要这部分。
    快速检查是否是仓库名问题的一种方式就是,尝试将命令中的
    $.github.io.git 改为 $.git,然后再进行尝试。

git commit下方加入git checkout -b main,检出(切换到)main分支,如果没有,则创建一个新的名为mainbranch

如果你想改变你的项目关联的远程仓库地址,你可以使用 git remote set-url origin your-new-git-url.git 来更改。这里的 “your-new-git-url.git” 就需要替换为你新的GitHub仓库的 URL地址。

后记

这里可能有同学要问,github actions有啥用?这不就是从hexo cl && hexo g && hexo s的三件套变成了git add .,git commit -m "commit content",git push三件套吗?
其实github action的最大作用就是进一步提高速度和便携性,首先,配置要求提交源码这点,萌新小白就没必要再靠本地不断新建压缩包来备份源码了,借助git的版本管理,不管怎么改都可以快速回滚。
然后,git提交是增量更新,每次只提交新增或者删改的内容,而hexo deploy是在本地每次重新生成所有静态文件以后再整个提交。github action能帮我们节省大把时间,把最耗时的hexo generate和hexo deploy的工作丢给CI处理。让我们能够专心与编写博客内容,而不是水文3分钟,提交半小时。

发散思维

Github actions只要监测到master分支有所变动就会启动部署,那么顺着这个思路,手机用户可以在网页Github进行小幅修改,例如修改错别字,调整布局之类的。保存后也会启动Github actions,从而将内容部署到网页上去。

PS:

本博文原地址为:https://akilar.top/posts/f752c86d/,
Ai-China结合自己的路程进行了些微修改和备注,希望于人有益。
感谢原作者的艰辛创作!

image-20240108143213015