现在DevOps已然成为项目开发过程中的必备环节,尤其是开源项目,由来自全球的开发者共同维护一个项目,此时严格且规范的代码审查与自动化部署至关重要。而pre-commit工具能够帮助你更好的完成这个工作。
pre-commit能够在git命令不同阶段添加自定义脚本,从而完成代码审查、日志记录、自动更新版本号以及自动部署文档系统等常见功能,此篇文章将要介绍pre-commit在python-wechaty开源项目中的实战小技巧。
一、快速上手
1.1 安装工具
pip install pre-commit
别看是使用python来安装工具,可是在任何编程语言上都是通用的。
安装完成之后即可查看对应工具的版本:
$ pre-commit --version
pre-commit 2.12.1
1.2 安装hook脚本
hook是什么?hook原意钩子,是在git提交之前,提交之后执行的脚本,能够进行代码审查,撤销提交操作等,也是这个工具的核心脚本。
安装的脚本如下所示:
pre-commit install
1.3 配置文件
当开发者在push代码之前,需要对进行审查,或者push成功之后,在自动更新项目版本文件(VERSION),此类定制化的任务是需要通过配置文件来完成。
配置文件能够在不同分支和git操作阶段执行自定义任务脚本,完成自定义的代码审查。添加配置文件有多种方式:
- 手动添加一个文件:
.pre-commit-config.yaml
- 通过命令行创建一个模板配置文件:
pre-commit sample-config
设定一个场景,要在项目本地代码提交之前进行代码审查,其配置文件如下所示:
# the hook execution directory in under git root directory
repos:
- repo: local
hooks:
- id: pylint
name: pylint
description: "Pylint: Checks for errors in Python code"
language: python
entry: pylint ./src
always_run: true
verbose: true
require_serial: false
stages: [push]
types: [text]
1.4 参数说明
-
repos
通过属性名即可得知,此配置文件可对多个repo配置hook,在上述配置当中我只对本地单个repo进行了配置。注意,其中的repo名为:local。
-
hooks
在每个项目当中,可以配置多个hooks任务,从而实现定制化的操作。同样,hooks也是一个列表属性。 -
id/name/description/language/
此类属性是单个hook任务的描述信息。 -
entry
这个就是该hook任务的自定义Bash脚本,大家可以在此处编写逻辑较为复杂的代码审查,也可以将复杂的脚本通过外部脚本文件来执行。这部分就是通过程序员自行扩展。 -
verbose
是否在控制台中打印日志记录,这个通常会设置成True。 -
require_serial
是否在一个进程当中执行该任务:通常情况下不同任务都是隔离的,没有依赖关系,如果审查的耗时较长,则可以设置为False
加快其执行的速度。 -
stages
当代码在提交时,会触发commit
、commit
,merge-commit
,push
,prepare-commit-msg
,commit-msg
,post-checkout
,post-commit
,post-merge
, ormanual
,通常情况下使用push
即可。 -
types
pre-commit 工具会在不同类型的文件上制定对应的文件,