Skip to content

本来视频和教程中已经说的很清楚了,但是自己动手的时候还是遇到了很多问题,记录一下。也希望可以帮到后续采坑的人。🧐

(先上结果)在历经了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

  • 选择自己定义工作流

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

main.yml
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_SSH label '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

    1. 出现
Spawn
- fatal: in unpopulated submodule '.deploy_git' 
- FATAL {
  err: Error: Spawn failed

解决: 把根目录下的 .deploy_git 目录删除 再重新生成 、 提交

坑5

当添加公钥的时候出现了Key is invalid. You must supply a key in OpenSSH public key format github

  • 首先在本地生成key
Git
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 解决方法如下

Released under the MIT License.