背景
Github提供了免费的Actions执行workflows工作流,在CI/CD场景下可用于跑测试用例、构建、打包、部署/发版等操作。
使用介绍
工作流简介
- 1个project可以配置多个
workflow
,每个workflow使用一个yaml文件配置; - 单个workflow可以配置多个
jobs
; - 单个job可以配置多个
steps
; - step中定义要执行的环境和命令。
配置文件
项目中新建.github/workflows
目录,按照yaml
文件配置工作流,目录结构如下:
.github
└── workflows
├── pre-commit.yml
└── test-py3.yml
yaml文件配置语法详见 GitHub Actions 的工作流语法 。
pre-commit.yml
示例:
name: pre-commit
on:
push:
branches:
- master
pull_request:
jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-python@v5
with:
python-version: "3.9"
- uses: pre-commit/action@v3.0.1
test-py3.yml
示例:
name: unit testing
on:
push:
branches:
- master
paths-ignore:
- 'docs/**'
- 'README.md'
pull_request:
paths-ignore:
- 'docs/**'
- 'README.md'
workflow_dispatch:
jobs:
build:
services:
redis: # 跑测试用例有依赖redis
image: redis
ports:
- 6379:6379
runs-on: ubuntu-20.04
strategy:
matrix:
python: [ "3.9", "3.10", "3.11", "3.12" ] # 可以配置多版本测试
steps:
- uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}
- name: Install tox and any other packages
run: pip install tox coveralls
- name: Run tox targets for ${{ matrix.python }}
run: tox run -e py$(echo ${{ matrix.python }} | tr -d .) # 结合tox跑测试用例
- name: Upload coverage # 上传测试覆盖度
if: ${{ matrix.python == '3.9' }}
env:
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
run:
coveralls
上面示例还是用到了redis
服务,在测试用例中,可以直接使用127.0.0.1:6379
进行使用;关于Actions中运行redis/mysql等服务,可以参考关于服务容器
部分配置说明
strategy
可以定义矩阵变量,可以是多维,一般用于多版本测试。
runs-on
定义步骤运行的基础环境,使用Docker镜像。
uses
定义执行的步骤,目前已有很多开源的actions可供使用,对一些常用的操作进行了封装,详见 actions marketplace
例如:
actions/checkout@v4
封装定义了pull代码actions/setup-python@v5
可用于指定安装的python版本pre-commit/action@v3.0.1
定义了pre-commit的环境执行脚本
机密信息配置
例如 test-py3.yml
配置中,上传测试覆盖度环境变量有用到${{ secrets.COVERALLS_REPO_TOKEN }}
,这个是用于请求三方的一个Token。
类似这种机密信息不能直接放在公开的代码中,容易造成泄露。这类信息我们可以通过Github提供的 secrets
配置进行设置即可。
设置过程如图:
详细查看 在 GitHub Actions 中使用机密
本地运行
yaml配置每次push到github后运行测试,效率非常慢,所以需要有本地能够运行测试的方式。
使用工具 act ,MAC电脑可以使用brew install act
进行安装,使用说明详见https://nektosact.com
act的运行依赖Docker
,Mac支持桌面版本 Install Docker Desktop on Mac
,直接下载安装执行act
命令即可。
出现的问题
问题1
Mac M芯片
的执行,需要制定容器架构
act --container-architecture linux/amd64
问题2
执行报错:
FATA[0000] Error loading from ./.env: read ./.env: is a directory
主要是当前是Python项目, .env
是Python的虚拟环境目录,而act执行会默认加载本地.env文件的环境变量进行执行。
一般环境变量配置一些私钥的使用。
可添加参数--env-file .env.local
指向一个不存在的文件或是真实需要的环境变量文件即可。
最终执行
act --container-architecture linux/amd64 --env-file .env.local -W .github/workflows/test-py3.yml
其中-W
是可以指定具体的yaml运行单个workflow。
更多参数可以 act -h
本地执行成功了,可以顺利push到Github中运行。
参考
- Act stopped working when I moved to a Apple Silicon Mac