为什么要使用Github Actions?
官话:
GitHub Actions 是一种持续集成和持续交付 (CI/CD) 平台,可用于自动执行生成、测试和部署管道。 您可以创建工作流程来构建和测试存储库的每个拉取请求,或将合并的拉取请求部署到生产环境。
比较直观的实践例子就是比如本地更新代码后要push到github上的远程仓库,那么在我本地push成功那一刻就会在github上自动执行,我们预先设定好的workflows就会自动执行,执行的内容包括但不仅限于执行单元测试(pytest)、打包发布等。
还有一个很重要的功能就是它能提供 Linux、Windows 和 macOS 虚拟机来运行工作流程,也就是说即使我本地是macOS开发的程序,通过这个平台我也模拟在Linux或Windows上我的程序是否可以跑通,还可以通过这些提供的虚拟容器打包跨平台的whl文件;但我未知的是它们是否提供arm64架构下macOS虚拟环境。
GitHub Actions 的组件
上面提到我们可以通过设置workflow,从而在push或者pull这种事件发生时被触发。
官话:
工作流包含一个或多个可按顺序或并行运行的作业。 每个作业都将在其自己的虚拟机运行器中或在容器中运行,并具有一个或多个步骤,用于运行定义的脚本或运行动作。动作是一个可重用的扩展,可简化工作流 。
workflow
workflow在我们仓库的 .github/workflows 目录中定义,仓库可以有多个workflow,每个workflow都可以执行不同的任务集。
Events
事件是存储库中触发工作流程运行的特定活动。比如pull,push
Jobs
job是workflow中在同一运行器上执行的一组步骤。每个步骤要么是一个将要执行的 shell 脚本,要么是一个将要运行的动作。 步骤按顺序执行,并且相互依赖。默认情况下,作业没有依赖关系,并且彼此并行运行。 当一个作业依赖于另一个作业时,它将等待从属作业完成,然后才能运行。
每个job有一个id,其实就是
jobs:
my_first_job:
name: My first job
my_second_job:
name: My second job
依赖关系定义:
使用 jobs.<job_id>.needs 定义每个job的前后定义关系
比如下面这个例子就代表job2必须在job1执行完后才执行,job3需要在job1、job2执行后才能完成。
jobs:
job1:
job2:
needs: job1
job3:
needs: [job1, job2]
Actions
action是GitHub Actions平台的自定义应用程序,用于执行复杂但经常重复的任务。它带来的好处是减少重复工作。
Runners
Runner是在触发工作流时运行工作流的服务器,就是上面提到的虚拟环境。
官方案例解析
这是在我们git仓库目录下的 .github/workflows/learn-github-actions.yml
name: learn-github-actions
run-name: ${{ github.actor }} is learning GitHub Actions
on: [push]
jobs:
check-bats-version:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '14'
- run: npm install -g bats
- run: bats -v
上面比较重要的字段:
on: 触发这个workflow运行的事件,这里是push
jobs:类似一个标记,代表jobs:下面的是一系列要执行的工作
check-bats-version:定义名为check-bats-version的作业。子键将定义这个作业的属性。
runs-on: ubuntu-latest:将作业配置为在最新版本的Ubuntu Linux运行器上运行。
steps:将check-bats-version这个job中运行的所有step组合在一起。
- uses: actions/checkout@v3:uses关键字指定此步骤将运行actions/checkout操作的v3
- uses: actions/setup-node@v3
with:
node-version: '14'
此步骤使用actions/setup-node@v3操作来安装指定版本的Node.js(本例使用v14)。这将把node和npm命令放在PATH中。
- run: npm install -g bats:run关键字告诉作业在运行程序上执行命令。
关于uses字段含义
这个字段代表使用别人预先写好的github action,将它们引入我们目前写的workflow中,github已经预先定义好了一些常用的actions,当然也可以复用自己仓库内部事先写好的action,或者是Docker Hub上发布的Docker容器镜像
参考文档:https://docs.github.com/en/actions/learn-github-actions/finding-and-customizing-actions