前言
这几天在写Flutter的时候突然想到用Actions来实现持续部署,虽然Flutter有提供参考的Actions,但是写的我看不懂,所以就自己写了一个,这里记录一下Actions的语法.
计费规则
免费额度
账户类型 | 中文名称 | 存储库类型 | 存储空间 | 原始分钟数 | Linux(换算后) | Windows(换算后) | macOS(换算后) |
---|---|---|---|---|---|---|---|
GitHub Free | 免费版 | 公共仓库 | 免费 | 免费 | 免费 | 免费 | 免费 |
GitHub Free | 免费版 | 私有仓库 | 500 MB | 2,000 | 2,000 | 1,000 | 200 |
组织的 GitHub Free | 组织免费版 | 公共仓库 | 免费 | 免费 | 免费 | 免费 | 免费 |
组织的 GitHub Free | 组织免费版 | 私有仓库 | 500 MB | 2,000 | 2,000 | 1,000 | 200 |
GitHub Pro | 专业版 | 公共仓库 | 免费 | 免费 | 免费 | 免费 | 免费 |
GitHub Pro | 专业版 | 私有仓库 | 1 GB | 3,000 | 3,000 | 1,500 | 300 |
GitHub Team | 团队版 | 公共仓库 | 免费 | 免费 | 免费 | 免费 | 免费 |
GitHub Team | 团队版 | 私有仓库 | 2 GB | 3,000 | 3,000 | 1,500 | 300 |
GitHub Enterprise Cloud | 企业云版 | 所有仓库 | 50 GB | 50,000 | 50,000 | 25,000 | 5,000 |
超出后计费
操作系统 | vCPU | 每分钟费率(美元) |
---|---|---|
Linux | 2 | 0.008 |
Linux | 4 | 0.016 |
Linux | 8 | 0.032 |
Linux | 16 | 0.064 |
Linux | 32 | 0.128 |
Linux | 64 | 0.256 |
Windows | 2 | 0.016 |
Windows | 8 | 0.064 |
Windows | 16 | 0.128 |
Windows | 32 | 0.256 |
Windows | 64 | 0.512 |
macOS | 3 | 0.08 |
macOS | 12 | 0.32 |
查看资源使用情况
登录GitHu后点击这里,滑倒中间部分就可以看到资源使用情况
什么是Github Actions
Github Actions是Github提供的一项功能,可以实现持续集成和持续部署,可以在代码提交、Pull Request、Issue等事件触发时执行一些自定义的脚本,比如自动构建、自动测试、自动部署等等.
假如你有一个项目,你想在每次提交代码的时候自动运行一些脚本,那么你可以使用Github Actions来实现,这样你就不用每次都手动运行脚本了,而且你还可以在每次提交代码的时候自动运行一些测试脚本,这样就可以保证你的代码质量了.
格式
一个基础的层级结构如下
name: <workflow-name>
on: <workflow-trigger>
jobs:
<job-id>:
runs-on: <runner-type>
steps:
- uses: <action-id>@<action-version>
with:
<input-id>: <input-value>
- run: <command>
- 工作流(workflows): 在Github Actions厂库的
.github/workflows
文件夹下创建的每一个yml
文件就是一个workflows
(工作流) - 事件(events): 事件是触发工作流的条件,比如
push
事件,当你提交代码的时候就会触发push
事件,这个时候就会触发工作流 - 作业(jobs): 作业是工作流程中一个由一组步骤组成的任务,这些步骤可以在同一台计算机上运行。每个步骤都可以是一个需要运行的 shell 脚本或者一个执行的动作。这些步骤按照一定的顺序执行,并且它们之间可能存在相互依赖的关系。由于这些步骤在同一台计算机上运行,因此它们可以共享数据。例如,可以有一个生成应用程序的步骤,其后跟一个测试已生成应用程序的步骤。
您可以设置作业之间的依赖关系,如果没有设置,则默认情况下每个作业都会并行运行。当一个作业依赖于另一个作业时,它将等待从属作业完成后才能开始运行。例如,对于一个打包作业,可能需要依赖于多个生成应用程序的作业。这些生成应用程序的作业将会并行运行,当它们全部成功完成后,打包作业才能开始运行。
举个例子,假设您正在创建一个网站,并且您需要在每次更新网站时运行一组任务。这些任务包括下载最新的代码,编译代码,运行测试,部署代码,以及重新启动网站。您可以将这些任务组合成一个作业,并按照正确的顺序依次执行它们。如果其中一个任务失败了,整个作业将会停止运行。另外,您可能需要在另一个作业中运行备份任务,以便在出现问题时可以还原网站。这个备份作业可以依赖于主要作业完成后才开始运行
详情看[官方文档](https://docs.github.com/zh/actions/using-jobs - 操作(actions): 可以把操作看作一个函数,你可以不关心具体的执行流程让它帮你完成例如从Github上下载代码、编译代码、运行测试、部署代码等等.通常可以在GitHub Marketplace找到你需要的操作,如果没有你需要的操作,你也可以自己写一个操作,详情看官方文档
创建一个示例工作流
此示例将创建一个工作流,该工作流程就会自动触发一系列命令。 在此工作流中,GitHub Actions 签出推送的代码,安装 bats 测试框架,并运行基本命令来输出 bats 版本:bats -v。
- 在Github上创建一个新的仓库
- 在仓库的
.github/workflows
文件夹下创建一个任意名称的yml
文件,这个文件就是一个工作流 - 在创建好的
yml
文件中输入以下内容
```ymlworkflow的名称
name: learn-github-actions
每次workflow run的显示名称,使用github context变量
run-name: $ is learning GitHub Actions
触发workflow的事件,这里是push事件
on: [push]
workflow中的job列表
jobs:
job的名称 ,可以是任意名称
check-bats-version:
# 运行job的虚拟机环境,此外还提供了macos-latest和windows-latest
runs-on: ubuntu-latest
# job由一个个step组成
steps:
# 使用GitHub提供的checkout action获取代码,也就是使用操作(actions)的概念
- uses: actions/checkout@v3
# 安装指定版本的Node.js
- uses: actions/setup-node@v3
with:
# actions提供了node-version参数,可以指定安装的Node.js版本,具体可以参考该actions文档
node-version: '14'
# 执行npm命令安装bats测试框架
- run: npm install -g bats
# 执行bats命令检查版本
- run: bats -v
```
代码 | 说明 |
---|---|
name: learn-github-actions | 可选 - 工作流的名称,它将显示在 GitHub 存储库的“操作”选项卡中。 |
run-name: $ is learning GitHub Actions | 可选 - 从工作流生成的工作流运行的名称,该名称将显示在存储库的“操作”选项卡上的工作流运行列表中。此示例使用包含 github 上下文的表达式来显示触发了工作流运行的参与者的用户名。有关详细信息,请参阅“GitHub Actions 的工作流语法”。 |
on: [push] | 指定此工作流程的触发器。此示例使用 push 事件,因此每当有人将更改推送到存储库或合并拉取请求时都会触发工作流运行。这是由到每个分支的推送触发的;有关仅在推送到特定分支、路径或标记时运行的语法示例,请参阅“GitHub Actions 的工作流语法”。 |
jobs: | 将 learn-github-actions 工作流中运行的所有作业组合在一起。 |
check-bats-version: | 定义一个名为 check-bats-version 作业。子键将定义作业的属性。 |
runs-on: ubuntu-latest | 将作业配置为在最新版本的 Ubuntu Linux 运行器上运行。这意味着该作业将在 GitHub 托管的新虚拟机上执行。有关使用其他运行器的语法示例,请参阅“GitHub Actions 的工作流语法”。 |
steps: | 将在 check-bats-version 作业中运行的所有步骤组合在一起。此部分下嵌套的每项都是一个单独的操作或 shell 脚本。 |
- uses: actions/checkout@v3 | uses 关键字指定此步骤将运行 actions/checkout 操作的 v3。这是一个将存储库签出到运行器上的操作,允许您对代码(如生成和测试工具)运行脚本或其他操作。每当工作流程将针对存储库的代码运行时,都应使用签出操作。 |
- uses: actions/setup-node@v3 | 此步骤使用 actions/setup-node@v3 操作安装指定的 Node.js 版本(本示例使用 v14)。这会将 node 和 npm 命令都放在 PATH 中。 |
with: | 使用 with 子键传递参数给 actions/setup-node 操作。在本例中,将 node-version 设置为 14。 |
- run: npm install -g bats | run 关键字指示作业在运行器上执行命令。在这种情况下,你使用 npm 来安装 bats 软件测试包。 |
- run: bats -v | 最后,你将使用输出软件版本的参数运行 bats 命令。 |
最后: 提交这些更改并将其推送到您的 GitHub 仓库。您的新 GitHub Actions 工作流程文件现在安装在您的仓库中,每次有人推送更改到仓库时都会自动运行。
常见问题
You’ve used 100% of included services for GitHub Storage
GitHub Actions的工作流程中使用了actions/upload-artifact@v2操作来上传构建生成的文件作为工作流程的输出。导致存储配额即将或者已经超出免费配额.
解决办法
- 将存储库的缓存时间设置为1天
- 将仓库转为公开仓库
- 使用脚本自动清除缓.(博主使用的第一种方法,如果有脚本可以发布在评论区.)