用github actions部署你的应用(hexo)

之前github pages 一直都是用 travis-ci 部署的,除了慢一点没什么毛病,所以一直没有转向Github Actions的念头。
但是最近又重新买了个服务器,正好趁这个时间学一下 Actions,Actions对比travis有个很大的亮点就是他的生态很好,你要用什么插件搜一下直接就可以用了,减少很多工作。

access token

因为我们构建完需要Push到仓库,所以得有个 Github access token,可以直接点进链接申请,勾选repo的选项 ,然后点击生成Token,这时候先别关闭页面,后面要用到这个token。

secrets

进入要部署的项目的setting,左边有个导航进 secrets,在这里生成Actions需要用到的所有秘钥,只要你觉得有隐私的或者需要保密的全都在这里定义字段,然后配置文件直接使用就好。

我的Secrets总共有四个,如果只是部署到 github pages的话,你只需要token一个就够了

  • token: 存放上一步生成的 access token
  • SSH_PRIVATE: 存放SSH到服务器的私钥
  • USERNAME: 要登录服务器的用户
  • HOST: 要登录的服务器host

Action workflow

点击项目顶部导航进入 Actions,随便点一个模板进去,或者直接 set up workflow yourself新建一个新的

我的workflow基本就是搬 travis 的,按照github 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
name: Blog deployer # 当前workflow的名字

# 触发的时机 当 master 分支有 push 的操作时执行
on:
push:
branches:
- master

jobs: # jobs一般都是并行执行
build:
name: Build and publish
runs-on: ubuntu-latest # 运行环境

steps:
# 使用 actions/checkout 这个插件 用于拉取当前仓库的master分支
- uses: actions/checkout@master

# 使用 actions/setup-node@v1 插件配置node环境
- name: Use Node.js 10.x
uses: actions/setup-node@v1
with:
node-version: 10.x

# 安装 hexo-cli 与项目所需的 node_modules
- name: Setup Hexo env
run: |
npm install hexo-cli -g
npm install

# 生成静态资源
- name: Generate public files
run: |
hexo clean
hexo g

# 部署到 Github Pages 这里没有用到 hexo的 Deploy
- name: Deploy To Github Pages
env:
GH_REF: github.com/jsonz1993/jsonz1993.github.io
run: |
# 配置本地git
git config --global user.name "Jsonz1993"
git config --global user.email "jsonz@qq.com"
# 生成 commit message 默认抓取最后一次提交信息
git log --pretty=format:"CI: %s" --date=short -n 1 > commit-message.log
git clone https://${GH_REF} .deploy_git
cd .deploy_git
git checkout master
cd ../
mv .deploy_git/.git/ ./public/
cd ./public/
git add .
git commit -F ../commit-message.log
git push --force --quiet "https://${{ secrets.token }}/@${GH_REF}" master:master

# 部署到自己的服务器
- name: Deploy to Private Server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH_PRIVATE }}
script: |
cd ${{ secrets.SERVER_PATH }} && git pull

使用 GitHub 操作自动化工作流程

阮一峰 Github Actions