使用 GitHub Action 自动部署项目
概述
这篇文章简单的介绍了使用 GitHub 的 Action 工具自动部署项目。
什么是 GitHub Action
Action 是 GitHub 提供了的持续集成工具,可以自动对 GitHub 仓库上构建、测试、封装、发行或部署项目。提供了自定义自动化软件设计开发工作流的功能,还可以发现、创建和共享操作,并可以将操作合并到完全自定义的工作流程中。
体验
配置工作流程
创建仓库 test ,在 .github/workflows 目录下创建工作流配置文件,使用 .yml 或 .yaml 文件编辑工作流配置。如 myAction.yml :
1 | name: my-action # 名称 |
上述配置了名为
my-action的Action,将在推送代码到master分支时触发工作任务,任务执行平台为最新的 Ubuntu 平台
提交代码查看效果
提交代码到 test 仓库的 master 分支,点击 Actions 标签,将展示工作执行结果:

点击下方的记录,查看详情:

点击 build 查看构建的日志详情:

查看输出的日志,可以看到我们在配置文件中定义的任务都被正确执行了。
工作流程配置
GitHub Action 的工作流配置都是以 yaml 文件配置,都需要放到项目仓库下的 .github/workflows 目录下。
任务名称 name
配置文件中以 name 项配置工作流程的名称,将在仓库操作页面展示该名称。如果省略 name 将设置为相对于仓库根目录的工作流程文件路径。
触发条件 on
on 项配置工作流触发事件,值可以是单一事件、事件数组、事件类型数组或事件配置 map。
任意推送代码到任意分支时触发
1 | on: push |
在 push 或 pull 时触发
1 | on: [push, pull_request] |
推送到指定分支时触发
1 | on: |
定时触发
定时触发的最小间隔是 5 分钟。如下为每 30 分钟触发一次:
1 | on: |
环境变量 env
env 项目用于配置环境变量,可用于工作流中所有作业和步骤,还可以设置为仅适用于作业或步骤的环境变量。如:
1 | env: |
默认设置 defaults
将应用到工作流程中所有作业的默认设置,如果有多个默认设置时,以最近的为准。
工作任务 jobs
jobs 用于定义一项或多项作业,作业默认是并行运行,可以在作业配置中 need 项中指定依赖的作业项。
每项作业有必须关联一个唯一的 ID,ID 为字符串,必须以字母或下划线开头,只能包含字母、数字、下划线 _ 或横杠 - ,如:
1 | jobs: |
工作任务中的配置项
工作任务中的配置项是定义在 jobs.<job_id> 下的配置项。
runs-on
指定运行的环境,取值:
| 值 | 虚拟环境 |
|---|---|
windows-latest 或 windows-2019 |
Windows Server 2019 |
ubuntu-20.04 |
Ubuntu 20.04 |
ubuntu-latest 或 ubuntu-18.04 |
Ubuntu 18.04 |
ubuntu-16.04 |
Ubuntu 16.04 |
macos-latest 或 macos-10.15 |
macOS Catalina 10.15 |
name
指定任务名称,在查看执行日志时显示
need
指定当前任务之前必须完成的作业,可以是一个任务ID或任务ID数组,如:
1 | jobs: |
outputs
定义此作业的输出内容,供下游作业使用。如:
1 | jobs: |
if
指定作业运行的条件,只有满足条件才会执行。如:
1 | jobs: |
steps
定义一系列任务步骤,步骤将顺序执行,如果一个失败随后的任务将不执行。在步骤中可以运行命令、运行设置任务,或者运行个人仓库、公共仓库中的操作或 Docker 注册中发布的操作。
1 | jobs: |
steps 中一些常用配置项:
uses:使用自定义或 github 社区提供的操作
uses.with:为使用的操作添加附加条件
id:步骤的 ID ,方便引用
name:为步骤命名
run:运行命令,如果是多条命令使用|符号标识,如:
1
2
3
4
5
6 - name: Run a one-line script # 自定义任务名
run: echo Hello, world! # 自定义任务命令,打印 Hello, world!
- name: Run a multi-line script
run: |
echo Add other action to build,
echo test, and deploy your project.
timeout-minutes
指定超时时间,默认值为 360 分钟。
使用密码
在构建与部署过程中,我们可能需要用的一些加密信息,这时我们需要在仓库设置中添加加密信息,需要输入名称和值。

在使用密码时,可以作为输入参数或者环境变量,如使用名为 MY_PWD 的加密信息:
1 | steps: |
使用预置的操作
操作是一系列特定作业步骤的组合,可以完成特定的任务,可以创建自己的操作,也可以使用 github 社区分享的操作。比如使用官方的检出仓库的操作:
1 | - uses: action/checkout@2 # action 为作者,这里是github官方,checkout 是操作名,@2 是指定操作版本为 2 |
当在线编辑 action 工作流配置文件时,在编辑页面右侧的 Marketplace 选项卡中可以检索社区分享的操作,点击后可查看操作的介绍。

更多的操作可以到 github marketplace 中的 action 类别中查找:https://github.com/marketplace?type=actions
实战
背景:项目是一个 hexo 博客,在 github 仓库中
source分支存储模块资源与配置信息。现在需要每次提交代码到 source 分支时触发工作流,完成博客自动编译,编译前需要下载博客主题并替换配置文件,编译完成后将项目打包,通过 sftp 上传到服务器。
配置详情:
1 | # 名称 |
以上配置完全复制了手动打包部署的全过程,其中有些可以进行优化,比如对 npm 组件加上缓存提升打包速度;在
.gitmodules中配置 next 主题项目为子模块,以便在检出项目代码的同时也拉取 next 主题的代码。
工具
act,github 中的一个开源项目,可以在本地运行 Github Action,在调试的时候非常方便。
项目地址:https://github.com/nektos/act
参考资料
- GitHub 操作文档: https://docs.github.com/cn/actions
总结
GitHub 提供的 action 可以免费使用,而且配置简单,还能使用别人分享的配置,可以替换 Travis CI 完成项目的自动构建与部署。