Github Action简介

Github Action是 GitHub于2018年10月推出的一个CI\CD服务。

CI/CD解释

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


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

Github Action使用教程

获取Token

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

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


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

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

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

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

Coding的配置还需要用到令牌用户名

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

创建存放源码的私有仓库

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

创建完成后,需要把博客的源码push到这里。首先获取远程仓库地址,此处虽然SSH和HTTPS均可,但是建议使用HTTPS。

配置deploy项

打开站点配置文件~/Blog/_config.yml,找到deploy项,使用之前生成的Token和各个站点仓库URL来组装地址。

deploy:
- type: git
repo:
gitHub: https://你的Github用户名:生成的Token@github.com/你的Github用户名/仓库名.git
gitee: https://你的Gitee用户名:生成的Token@gitee.com/你的Gitee用户名/仓库名
coding: https://令牌用户名:生成的Token@e.coding.net/你的Coding用户名/仓库名.git
branch: master #2020年10月后github新建仓库默认分支改为main,注意更改

例如我的配置(几处字符用问号代替权当加密了)
# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
type: git
repo:
github: https://akilarlxh:1407????b9cfd????2676bc9??????c6502babf2@github.com/Akilarlxh/Akilarlxh.github.io.git
gitee: https://akilar:f57?????????108603a?????06b279bb@gitee.com/akilar/akilar.git
coding: https://RD????ddMy:a4e4???????f8ce670dcb????1c4a2688cd????7@e.coding.net/akilar/akilar/akilar.git
branch: master #2020年10月后github新建仓库默认分支改为main,注意更改

配置Github Action

在站点根目录新建.github文件夹,注意开头是有个.的。然后在.github内新建workflows文件夹,再在workflows文件夹内新建autodeploy.yml,在Blog/.github/workflows/autodeploy.yml里面输入

# 当有改动推送到master分支时,启动Action
name: 自动部署

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 #2020年10月后github新建仓库默认分支改为main,注意更改

- name: 安装 Node
uses: actions/setup-node@v1
with:
node-version: "12.x"

- 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: 部署
run: |
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"
git clone 博客静态文件仓库地址 .deploy_git # clone 静态文件仓库,防止 Hexo 推送时覆盖整个静态文件仓库,只推送有更改的文件
hexo deploy

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

  1. hexo-bilibili-bangumi,使用该插件若是无效,请检查你的B站追番信息是否是公开的,在个人空间处设置。
  2. Butterfly文档-gulp压缩
  3. Gitee Pages Action
name: 自动部署
# 当有改动推送到master分支时,启动Action
on:
push:
branches:
- master

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"

- 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: 部署
run: |
git config --global user.name "我的用户名"
git config --global user.email "我的邮箱"
git clone 博客静态文件仓库地址 .deploy_git # clone 静态文件仓库,防止 Hexo 推送时覆盖整个静态文件仓库,只推送有更改的文件
hexo deploy

- 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:xxx/xxx.github.io.git"
# 注意替换为你的 Gitee 目标仓库地址
destination-repo: "git@gitee.com:xxx/xxx.git"

- name: 构建 Gitee Pages
uses: yanglbme/gitee-pages-action@master
with:
# 注意替换为你的 Gitee 用户名
gitee-username: xxx
# 注意在在github私有仓库的Settings->Secrets 配置 GITEE_PASSWORD
gitee-password: ${{ secrets.GITEE_PASSWORD }}
# 注意替换为你的 Gitee 仓库
gitee-repo: xxx/xxx

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

-----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 action自动部署更新收到短信,提示异地登录需要验证码。

    因为github action使用的是美国的服务器,所以,使用github action来远程更新gitee的站点部署时,会收到异地登陆的短信,提示需要验证码。这个在脚本作者的issues里有相应的解决方案:登陆失败 #6

    • 在微信上搜索Gitee微信公众号,在微信公众号内绑定自己的Gitee账号,这样虽然还是会有异地登录提示,但是发过来的消息不再需要填写验证码,而且提醒若不是你在操作,请及时修改密码。(某种意义上就是我在操作,所以我选择不改密码2333)
    • 使用VPN,通过美国IP登录一次Gitee。(一般第一步就能把问题解决了,用不到第二步。)
  2. Gitee部署失败
    脚本的原理是用程序代替人工去点击Gitee Pages的更新按钮。所以需要你先手动做一次页面部署,确保有那个更新按钮在,脚本才有生效的前提。

重新设置远程仓库和分支

在博客根目录启动终端,使用git指令重设仓库地址。这样在新建仓库,我们仍旧可以保留珍贵的commit history,便于版本回滚。

git remote rm origin # 删除原有仓库链接
git remote add origin [url] #url为新的存放源码的github仓库
git checkout -b master # 切换到master分支,
#2020年10月后github新建仓库默认分支改为main,注意更改
# 如果不是,后面的所有设置的分支记得保持一致
# 2020年10月以后,新建仓库的默认分支换成main
git add .
git commit -m "github action update"
git push origin master
#2020年10月后github新建仓库默认分支改为main,注意更改

查看部署情况

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

根据刚刚的Commit记录找到相应的任务

点击Deploy查看部署情况

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

发散思维

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

2020年10月后github新建仓库默认分支改为main,注意更改

参考内容

拓展内容