DevOps 应该知道的 Pre-Commit Hooks

197 阅读4分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情

原文:Pre-Commit Hooks DevOps Engineer Should Know To Control Kubernetes - DZone DevOps

作者:Nicolas Giron、Hicham Bouissoumer

一般来说,所有公司都希望在各个方面上提高生产力:人力、基础架构等。通常来说,生产力是由自动化流程来提高的。这种自动化需要对过去使用的概念进行演变、调整,甚至完全改变。这包括安全策略的实施和控制。

为什么需要左移安全?

"左移 "的说法是由期望加强开发、安全和运维团队之间合作的 DevSecOps 方法引入的。这个想法是通过将安全和测试流程移到 SDLC(软件开发生命周期) 的左边,从开发周期的开始就保证应用程序的安全性。

自从 DevOps 方法论出现以来,由于其使用和配置的简单性,以及在复杂项目的团队协作上不可思议的好处,所以这种方法一直以来都被认为是最佳的开发实践,在使用 Terraform、Ansible或Kubernetes 搭建的平台中被广泛应用。

image.png

在YAML文件的开发以及内容和配置上强制使用标准,有利于阅读、使用和维护 ———— 这是所有项目都应该设法实现的三个概念。

安全的目的是用集成的最佳安全实践来设计软件 ————— 及早发现安全风险,并确保立即解决这些安全威胁。这使得解决安全问题变得更容易、更快、更实惠(更低的开支?)。

如何左移

Pre-commit 是一个开源的命令行工具,用于在每次提交后添加一些流程以便于及时发现某些安全方面的问题。

这使得在 pipeline 中尽可能早地发现和控制异常状况,并在上线之前进行修正。

要完成这点,需要三个步骤。

  • 机器上安装 Pre-commit
  • 必须在 Git 项目的根目录下创建一个名为".pre-commit-config.yaml "的配置文件,并配置好 hook
  • Git 项目需要在本地配置,以便在每次提交时自动执行该命令

image.png

另:

关于 DevSecOps 的有关内容可以参考IBM的文档什么是 DevSecOps? - 中国 | IBM

重要的考虑因素

正如前面所说的,Pre-commit 和 Git 项目必须在本地配置为自动运行。这无法从远程强行配置。因此这需要在起步阶段进行项目配置,以确保其使用。所以需要文档说明并确保它被使用。

根据具体情况,有可能开发一个脚本(在这种情况下,所有团队成员的电脑上都要有这个)来自动使用它,甚至鼓励团队使用一个有所有必要开发工具的容器镜像。这个方法有很多好处————特别是在新人入职时,因为它最大幅度地减少了配置开发环境的步骤。

然而,如果认为这种做法太复杂,我们还可以将操作放到继承链的下游,从而在部署前自动应用。

k8s 中的应用

本节列出了一组可以免费使用的 hook,通过 Pre-commit 可以轻松安装和使用。

下面是一个 Pre-commit 配置文件,可以在Kubernetes项目上测试。

repos:
 - repo: https://github.com/adrienverge/yamllint.git
   rev: v1.17.0
   hooks:
     - id: yamllint
       args: [-c=.yamllint]
- repo: https://github.com/pre-commit/pre-commit-hooks
  rev: v4.1.0
  hooks:
    - id: check-merge-conflict
    - id: trailing-whitespace
    - id: check-added-large-files
    - id: end-of-file-fixer
- repo: https://github.com/bridgecrewio/checkov.git
  rev: 2.0.975
  hooks:
    - id: checkov
      args: [-d .]
- repo: https://github.com/Agilicus/pre-commit-hook-k8svalidategit
  rev: v0.0.8
  hooks:
    - id: k8svalidate
      files: .yaml$
- repo: https://github.com/Yelp/detect-secrets
  rev: v1.2.0
  hooks:
    - id: detect-secrets

保存到项目根目录下的".pre-commit-config.yaml"文件。然后运行 pre-commit 命令就可以得到结果了

成功示例