0


Github Actions/workflow的使用

背景

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/[email protected]
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/[email protected] 定义了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
标签: github workflows

本文转载自: https://blog.csdn.net/kuailebeihun/article/details/139250042
版权归原作者 SkylerHu 所有, 如有侵权,请联系我们删除。

“Github Actions/workflow的使用”的评论:

还没有评论