在不断变化的技术世界中,确保代码的质量和安全性至关重要。然而,在每次提交之前手动运行命令行检查可能是一项耗时且乏味的任务。
在这篇博文中,我们将向您介绍Pre-commit hooks,这是一个功能强大的工具,可以帮助您自动执行代码质量检查。Terraform 的预提交挂钩是在提交代码之前自动运行的脚本。它们可用于检查各种错误,例如 linting 错误、安全漏洞和格式问题。
这篇博文是为经验丰富和缺乏经验的 Terraform 用户设计的。我们将介绍 Terraform 的基础知识Terraform pre-commit hooks以及如何将它们与 Terraform 一起使用。我们还将提供一些关于如何根据您的需求选择合适的挂钩的提示。
因此,无论您是经验丰富的 Terraform 开发人员还是刚刚入门,这篇博文都适合您。让我们开始吧!💪
Pre-commit hooks是在提交代码更改之前自动执行的重要脚本。它们在识别各种类型的问题(包括 linting 错误、安全漏洞和格式不一致)方面发挥着关键作用。这种强大的预提交流程可确保代码的最高质量和安全性,使其为部署做好准备。
Terraform另一方面,它是一个功能强大的开源基础设施即代码 (IaC) 工具,使用户能够以可靠且可预测的方式创建、修改和增强基础设施。它通过将基础设施转换为配置语言来实现这一点,可以使用版本控制工具有效地管理配置语言。
现在,让我们探讨一些最流行的pre-commit hooks tailored for Terraform:
要全局安装预提交挂钩并将其配置为与 Terraform 一起使用,请执行以下步骤: 1.全局安装Pre-Commit(如果使用Docker镜像则不需要):
DIR=~/.git-template
git config --global init.templateDir ${DIR}
pre-commit init-templatedir -t pre-commit ${DIR}
注意:如果您已经使用 Docker 映像,则可以跳过此步骤。 2. 添加配置和挂钩: 导航到要设置预提交挂钩的存储库,然后执行以下步骤:
git init
cat <<EOF > .pre-commit-config.yaml
default_install_hook_types:
- pre-commit
- commit-msg
repos:
# BASIC CONF FOR ALL PRE-COMMITS REPO TYPE
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
hooks:
- id: trailing-whitespace
stages: [commit]
- id: end-of-file-fixer
exclude: /secrets
stages: [commit]
- id: check-added-large-files
stages: [commit]
- id: check-yaml
args:
- '--allow-multiple-documents'
exclude: /templates|/secrets
stages: [commit]
- id: check-json
stages: [commit]
- id: check-toml
stages: [commit]
- id: check-shebang-scripts-are-executable
stages: [commit]
- repo: https://github.com/compilerla/conventional-pre-commit
rev: v2.1.1
hooks:
- id: conventional-pre-commit
stages: [commit-msg]
- repo: https://github.com/gitleaks/gitleaks
rev: v8.16.1
hooks:
- id: gitleaks
# SPECIFIC CONF FOR TERRAFORM MODULE REPOSITORIES
- repo: https://github.com/antonbabenko/pre-commit-terraform
rev: v1.77.1
hooks:
- id: terraform_fmt
args:
- --args=-diff
- --args=-write=true
stages: [commit]
- id: terraform_docs
stages: [commit]
- id: terraform_tflint
files: \.tf$
args:
- --args=--config=__GIT_WORKING_DIR__/.tflint.hcl
stages: [commit]
- id: terraform_tfsec
files: \.tf$
args:
- >
--args=--config-file=__GIT_WORKING_DIR__/.tfsec.yml
--var-file tests/terraform.tfvars
stages: [commit]
EOF
确保替换<VERSION>
为提供的 URL 中的最新可用版本。
3. 运行预提交挂钩:
配置预提交挂钩后,您可以全局安装它或手动运行它。在此示例中,我们将手动运行预提交挂钩:
pre-commit run -a
通过利用预提交挂钩,您可以通过统一的自动化工具将各种开源和 Terraform 原生工具无缝集成到您的工作流程中。这种方法将强制代码质量的责任转移给预提交挂钩,从而减少了下游持续集成 (CI) 系统的工作量。此外,它允许快速识别和解决每次提交的小问题,从而产生更清晰的拉取请求并减少审查时间。