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

参考

  • Act stopped working when I moved to a Apple Silicon Mac

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/651738.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

身份认证页面该怎么设计更加合理?

一、认证页面的作用 认证页面在应用程序中具有以下几个重要的作用: 验证用户身份:认证页面的主要作用是验证用户的身份。通过要求用户提供正确的凭据(如用户名和密码、生物特征、验证码等),认证页面可以确认用户是合法…

使用华为快传同步文件至电脑

使用华为快传同步文件至电脑,电脑端未发现设备解决办法 1、手机和电脑连同一网络 2、打开手机华为分享,打开电脑网络 3、网络中找到设备,输入账户密码进行连接(未找到设备往下继续看) 未找到设备解决办法&#xff1…

图解 Transformer

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

拿捏数据结构- 链式二叉树

链式二叉树的概念: 链式二叉树解决的是非完全二叉树解决不了的问题 什么意思呢,简单的说就是,链式二叉树 可以是下面三种二叉树 但是非链式二叉树只能是前两种 链式二叉树的存储 节点结构:首先定义一个结构体或类来表示二叉树的节…

Java跨Docker容器备份数据库数据

Java跨Docker容器备份数据库数据 前置背景思路整理编写备份脚本容器启动检验效果Java容器MySQL容器 Java代码执行备份 我的个人博客:Lichg,欢迎大家访问。 前置背景 在我们的开发部署场景中,通常多数使用Docker进行部署。当你的数据库和项目…

Ubuntu22.04之扩展并挂载4T硬盘(二百三十三)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

Java | Leetcode Java题解之第115题不同的子序列

题目&#xff1a; 题解&#xff1a; class Solution {public int numDistinct(String s, String t) {int m s.length(), n t.length();if (m < n) {return 0;}int[][] dp new int[m 1][n 1];for (int i 0; i < m; i) {dp[i][n] 1;}for (int i m - 1; i > 0; …

文刻创作ai工具官网免费工具

文刻创作ai工具官网免费工具 Docshttps://iimenvrieak.feishu.cn/docx/O0UedptjbonN4UxyEy7cPlZknYc 文刻是一种可以帮助用户进行创作的AI工具。 它使用自然语言处理和机器学习技术&#xff0c;可以生成文章、故事、诗歌等文本内容。 用户可以通过输入一些关键词或指定一定的…

MobaXterm连接eNSP设备

1、开启一台交换机 2、右键设置查看交换机串口号&#xff08;2000&#xff09; 3、打开MBX&#xff0c;点击session。 4、配置MBX 5、右键点击 6、配置为force off&#xff0c;点击回车就可以看到效果了

Golang | Leetcode Golang题解之第116题填充每个节点的下一个右侧节点指针

题目&#xff1a; 题解&#xff1a; func connect(root *Node) *Node {if root nil {return root}// 每次循环从该层的最左侧节点开始for leftmost : root; leftmost.Left ! nil; leftmost leftmost.Left {// 通过 Next 遍历这一层节点&#xff0c;为下一层的节点更新 Next …

损失函数篇 | YOLOv8更换损失函数之Inner-IoU | 通过辅助边界框计算IoU损失

前言:Hello大家好,我是小哥谈。损失函数是机器学习中用来衡量模型预测值与真实值之间差异的函数。在训练模型时,我们希望通过不断调整模型参数,使得损失函数的值最小化,从而使得模型的预测值更加接近真实值。为弥补现有IoU损失函数在不同的检测任务中的泛化能力较弱且收敛…

HTTPS加密过程

今天我们说https具体工作原理。 HTTPS概念 HTTPS是一种网络协议&#xff0c;传统的HTTP是明文传输&#xff0c;非常 不安全&#xff0c;所以HTTPS是基于HTTP基础上进行加密传输内容。 HTTPS使用加密传输方式 第一种是非对称加密&#xff0c;是前期建立连接时候使用的数据加密…

Golang | Leetcode Golang题解之第115题不同的子序列

题目&#xff1a; 题解&#xff1a; func numDistinct(s, t string) int {m, n : len(s), len(t)if m < n {return 0}dp : make([][]int, m1)for i : range dp {dp[i] make([]int, n1)dp[i][n] 1}for i : m - 1; i > 0; i-- {for j : n - 1; j > 0; j-- {if s[i] …

R实验 正交试验设计与一元线性回归分析

实验目的&#xff1a; 掌握正交试验设计记号的意义&#xff1b;掌握正交试验设计的直观分析和方差分析&#xff1b;掌握一元线性回归模型的相关概念&#xff1b;掌握最小二乘法的思想&#xff1b;掌握一元线性回归方程的显著性检验和预测。 实验内容&#xff1a; &#xff11;…

Python | Leetcode Python题解之第116题填充每个节点的下一个右侧节点指针

题目&#xff1a; 题解&#xff1a; class Solution:def connect(self, root: Node) -> Node:if not root:return root# 从根节点开始leftmost rootwhile leftmost.left:# 遍历这一层节点组织成的链表&#xff0c;为下一层的节点更新 next 指针head leftmostwhile head:#…

mumu 模拟器安装

1.下载安装 下载地址 Win 历史版本&#xff1a;http://mumu.163.com/update/win/Mac 历史 版本&#xff1a;http://mumu.163.com/20200515/25905_880858.html 2.设置为竖屏 在设置中心--界面设置页面设置宽720&#xff0c;高1280&#xff0c;DPI为240&#xff0c;如下图所示。…

Go语言之GORM框架(三)——Hook(钩子)与Gorm的高级查询

Hook(钩子) 和我们在gin框架中讲解的Hook函数一样&#xff0c;我们也可以在定义Hook结构体&#xff0c;完成一些操作&#xff0c;相关接口声明如下&#xff1a; type CreateUser interface { //创建对象时使用的HookBeforeCreate() errorBeforeSave() errorAfterCreate() …

C++习题(1)

一、题目描述&#xff1a; 二、代码展示&#xff1a; #include <iostream> #include <iomanip> using namespace std; struct Student{char name[20];int id;int age;float score; }; int main() {int n;cin>>n;Student student[n];float sum0.0;for(int i0…

小易大数据:大数据报告查询领域的黑马,这些优势让你无法忽视!

随着大数据技术被运用到各行各业&#xff0c;风控领域也不例外&#xff0c;形成了基于大数据技术的大数据信用&#xff0c;也就是我们常说的大数据报告或者网贷大数据&#xff0c;在众多的查询平台中&#xff0c;小易大数据平台在市面上是比较受欢迎的&#xff0c;那在小易平台…

JAVASE2

封装的步骤&#xff1a; 1、所有属性私有化&#xff0c;使用private关键字进行修饰&#xff0c;private表示私有的&#xff0c;修饰的所有数据只能在本类中访问 2、对外提供简单入口&#xff1a;比如说被private修饰的成员变量&#xff0c;在其他类中只能通过getXxx/setXxx方法…