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

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

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

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

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盘凭借其优良的性能、稳定的传输速度、精致的外观以及实用的容量,受到了许多消费者的喜爱。一般来说,金士顿U盘在质量、速度和耐用性...

qq设置了隐私密码忘了(如果qq隐私密码忘记了怎么办)

一、可以选择通过“验证密保找回密码”方式。1.点击按钮进入验证界面。2.进行密保问题验证。3.输入新密码和其它内容,完成修改。二、如果忘记了密保问题,那么可以通过已经绑定的手机号,通过短信验证来找回密...

怎么开机一键ghost还原系统(电脑开机的一键ghost)

首先要确认电脑硬盘中是否有预先制作好的GHOST镜像文件,如果有,打开电脑,在开机时按下相应的快捷键进入电脑的BIOS设置界面,将启动方式设置为从外部设备启动,然后将已经制作好的GHOST镜像文件装载...

手机ip地址是实时位置吗(手机ip地址是指手机还是手机号码)

这个不一定,在不用代理的情况下,如果你用的是WIFI,那么是的,如果你用的是移动数据,有可能你在省界附近会接受到对面省份的基站的信号,那么你的ip属地就会是对面省份,如果你用代理,那就看你用的ip属地...

协同办公平台系统(协同办公平台系统oa里我的钱包怎么提现)

社会发展日新月异,当前社会已是网络社会,是信息化的社会。传统的手工办公模式耗时、耗力、繁杂、重复,而且离开办公室将很难处理,这些已经远远不能满足新形势下大型企业发展的需要。在信息化技术、高速发展的今天...

密钥下载软件(密钥下载软件安全吗)

是的,只要密钥正确就能激活,但现在大部分激活码都因为使用次数过多而失效,建议使用激活工具。1、电脑登陆并下载我上传的附件。2、下载完成后点击激活工具,按提示操作即可。无法获取密钥可能是因为多种原因...

bluescreen异常关机(bluescreenview怎么修复蓝屏)

这个问题我遇到过,极有可能是某次系统更新没有完成就关机引起的(当然很多人会说内存不良)看看卸载掉最近的windows系统更新,然后让系统重新自动更新一下试试吧。

大白菜智能快速装机pe版详细教程

首先,将大白菜pe盘插入电脑的usb接口。然后,在电脑中打开“我的电脑”,找到pe盘的存储路径。接着,将需要安装的系统或软件的安装文件复制到pe盘中。最后,重启电脑,进入bios设置,将启动顺序设置为...

设置程序开机启动(设置程序开机启动并最小化)

  让计算机开机时自动运行某个程序方法:  方法一:  右击任务栏空白处-属性-自定义-勾选“启用拖放”;  左键拖动程序执行文件(.exe,.bat...)的快捷方式,到左下角的开始,不要松鼠标;...

手机上能用的ps软件(手机上使用的ps软件)

可以使用。1、首先准备智能手机一个,手机photoshop软件一个。2、打开PS,右下角是PS最强大的功能,图层。这里可以随意的添加图层和合并图层。隐藏图层等。3、和电脑一样,有图片不透明度和图层混合...

解决方案经理(解决方案经理的职责和工作内容)

一般都会问到如下几方面的问题:1、生产周期计划制定。2、生产周期安排。3、人员合理安排和管控。4、安全生产监督。5、部门与部门之间的相互协调。6、报表的审批。7、应急事件的处理效率。以上只是罗列部分,...

固态硬盘怎么装win7系统教程

你好,要在笔记本新固态硬盘上安装Windows7系统,您可以按照以下步骤进行操作:1.准备一个可启动的Windows7安装U盘或光盘,并将其插入笔记本电脑。2.打开笔记本电脑,按下电源按钮并立...

电脑重置62%不动了(电脑重置62%不动了能不能点取消)

电脑在恢复出厂设置时卡在62%的原因有以下两点第一、因为硬盘过热导致的这种现象,通过给硬盘降温就可以解决这个问题。第二、因为内存导致的这种现象,如果是内存导致的这种现象,你直接换一个内存,然后重新安装...

kms安装激活教程(如何安装kms激活软件)

kms激活win10不是激活永久。你可以查看一直:1、同时按win+R键打开“运行”,输入slmgr.vbs-xpr回车。2、同时按win+R键打开“运行”,输入slmgr.vbs-dlv回...

搜狗输入法手机(搜狗输入法手机和电脑账户通用吗)
  • 搜狗输入法手机(搜狗输入法手机和电脑账户通用吗)
  • 搜狗输入法手机(搜狗输入法手机和电脑账户通用吗)
  • 搜狗输入法手机(搜狗输入法手机和电脑账户通用吗)
  • 搜狗输入法手机(搜狗输入法手机和电脑账户通用吗)