本来视频和教程中已经说的很清楚了,但是自己动手的时候还是遇到了很多问题,记录一下。也希望可以帮到后续采坑的人。🧐
(先上结果)在历经了22次失败之后,第23次终于成功了

label 'github action ' pink 简介
Github Action 是 GitHub 于 2018 年 10 月推出的一个 CI\CD 服务。(持续集成、持续交付、持续部署) 我的理解就是:通过监听仓库一系列如推送的动作,进而在github环境中创造出类似虚拟机的环境(如开发环境一样),安装依赖(nodejs、hexo-cli),执行命令如 npm run build 、hexo三件套等。
Github Action 使用教程
首先我们要明确目的,自动部署,就是要 在github收到我们的动作 (我用的是 label '提交' red )时①,实现云端执行如本地一样的动作②
准备工作
tabs 准备工作 方便管理,我推荐项目源码和生产环境使用两个仓库,因为<name>.github.io是开放仓库,所以不想展示源码,最好使用私有仓库管理,然后通过生成dist & public 的方式推到开放仓库,进行项目展示。 使用私有仓库最主要的原因就是安全,因为在action配置中会用到 label 'Token' blue ,如果 label 'Token' blue 被盗用,别人可以操作你的 github 仓库内容,造成不必要的麻烦。 一般使用hexo的话,hexo g -d 配置好会自动上传 public 到开放仓库,无需自己push。 今天演示的是 github action 推送到开放仓库,所以要准备好 label '两个' red 仓库。 endtabs
hideToggle 创建私有仓库 点击图片查看大图

endhideToggle
- 进行源码推送到仓库。
准备action环境
- 切换到Actions

- 选择自己定义工作流

- 创建文件,编辑内容,发布工作流

name: 自动部署
# 当有改动推送到master分支时,启动Action
on:
push:
branches:
- main
#2020年10月后github新建仓库默认分支改为main,注意更改
release:
types:
- published
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository main branch
uses: actions/checkout@v3
with:
ref: main
- name: install nodejs
uses: actions/setup-node@v3.4.1
with:
node-version: "16.x"
- name: 安装 Hexo
run: |
export TZ='Asia/Shanghai'
npm install hexo-cli -g
- name: 安装依赖
run: |
npm install
- name: 生成静态文件
run: |
hexo clean
hexo generate
- name: 部署到Github
uses: JamesIves/github-pages-deploy-action@v4
with:
token: ${{secrets.IO_SSH}} # 接受推送的 public 公开仓库 - 这里别和源码私有仓库搞混
repository-name: jia0213/jia0213.github.io
branch: main
folder: public
commit-message: '${{ github.event.head_commit.message }} Updated By Github Actions'需要注意的是,yml中有几处需要调整为你项目中的实际数据: 如分支 label main blue -> label master pink 如其他依赖 在 install 里 增加命令 如 npm install gulp 如repository-name 需要你实际的路径 如 <name>/.github.io token:
secrets.IO_SSHlabel 'github -> setting - accessToken' red最后一步部署的时候 with 里面有个 label token red ,这里需要注意, 敏感字段一般使用
环境变量来代替,方法如下:
- 找到添加位置

- 输入需要保密的 键和值 ,后面使用
secrets.键即可引用到 value

- 而这里我们要在源码仓库推送到公开仓库进行部署,用到的
token用的是整个github仓库的操作权限的 token ,不然会报错 git 没有操作权限等相关问题 - 新开窗口,我们接下来注册token 访问 Github->头像(右上角)->Settings->Developer Settings->Personal access tokens->generate new token,创建的 Token 名称随意,但必须勾选 repo 项 和 workflows 项。


- 回到 main.yml中,将token 替换为 刚才准备好的 变量引用,在工作流编辑界面右侧点击 label start commit green 即可 note purple 至此,action 部署完成,如果成功执行,那就大功告成! endnote
特别鸣谢:
坑1
上传源码之后,自动执行action时,报错无法解析hexo语法,查看仓库主题文件夹为空,图标上出现白色箭头。

坑2
执行action时报错,lockfileVersion@1版本问题,解决办法是通过node的版本与之匹配,node版本推荐 node-version: "16.x"

坑3
执行action时报错,(git)Warning: Permanently added the ECDSA host key for IP address 'xxx.xxx.xxx' to the list of known hosts. Permission denied (publickey) 执行git命时受到公钥SSH影响导致权限不够
note purple no-icon Permission denied (publickey). fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists endnote 解决办法:
坑4
hexo 部署报错 label 'spawn failed' red
- 出现
- fatal: in unpopulated submodule '.deploy_git'
- FATAL {
err: Error: Spawn failed解决: 把根目录下的 .deploy_git 目录删除 再重新生成 、 提交
- 更多可能的因素和解决方案可以参考@洪总HEO写的方案:Hexo 错误:spawn failed 的解决方法。
坑5
当添加公钥的时候出现了Key is invalid. You must supply a key in OpenSSH public key format github
- 首先在本地生成key
ssh-keygen -t rsa -C "邮箱"- 执行之后会告诉你 生成的文件 位置和名称 我的是 C:\Users\Administrator/.ssh/id_rsa
- 直接赋值粘贴 .ssh的文件会破坏格式,需要打开 所在.put文件所在文件夹中的git bash然后
- 输入 clip < id_rsa.pub 文件名字打一半tab键可以自动补全
- 回车之后成功执行,内容就复制在剪切板了
- 添加ssh key 与 git进行绑定
- 点击头像

- 增加到配置中


坑6
- 一样的配置,这次提交就错了 报错信息: Error: The deploy step encountered an error: The process '/usr/bin/git' failed with exit code 解决方法如下
