GitHub Action
arminzheng Lv2

Action的创建

方式1:在项目根部,创建以下文件夹和文件

1
2
3
4
# 这里以我的 hexo 博客自动部署举例
.github
└── workflows
└── hexo-deploy.yml

方式2:在网页端的action上按照提示进行

Action的编排

编排文件的结构

Action 主要由三部分构成:name、on 和 jobs

name: 叫什么(如果忽略会默认为yml的文件名)

on: 作用在什么地方(触发点)

jobs: 触发后干什么

—— name0

—— on push branches master

—— Jobs name1 runs-on steps name run env uses

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
41
42
43
44
45
46
47
48
49
50
# 部分1
name: 显示在action的名字
# 部分2
on: # 绑定的地方
push: # 绑定推送
branches: # 绑定推送的分支
- master
# 部分3
jobs:
# 干活标识 自定义
build-and-deploy:
# 干活内容
# 运行服务器镜像(总共有几种选择,官网上可查)
runs-on: ubuntu-latest
# 运行条件判断
if: github.event.repository.owner.id == github.event.sender.id
# 运行步骤
steps:
- name: Checkout # 步骤标识,自定义
# 这里是引用的意思
# actions是官方定义的类似一个账号
# checkout是仓库名
# @后面是分支,也可以是 @v1 代表git标签
uses: actions/checkout@master

- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: '12'

- name: Setup Hexo
# 环境变量 通常用来获取仓库设置的secrets(里面可能是账号的密码或者公/私钥之类的)
env:
ACTION_DEPLOY_KEY: ${{ secrets.DEPLOY }}
# 运行命令
run: |
mkdir -p ~/.ssh
echo "$ACTION_DEPLOY_KEY" > ~/.ssh/id_rsa
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.name "${{ vars.USER_NAME }}"
git config --global user.email "${{ vars.USER_EMAIL }}"
npm install hexo-cli -g
npm install

- name: Deploy
run: |
hexo clean
hexo deploy -g

可以看到 jobs 下面是一个 标识,再下面是 steps,再再下面才是执行 命令。总共有 3 层。

Action在不同仓库之间访问和推送

我们可以本地生成一对公/私钥,保存下来。

1
ssh-keygen -t rsa -C "Comment" -f file_name

在私有仓库设置 Secrets,将私钥复制进去,然后在 action 里面,通过标识进行引用。命令里面将私钥复制到本地 .ssh目录下。

在公有仓库设置 Deploy keys,将公钥复制进去,然后私有仓库的action就可以部署到这个公有仓库了。

action 代表了一个独立的服务器环境,你可以在这里进行一系列的流程作业。