第九章 持续集成CI:基于GitHub的Action回归验证

news2025/2/28 0:28:04

第九章 持续集成CI:基于GitHub的Action回归验证

持续集成可以认为是一种优秀的开发实践,它可以在代码变更的时候及时反映代码状态。持续集成需要服务器的支持,可以考虑通过 gitlib ci 或者 jenkins 自己搭建持续集成服务器,更好的办法是使用第三方的持续集成服务,目前比较流行的有:

  • Travis CI , 官网地址

  • Circle CI , 官网地址

  • GitHub Action , 官网地址

对于开源项目来讲由于代码无需闭源,完全可以使用第三方持续集成服务。


本章任务

  • 创建工作流 Workflow
  • 创建 Job
  • 运行 CI 服务;

Github Action 是一个集成服务,你可以认为它是一台远程运行的服务器。为了让同一台服务器为不同用户提供独立的配置,互不干扰,需要通过容器化技术实现虚拟机。也就是说使用 Github Action,其实就是在使用虚拟机。更准确地讲,其实就是在配置一个容器,它的配置非常类似于配置 Docker 容器配置。


task1】创建工作流 workflow

Github Action 的配置文件需要放在项目根目录下的 .github/workflows 中,每一个配置文件是一个工作流 Workflow 。一个工作流是可以配置多个自动化任务 (Job) 的。

比如,组件库的持续集成分为两个任务 (Job) 。一个任务是运行单元测试进行回归校验,另外一个是自动运行 lint 脚本校验代码风格。 这两个任务之间并没有先后关系,而且可以并行运行。这个时候就可以新建一个工作流并且配置两个任务。

首先创建一个yaml文件(文件名随意),编写 name 属性,name 属性最终会被显示到 Action 的执行界面中。

在这里插入图片描述

然后是确定触发器。所谓的触发器是指什么时候运行这个工作流 (Workflow),比如设置 pushpull_request 时触发,就是在 Github 收到 push 代码时和 pull_request 请求时触发。

我这里文件命名:main.yml, 路径:.github/workflows/main.yml

name: CI
on:
  push:
    branches: [ master ] // github默认分支是main,我这里是master
  pull_request:
    branches: [ master ] // github默认分支是main,我这里是master
jobs:
  Lint:
    # Lint任务
  UnitTest:
    # 单元测试任务

task2】创建 Job

下面来具体配置每一个Job。 Job 其实是一个运行任务,我们以 UnitTest 单元测试任务举例。

首先需要确定 Job 的 name,这个也会显示在执行界面中。

在这里插入图片描述

设定 runs-on 属性

run-on 是为了指定运行环境(Linux or Mac),其实你可以认为是这个任务虚拟机的环境,Github 可用的虚拟机有:

  • windows-(xxx version)
  • ubuntu-(xxx version)
  • Macos-(xxx version)

设置job的执行步骤

每一个 job 又包含多个 step, 每一个 step 是串行执行的。

你可以假定,在一个空的操作系统上,如果你想进行单元测试,则需要完成如下任务:

  • 安装 git 软件;
  • 检出 checkout 项目代码;
  • 安装 pnpm 软件;
  • 使用 pnpm 安装项目代码的依赖库;
  • 运行 pnpm run test

编写 step 可以使用下面三个方式:

  • run: 执行 shell 命令行命令;
  • env: 设置环境变量;
  • uses: 运行第三方 Action 脚本。

示例:

命令行是一种最好理解的执行方式,比如运行测试:

pnpm run test:run

你可以这样设置:

    - name: Run Test
      run: pnpm run test:run

但是对于一些比较复杂过程,自己配置起来就比较繁琐了,比如安装git。

首先要考虑不同系统,也需要确定是否有比如 apt-get 或 yum 等包管理工具。还需要运行安装并配置相应的环境变量。好在这些复杂操作大多数还是通用过程,这个时候就会用到 uses 来显神威了。

uses 可以用于Action。Action 可以认为是Github 提前写好的一些常用的脚本,当然这些脚本也支持自己定义。

marketplace

在这里插入图片描述

常见的通用操作包括:

  • 部署 (AWS 、App Engine 等各种云);
  • 代码 Review ;
  • 代码质量检测;
  • 监控;
  • 通知 (短信、飞书通知、钉钉)。

每个项目都遇到的常用操作,比如 checkout 检出代码、安装 pnpm 依赖等等,这些步骤显然不需要自己编写,直接使用脚本就可以了。

name: CI
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]
jobs:
  # Lint:
    # Lint任务
  UnitTest:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest
    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      - uses: actions/checkout@v2
      - uses: pnpm/action-setup@v2.1.0
        with:
          version: 7.2.1
      - name: Install modules
        run: pnpm install
      - name: Run Test
        run: pnpm run test:run

其中运行单元测试的命令还进行了一些修改,因为 vitest 是默认伺服模式,也就是说,它不会在运行完成后退出,所以就需要增加一个非伺服模式的命令。

"scripts": {
    "test:run": "vitest run",
  },

task3】运行 CI 服务

运行 GitHub Action 比较简单,只需要将工作流配置文件提交并且 pushGithub 就可以了。

根据触发器的配置,持续集成脚本会在每次提交 push 代码的时候触发。

在这里插入图片描述
在这里插入图片描述
运行成功的话会显示绿色对钩。

如果失败,那么就会显示 ❌ 并且自动发送邮件通知。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM的地方文创特产在线商城【数据库设计、源码、开题报告】

数据库脚本下载地址: https://download.csdn.net/download/itrjxxs_com/86468623 主要使用技术 SpringSpringMVCMybatisBootstrapMysql 功能介绍 前台: 注册登录:普通用户可进行注册登录; 商品显示:游客可查看今日…

在CentOS 7.7 x86_64上为python 2.7.5安装pip的靠谱方法

我的虚拟机是CentOS 7.7 x86_64系统,对应的python默认版本是2.7.5,但是没有安装pip,不方便安装第三方模块。 我想为为它安装pip工具,发现现有的安装方法都行不通了,比如先安装easy_install,再通过easy_inst…

矩阵分解算法

文章目录0 前言1. 矩阵分解原理1.1 LFM公式推导LFM损失函数算法关键代码实现1.2 BiasSVD1.3 SVD参考0 前言 在协同过滤算法中 我们知道近邻协同过滤算法的显著缺点: 没有充分利用物品本身的属性信息处理稀疏矩阵能力很弱,泛化能力很弱 为了解决以上问…

Flink-窗口概念以及窗口API使用

6.3 窗口 6.3.1 窗口的概念 存储桶 水位线只是用来推动窗口的关闭,但不决定数据分到哪个窗口 6.3.2 窗口的分类 按照驱动类型分类 时间窗口计数窗口 按照窗口分配数据的规则分类 滚动窗口:参数为窗口的大小 滑动窗口:参数为窗口大小&am…

[CVPR2022] Debiased Learning from Naturally Imbalanced Pseudo-Labels

Debiased Learning from Naturally Imbalanced Pseudo-Labels 要点: 1、伪标签:由经过标记源数据训练的分类器,对未标记目标数据做出的置信预测,被广泛应用于使模型适应未标记数据,例如半监督学习 2、由于固有的数据…

bat批处理脚本大全

目录 1、echo 2、注释 3、常见cmd命令 4、参数与变量 5、for循环 6、函数 7、数组 在windows上编程或者制作一些小工具,少不了使用批处理脚本,而且在各种开发环境搭建中我们经常会看到批处理脚本。批处理脚本以cmd命令为基础,增加一些变量和参…

【学生毕业设计】基于web学生信息管理系统网站的设计与实现(13个页面)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

【计算机毕业设计】50.课程设计管理系统

一、系统截图(需要演示视频可以私聊) 摘 要 网络的广泛应用给生活带来了十分的便利。所以把课程设计管理与现在网络相结合,利用JSP技术建设课程设计管理系统,实现课程设计管理的信息化。则对于进一步提高课程设计管理发展&#x…

【图像分割】基于神经气体网络 (NGN)实现图像分割附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

华为开源自研AI框架昇思MindSpore应用实践:DCGAN生成漫画头像

目录一、原理说明1.GAN基础原理2.DCGAN原理二、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例三、数据准备与处理1.数据处理四、创建网络1.生成器2.判别器3.损失和优化器4.优化器五、训练模型六、结果展示本教程是通过示例代码说明DCGAN网络如何设置网络、优化器、…

Pytorch学习笔记 (参考官方教程)

参考: pytorch官网教程 文章目录一、快速开始(Quick Start)数据处理(Working with data)创建模型(Creating Models)优化模型参数(Optimizing the Model Parameters)保存模…

光环:研发云搭建及人才梯队建设——姚冬

摘要:文章内容主要来源于光环国际2022年第三届中国科创者大会姚冬老师的分享,原分享名称为"数字化时代的研发效能建设"。讲述了华为在研发上整套流程规范,通过云的方式去实现人机协同,保持人去做创新型工作。对人才梯队…

方形平板振动克拉尼图形可视化计算MATLAB程序(Chladni Patterns)

方形平板振动克拉尼图形可视化计算MATLAB程序(Chladni Patterns)0前言1 数值时域求解1.1 方程建立1.2 数值差分方程建立1.3 计算结果2 简单的波动解3 理论求解惯例声明:本人没有相关的工程应用经验,只是纯粹对相关算法感兴趣才写此…

云计算技术架构-云计算四种模式(公有云、私有云、混合云、行业云)

接下来几篇主要从技术角度介绍云计算的架构:  云计算四种模式:公有云、私有云、混合云和行业云(本文讲述) 云计算架构:基础架构层、云平台层、业务应用层和业务管理层  云计算服务模式:IaaS、PaaS和…

Python按单元格读取复杂电子表格(Excel)数据实践

Python读取电子表格方法 本文所使用电子表格的目标是读取、解析来自Excel编制的数据报表,或者软件界面导出的数据报表,这类电子表格报表显著特点是有一定的格式,且数据位置不连续,而非标准二维数据表。 关于电子表格&#xff0c…

基于粒子群算法的配电网重构研究matlab程序

基于粒子群算法的配电网重构研究matlab程序 参考文献:基于改进灰狼算法的含分布式电源配电网重构研究 (本文未考虑分布式电源) 摘要:使用基本环矩阵编码的智能优化算法在处理配电网重构问题中,通常使用无序的解空间&a…

机械硬盘,Win10系统,磁盘100%

问题描述 使用机械硬盘,装了Win10系统,打开文件夹或程序,非常的慢,通过任务管理器查看性能,显示磁盘一直处于100%的状态。电脑概览如下: 电脑型号 技嘉 B460MAORUSPRO 操作系统 Microsoft Windows 10 专业…

PyQt5学习笔记--多线程处理、数据交互

目录 1--引入多线程的原因 2--PyQt多线程的基本知识 3--多线程登录程序的实例 4--参考 1--引入多线程的原因 ① 如果Qt只采用单线程任务的方式,当遇到数据处理慢的情形时,会出现GUI卡死的情况。 ② 使用下述例子展示单线程任务的缺陷: …

Java学习之继承的本质(重要)

目录 目录 一、一个继承的代码案例 二、子类创建的内存布局 三、查找顺序 一、son.name的输出结果 二、son.age的输出结果 三、son.hobby的输出结果 一、一个继承的代码案例 package com.hspedu.entends_;/*** 讲解继承的本质*/ public class ExtendsTheory {public sta…

Spring Boot 项目的创建和简单使用

目录 1. 什么是 Spring Boot, Spring Boot 框架有什么优点 2. Spring Boot 项目的创建 2.1 在 IDEA 下安装 Spring Boot Helper 插件: 2.2 创建 Spring Boot 项目: 2.3 网页版创建 Spring Boot 项目 3. Spring Boot 通过路由映射到本地程序 1. 什么是 Spring Boot, Spring …