GitHub Actions 是一个持续集成和持续部署 (CI/CD) 平台,它允许您自动化构建、测试和部署您的项目。以下是 GitHub Actions 中的 Workflow(工作流程)的原理:
1. 工作流程文件(Workflow File)
工作流程是由存储在仓库中的 YAML 格式的文件定义的。这些文件通常放在 .github/workflows
目录下。您可以在一个仓库中创建多个工作流程文件,用于执行不同的自动化任务。
2. 触发器(Triggers)
工作流程可以通过各种事件来触发,例如:
push
:当有代码被推送到仓库时。pull_request
:当有人提交一个 pull request 时。issue_comment
:当有人评论一个 issue 时。schedule
:基于预定的时间表。
3. 任务(Jobs)
工作流程由一个或多个任务组成。每个任务是在同一运行器(runner)上执行的一组步骤。
4. 步骤(Steps)
每个任务包含一系列的步骤。步骤可以是执行命令、使用动作(actions)或者设置环境变量。
5. 动作(Actions)
动作是工作流程中的独立命令,可以是社区贡献的或者自定义的。它们是工作流程最小的可移植单元,可以用来执行各种操作,比如设置环境、运行脚本、使用 Docker 容器等。
6. 运行器(Runners)
运行器是一个服务器或者虚拟机,它运行 GitHub Actions 的命令。您可以使用 GitHub 提供的运行器,也可以设置自己的运行器。
工作流程的执行原理:
- 事件触发:当仓库中发生了一个配置了触发器的事件时,GitHub Actions 会检查是否有相关的工作流程文件。
- 检出代码:工作流程开始时,默认的第一步是检出仓库的代码到运行器上。
- 执行任务:根据工作流程文件中的定义,任务会被顺序执行或者并行执行。
- 执行步骤:在每个任务内部,步骤会按照定义的顺序执行。如果某个步骤失败了,默认情况下,该任务会停止,并且工作流程会被标记为失败。
- 使用动作:在步骤中,可以使用预定义的动作来完成特定的任务。
- 访问权限:运行器在执行任务时会使用一个 GitHub 密钥(GITHUB_TOKEN),该密钥拥有对当前仓库的读写权限。
- 日志和通知:工作流程的执行过程会被记录,并且可以通过 GitHub UI 查看日志。此外,还可以配置通知,比如在流程成功或失败时发送邮件。
- 完成:所有任务完成后,工作流程要么成功结束,要么因为错误而失败。
通过这种方式,GitHub Actions 提供了一种灵活、可扩展的方式来自动化软件开发过程中的各个环节。
如果您的项目是基于 Python,并且您想要在 GitHub Actions 工作流程中使用 Python 3.11,您可以按照以下示例来设置 `.github/workflows/ci.yml` 文件:
```yaml
name: Python CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 1
- name: Set up Python 3.11
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run tests
run: |
python -m unittest discover -s tests
以下是工作流程的详细解释:
- name: 工作流程的名称。
- on: 定义了触发工作流程的事件。在这个例子中,它会在向
main
分支 push 代码或创建一个针对main
分支的 pull request 时触发。 - jobs: 定义了要执行的一个或多个作业(在这个例子中只有一个作业)。
- build: 作业的 ID。
- runs-on: 指定运行作业的虚拟机环境,这里使用的是最新版本的 Ubuntu。
- steps: 定义了作业中的步骤。
- actions/checkout@v3: 使用一个社区提供的动作来检出代码。
- actions/setup-python@v4: 使用一个社区提供的动作来设置 Python 环境,指定版本为 3.11。
- Install dependencies: 运行一系列命令来升级 pip 并安装项目依赖,假设你的依赖列表在
requirements.txt
文件中。 - Run tests: 运行命令来执行项目中的测试。这里假设你的测试脚本位于
tests
目录,并且遵循了 Python 的unittest
测试框架的命名约定。
当您将这个文件推送到 GitHub 仓库时,每次对main
分支的 push 或 pull request 都会触发这个工作流程。GitHub Actions 会自动执行定义好的步骤,并在仓库的 “Actions” 选项卡中显示执行的状态和日志。
- build: 作业的 ID。