百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

使用 Hooks 自动化无聊的任务(自定义hooks的坑)

liuian 2025-01-23 18:42 18 浏览

每日分享最新,最流行的软件开发知识与最新行业趋势,希望大家能够一键三连,多多支持,跪求关注,点赞,留言。

GitGuardian 的技术主管之一 Sofien 描述了如何使用预提交挂钩来节省时间并保护公司范围内的提交。

大多数开发人员讨厌做可以自动化的事情。

正如这条推文所强调的,我们经常不得不接受我们做不到这一点。幸运的是,在代码审查的情况下,很多事情确实可以自动化。正如我以前的 CTO 曾经告诉我的那样:

生命太短暂,无法回顾空间!

在开发人员的手指和审阅者的眼睛之间,可以通过两个主要步骤来完成此自动审阅过程:

  • Pre-commit hooks
  • CI jobs

在本文中,我们将重点介绍预提交步骤。我们将看到如何安装和设置预提交钩子,并列出我们在 GitGuardian 使用的前 8 个钩子。

如何设置提交挂钩

从git book中,git hooks 是a way to fire off custom scripts when certain important actions occur.

在预提交钩子的情况下——顾名思义——脚本在提交之前运行,如果它不符合我们的要求,我们可以阻止它。在这一步启动脚本的主要优点是它们甚至可以在进入版本控制系统之前检测到问题,让我们轻松修复它们甚至自动修复它们。

在 GitGuardian,我们使用pre-commitPython 编写的预提交钩子的多语言包管理器。它使在我们的组织中安装和共享钩子变得容易。您会发现用其他语言(例如JavaScript)编写的不错的替代方案。a husky

建立:

  1. 添加pre-commit您的 requirements.txt 或您的 Pipfile(在开发部分中)。
  2. 添加包含所需挂钩列表的预提交配置文件.pre-commit-config.yaml。这是文档中的一个示例:

repos:- repo: https://github.com/pre-commit/pre-commit-hooks rev: v2.3.0 hooks: - id: check-yaml - id: end-of-file-fixer - id: trailing-whitespace- repo: https://github.com/psf/black rev: 21.12b0 hooks: - id: black


您可以在此处找到常用钩子列表。

3.pre-commit install在您的 Python 环境中运行。

而已!从现在开始,当你运行时the git commit,所有的钩子都会被启动。

我们在 GitGuardian 使用的预提交挂钩

让我们从格式化程序钩子开始。正如本文的标题所暗示的那样,在审查代码时,我们最不想要的就是专注于格式化让自己感到疲倦。这就是我们安装以下钩子的原因:

片状8

- repo: https://github.com/PyCQA/flake8 rev: 4.0.1 hooks: - id: flake8 args: [--config, backend/setup.cfg] additional_dependencies: [ggflake8==1.2.1]


flake8解析修改后的 python 文件以确保遵循 PEP8 指南,如果不是这种情况,则阻止提交。最重要的是,我们开发了自己的flake8插件,我们将其命名 ggflake8为强制执行一组自定义规则,例如:

  • 所有 20 行或更多的函数都必须有一个文档字符串。
  • 具有 3 个或更多参数的函数必须使用命名参数。
  • 测试文档字符串必须遵循Gherkin“GIVEN/WHEN/THEN”格式。

black


- repo: https://github.com/psf/black rev: 22.3.0 hooks: - id: black args: [--config, backend/pyproject.toml]


我们选择在 flake8 之上添加这个自以为是的格式化程序,以消除所有关于格式化的讨论。正如他们的文件所说:

Black 是毫不妥协的 Python 代码格式化程序。使用它,您同意放弃对手动格式化细节的控制。黑色为您提供速度、确定性和免于pycodestyle对格式唠叨的自由。你会为更重要的事情节省时间和精力。

其他不错的选择包括pylint和autopep8

isort

- repo: https://github.com/pycqa/isort rev: 5.10.1 hooks: - id: isort args: [--settings-path, backend/pyproject.toml]


他们的文件说:“对你的进口进行分类,所以你不必这样做。” 这是一个方便的 Python 实用程序,它将通过按字母顺序对导入进行排序并按部分和类型分隔它们来处理导入的格式。少一件需要担心的事!

prettier

- repo: https://github.com/pre-commit/mirrors-prettier rev: v2.5.1 hooks: - id: prettier

prettier并eslint用于格式化我们的 JSON、YAML 和 markdown 文件。

check-*

- repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.1.0 hooks: - id: check-json - id: check-yaml - id: check-added-large-files


第一组钩子检查 JSON 和 YAML 文件的语法,同时check-added-large-files确保没有人错误地提交一个巨大的文件。

commitizen

- repo: https://github.com/Woile/commitizen rev: v2.20.3 hooks: - id: commitizen stages: [commit-msg]


commitizen确保我们的提交消息符合我们公司的要求,这是一种源自语义发布的格式,我们还需要在其中放置相关的 GitLab 问题编号。这是一个有效的 GitGuardian 提交消息的示例:

chore(pre-commit): #2345 add commitizen hook

codespell

- repo: https://github.com/codespell-project/codespell rev: v2.1.0 hooks: - id: codespell

codespell 检查拼写错误。我们之所以选择这个工具,是因为它基于常见错别字列表,可以将误报的数量降至最低。

结果证明这是一个非常有用的工具:不必因为一个小错误而拒绝你同事的 MR,真是一种解脱!

ggshield

- repo: https://github.com/gitguardian/gg-shield rev: v1.12.0 hooks: - id: ggshield


不使用我们自己的软件有多傻?

