一、一些概念
持续集成(Continuous integration)
频繁地向一个共享仓库提交少量代码变更的软件开发实践。 使用 GitHub Actions,可以创建自定义的 CI 工作流,以自动构建并测试你的代码。 从你的仓库中,你可以查看代码变更的状态和工作流中每个操作的详细日志。 CI 通过提供代码变更的及时反馈来更快地检测并解决 bugs,从而节省开发人员的时间。
持续部署(Continuous deployment)
持续部署建立在持续集成的基础上。 当提交新代码和通过你的 CI 测试时,代码将自动部署到生产环境中。 使用 GitHub Actions,可以创建自定义的 CD 工作流,以便从你的仓库自动部署代码到任何云、自托管服务或平台。 CD 通过自动化部署过程节省开发人员的时间,并更快地向你的客户部署经过测试的、稳定的代码变更。
GitHub Actions 的一些术语
(1)workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。
(2)job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。
(3)step(步骤):每个 job 由多个 step 构成,一步步完成。 一个工作中的每个步骤都在相同的虚拟环境中执行,从而允许使用文件系统共享信息。
(4)action (动作):每个 step 可以依次执行一个或多个命令(action)。 你可以创建自己的action、使用 GitHub 社区共享的action。
二、workflow文件
GitHub Actions 的配置文件叫做 workflow 文件,存放在代码仓库的.github/workflows
目录。
workflow 文件采用 YAML 格式,文件名可以任意取,但是后缀名统一为.yml
,比如foo.yml
。一个库可以有多个 workflow 文件。GitHub 只要发现.github/workflows
目录里面有.yml
文件,就会自动运行该文件。
先贴一个完整的示例(没啥实际作用):
name: CI
on:
push:
branches:
- master
- release/*
jobs:
build:
name: My Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run a one-line script
run: echo Hello, world!
- name: Run a multi-line script
run: |
echo Add other actions to build,
echo test, and deploy your project.
- name: Setup Node
uses: actions/setup-node@v1
with:
node-version: '10.x'
1. name
name 定义工作流的名称,对该工作流要完成的任务进行简单的描述.
2. on
on 设置工作流的触发条件,一般指定为 push,表示在每次 git push 操作后自动触发该项目的工作流。
on: [push]
可以让工作流在 master 和 release 分支的 push 事件上运行:
on:
push:
branches:
- master
- release/*
或只在 master 分支的 pull_request 事件上运行:
on:
pull_request:
branches:
- master
也可以设置定时运行计划,在周一到周五每天的 02:00 运行:
on:
schedule:
- cron: 0 2 * * 1-5
3. runs-on
runs-on 指定运行所在操作系统的类型。GitHub Actions 提供 Linux、Windows 和 macOS 来构建运行。
jobs:
build:
runs-on: ubuntu-latest # 表示工作流将在 ubuntu 的最新版本上运行
可用的虚拟机类型如下:
ubuntu-latest,ubuntu-18.04 或 ubuntu-16.04
windows-latest,windows-2019 或 windows-2016
macOS-latest 或 macOS-10.14
4. checkout
这是github官方的一个action,用于clone该仓库的源码到工作流中。
- uses: actions/checkout@v1
在本例中使用 v1 可以确保你使用的是签出操作的一个稳定版本。
要浅层克隆你的仓库或只复制你仓库的最新版本,使用下面的语法设置提取深度(fetch-depth):
- uses: actions/checkout@v1
with:
fetch-depth: 1
5. run
也是一种acton,即在终端中执行的 shell 命令。
- name: make # 定义命令的名称
run: make # 使用 Makefile 来构建项目
- name: dependencies
run: |
sudo apt install mysql-server mysql-client
sudo apt install libmysqlclient-dev
等各种各样的命令,docker命令也可。
workflow 文件的配置字段非常多,详见官方文档。
三、应用实例
使用Nodejs + Github Actions实现一个Weather-Bot,能够自动将当日天气发送到邮箱。
参考链接: