一、Github Action 简介

在软件开发的世界里,我们都希望能够更高效地进行代码开发、测试和部署。Github Action 就像是一个智能助手,能在我们的 Github 仓库中自动完成各种任务。它可以在代码有新的推送、Pull Request 被创建等事件发生时,自动执行一系列预先设定好的步骤,比如运行测试用例、检查代码质量、构建项目,甚至将项目部署到服务器上。

二、核心概念与基础示例

1. 核心概念

  • 工作流(Workflow) :这是整个自动化流程的蓝图,就像一个任务清单,用 YAML 格式写好放在仓库的.github/workflows 目录下。它规定了在什么情况下触发任务以及任务的执行顺序。
  • 作业(Job) :工作流里可以包含一个或多个作业,每个作业就像是一个独立的工作单元,在特定的环境中运行。
  • 步骤(Step) :作业又是由一个个步骤组成的,每个步骤就是一个具体要做的事情,比如运行一条命令或者执行一个脚本。

2. 基础示例

假设我们有一个 Python 项目,下面是一个简单的 Github Action 工作流,用于在代码推送到主分支时自动运行测试:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
name: Python Tests

on:
  push:
    branches:
      - main

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: 3.9

      - name: Install dependencies
        run: pip install -r requirements.txt

      - name: Run tests
        run: pytest

在这个例子中:

  • name 定义了这个工作流的名字叫 “Python Tests”。
  • on 表示这个工作流会在主分支有代码推送时触发。
  • jobs 里的 test 作业会在 ubuntu-latest 这个系统环境里运行。
  • 步骤里先把代码从仓库里拉取出来(actions/checkout@v3),然后设置好 Python 3.9 的环境(actions/setup-python@v4),接着安装项目依赖(pip install -r requirements.txt),最后运行测试用例(pytest)。

三、常用操作与配置

1. 触发事件多样化

除了代码推送,还可以根据其他事件触发工作流。比如:

1
2
3
4
on:
  pull_request:
    branches:
      - main

这就会在有针对主分支的 Pull Request 时触发工作流。

2. 环境变量巧设置

我们可以在工作流里设置环境变量,让步骤里的命令可以使用。例如:

1
2
3
4
5
6
7
jobs:
  build:
    env:
      API_KEY: "your_secret_api_key"
    steps:
      - name: Use API Key
        run: echo $API_KEY

3. 依赖缓存提速度

为了让每次构建更快,可以缓存依赖。对于 Python 项目:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
jobs:
  build:
    steps:
      - name: Cache pip dependencies
        uses: actions/cache@v3
        with:
          path: ~/.cache/pip
          key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}
          restore-keys: |
            ${{ runner.os }}-pip-

四、与第三方工具集成

Github Action 可以和很多第三方工具配合。比如和 AWS 结合进行项目部署:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
jobs:
  deploy:
    steps:
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      - name: Deploy to AWS
        run: aws s3 cp. s3://your-bucket-name --recursive

这里先配置 AWS 的认证信息,然后把项目文件上传到 AWS S3 存储桶。

五、工作流复用与共享

我们可以创建可复用的工作流 action。比如创建一个名为 python-lint-action 的 action 来检查 Python 代码风格。

  1. 在仓库中创建 .github/actions/python-lint-action 目录。
  2. 在该目录下创建 action.yml 文件:
1
2
3
4
5
6
7
name: Python Lint
description: Lint Python code
runs:
  using: "docker"
  image: "python:3.9-slim"
  args:
    - flake8.

然后其他 Python 项目就可以这样使用这个 action:

1
2
3
4
5
6
jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - name: Python Lint
        uses: your-repo/python-lint-action@v1

六、调试与故障排除

  1. 日志查看 :当工作流运行后,在 Github 仓库的 Actions 页面可以看到详细的日志。从日志里可以看到每个步骤的执行情况,比如命令的输出、错误信息等,这有助于我们找出问题所在。
  2. 调试命令添加 :在步骤里可以添加一些调试命令,比如 echo 输出变量的值,或者在脚本中添加一些打印语句来查看中间结果。

七、总结

Github Action 为 Python 项目的开发带来了极大的便利,通过自动化各种任务,不仅提高了开发效率,还能保证代码质量和部署的一致性。无论是小型的个人项目还是大型的团队协作项目,掌握 Github Action 都能让你的开发工作更加得心应手。希望这个教程能够帮助你快速入门,开启你的 Github Action 自动化之旅。