预提交钩子也是运行安全测试的好地方。与所有测试一样,越早发现问题越好。对于可能产生灾难性影响的安全问题尤其如此。

ggshield是我们在 GitGuardian 开发的用于帮助保护代码库的工具之一。集成为一个钩子,它将扫描 git 补丁的内容,以确保它不包含任何秘密,如 API 令牌。

用法

现在我们已经安装和设置了预提交钩子,每次我们尝试提交时都会运行它们:

钩子在提交后运行(此处跳过,因为没有文件)

但是,如果出于任何原因,您想跳过一个或所有挂钩,您可以轻松地做到这一点

  • 只需添加-n参数:git commit -m "message" -n
  • 要只跳过一个钩子,请使用:SKIP=flake8 git commit -m "message"

结论

预提交钩子在任何项目中都是必不可少的,因为它们易于设置并提供巨大的价值。使用过一次之后,我会说——在我看来——不使用它们几乎和不使用 Git 一样疯狂!(有点夸张,但你明白了;))

尽管如此,此工具并非万无一失,因为它可以轻松跳过或根本不安装。这就是为什么维护 CI 服务器端测试和作业很重要,尤其是与安全相关的测试和作业。预提交钩子和 CI 作业是互补的。它还表明,对于安全测试来说,扫描 VCS 服务器端的补充解决方案仍然是必要的。

相关推荐

2023年最新微信小程序抓包教程(微信小程序 抓包)

声明:本公众号大部分文章来自作者日常学习笔记,部分文章经作者授权及其他公众号白名单转载。未经授权严禁转载。如需转载,请联系开百。请不要利用文章中的相关技术从事非法测试。由此产生的任何不良后果与文...

测试人员必看的软件测试面试文档(软件测试面试怎么说)

前言又到了毕业季,我们将会迎来许多需要面试的小伙伴,在这里呢笔者给从事软件测试的小伙伴准备了一份顶级的面试文档。1、什么是bug?bug由哪些字段(要素)组成?1)将在电脑系统或程序中,隐藏着的...

复活,视频号一键下载,有手就会,长期更新(2023-12-21)

视频号下载的话题,也算是流量密码了。但也是比较麻烦的问题,频频失效不说,使用方法也难以入手。今天,奶酪就来讲讲视频号下载的新方案,更关键的是,它们有手就会有用,最后一个方法万能。实测2023-12-...

新款HTTP代理抓包工具Proxyman(界面美观、功能强大)

不论是普通的前后端开发人员,还是做爬虫、逆向的爬虫工程师和安全逆向工程,必不可少会使用的一种工具就是HTTP抓包工具。说到抓包工具,脱口而出的肯定是浏览器F12开发者调试界面、Charles(青花瓷)...

使用Charles工具对手机进行HTTPS抓包

本次用到的工具:Charles、雷电模拟器。比较常用的抓包工具有fiddler和Charles,今天讲Charles如何对手机端的HTTS包进行抓包。fiddler抓包工具不做讲解,网上有很多fidd...

苹果手机下载 TikTok 旧版本安装包教程

目前苹果手机能在国内免拔卡使用的TikTok版本只有21.1.0版本,而AppStore是高于21.1.0版本,本次教程就是解决如何下载TikTok旧版本安装包。前期准备准备美区...

【0基础学爬虫】爬虫基础之抓包工具的使用

大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学爬...

防止应用调试分析IP被扫描加固实战教程

防止应用调试分析IP被扫描加固实战教程一、概述在当今数字化时代,应用程序的安全性已成为开发者关注的焦点。特别是在应用调试过程中,保护应用的网络安全显得尤为重要。为了防止应用调试过程中IP被扫描和潜在的...

一文了解 Telerik Test Studio 测试神器

1.简介TelerikTestStudio(以下称TestStudio)是一个易于使用的自动化测试工具,可用于Web、WPF应用的界面功能测试,也可以用于API测试,以及负载和性能测试。Te...

HLS实战之Wireshark抓包分析(wireshark抓包总结)

0.引言Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接...

信息安全之HTTPS协议详解(加密方式、证书原理、中间人攻击 )

HTTPS协议详解(加密方式、证书原理、中间人攻击)HTTPS协议的加密方式有哪些?HTTPS证书的原理是什么?如何防止中间人攻击?一:HTTPS基本介绍:1.HTTPS是什么:HTTPS也是一个...

Fiddler 怎么抓取手机APP:抖音、小程序、小红书数据接口

使用Fiddler抓取移动应用程序(APP)的数据接口需要进行以下步骤:首先,确保手机与计算机连接在同一网络下。在计算机上安装Fiddler工具,并打开它。将手机的代理设置为Fiddler代理。具体方...

python爬虫教程:教你通过 Fiddler 进行手机抓包

今天要说说怎么在我们的手机抓包有时候我们想对请求的数据或者响应的数据进行篡改怎么做呢?我们经常在用的手机手机里面的数据怎么对它抓包呢?那么...接下来就是学习python的正确姿势我们要用到一款强...

Fiddler入门教程全家桶,建议收藏

学习Fiddler工具之前,我们先了解一下Fiddler工具的特点,Fiddler能做什么?如何使用Fidder捕获数据包、修改请求、模拟客户端向服务端发送请求、实施越权的安全性测试等相关知识。本章节...

fiddler如何抓取https请求实现手机抓包(100%成功解决)

一、HTTP协议和HTTPS协议。(1)HTTPS协议=HTTP协议+SSL协议,默认端口:443(2)HTTP协议(HyperTextTransferProtocol):超文本传输协议。默认...