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/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中运行。

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值