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

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

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

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

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 服务器端的补充解决方案仍然是必要的。

相关推荐

u盘制作启动盘后如何恢复原来的样子

可以通过U盘启动盘制作工具的恢复普通盘功能将制作了启动盘的U盘恢复为一个普通U盘,这类制作工具核心相同,都可以实现删除隐藏启动文件的功能,下面以电脑店启动盘制作工具为例:1、将U盘插入电脑,然后运行电...

xp系统安装版免费版华为版(windows xp 安装版)

1、点击主界面中的【设置】进入到设置界面,然后向下滑动即可找到【开发者选项】,点击进入。2、点击【开发者选项】右边的按钮打开此功能,然后在弹出的提示框中选择【确定】。值得注意的是,启用这个功能可能会导...

手机网页自动翻译插件(手机网页自动翻译插件免费版)

找到了吗你好;苹果自带浏览器添加书签按也是要占用手机内存的,自带浏览器的安装包太大,会影响手机运行的,你可以下载一个QQ浏览器。它的安装包很小,不影响手机运行,它使用的极速内核,有着神速一般的浏览体验...

0x0000007e(0X0000007E)

错误分析系统进程会生成错误,但是Windows错误处理器无法捕获它。蓝屏无法正常进入系统或无法正常运行,这通常是由软件或硬件故障引起的。原因有很多,原因很复杂,例如系统文件损坏,病毒感染,后台自启动程...

联想笔记本电脑键盘介绍图(联想笔记本电脑键盘功能基础知识解释图)

ESC键:另一个名称叫做逃逸键,在填用户名或者打错的时候使用ESC键,可以清理所有的框内内容,较为便利。Tab键:Tab键是Table(表格)的简写,所有也被人们称作表格键,在文本文档时,按这个键,光...

wifi万能钥匙正版下载(wifi万能钥匙下载最新版)

1、首先打开手机应用中心下载安装wifi万能钥匙。;;2、安装完成后,点击打开wifi万能钥匙即可使用。;具体使用...

好看电脑桌面壁纸高清(好看电脑桌面壁纸高清搞怪)

首先,在桌面点击右键,然后进入属性,然后进入显示,然后上面写着屏幕分辨率,再按照分辨率下载壁纸  以下为调整电脑桌面清晰度步骤:  1,启动电脑,来到桌面,在空白处,单击鼠标右键,去打开桌面右键菜单...

iso国际标准(ISO国际标准键盘)

6000iso流明相当于7500ansi流明。6000÷0.8等于7500ansi流明ANSI流明是美国的亮度标准,ISO流明是国际标准,目前普遍将ANSI流明和ISO流明按照1:0.8的比例换算,即...

win7家庭高级版和专业版(win7系统家庭高级版)

①如果你是自己用,不是在公司用,一般是用不出什么区别的,兼容性和性能上毫无区别,只是功能上有所取舍;②两者在高级安全性和商业部署上有所区别,专业版比家庭版多了Bitlocker(磁盘加密技术)、组策略...

win11怎么样(win11怎么样删除软件)

win11适合打游戏的。主要原因如下:1、win11的升级并不会丢失原本系统中的文件和软件,因此用户可以在升级后直接玩原本的游戏。2、win11虽然是一款新系统,但是在游戏性能的表现上已经有着非常好的...

adobe flash官方下载(adobe flash player完整版下载)

您可以从Adobe官网(https://get.adobe.com/flashplayer/)下载AdobeFlashPlayer最新版本,并在您的手机上安装它。Adobe宣布终止研发移动设备fl...

五笔打字字根表(金山五笔打字字根表)
五笔打字字根表(金山五笔打字字根表)

1区横起笔、G键:王旁青头兼五一;F键:土士二干十寸雨;D键:大三肆头古石厂;S键:木丁西边要无女;A键:工戈草头右框七。2区竖起笔、H键:目止具头卜虎皮;J键:日曰两竖与虫依;K键:口中两川三个竖;L键:田框四车甲单底;M键:山由贝骨下...

2025-11-10 21:55 liuian

u盘写保护打开方法(u盘写保护打不开怎么把它格式化)

1.查看U盘上是否有写保护开关,打开开关(通常写保护开关在U盘的侧面是一个滑块)。2.尝试重新插入U盘读取数据。解决方案二:运行磁盘检测修复命令1.使用组合键“Win+R”,唤出运行页,在对话框中...

微软密钥在哪里找(bitlocker万能恢复密钥)

如果您使用的是MicrosoftOffice365,密钥激活的账户是免费订阅的,因此不需要查看。您可以通过以下步骤免费获取Office365:1.访问Microsoft官网(https...

大学生一般买什么笔记本电脑

回答:联想小新Air15锐龙版性能轻薄本15.6英寸全面屏轻薄笔定位:轻薄本配置:处理器(R7-5700U)、显卡(集显)、分辨率(1920×1080)、内存(16G)、尺寸(15.6英寸)评价:20...