菜单

脚本目录 (/scripts)

相关源文件

目的与范围

The /scripts 目录是用于执行 Go 项目中各种操作的专用位置,包括构建、安装、分析、测试和其他自动化任务。这些脚本用于封装那些会使根目录 Makefile 变得混乱的复杂操作,从而保持 Makefile 的简洁性。

有关相关的构建基础设施组件,请参阅 Build 目录 (/build)

来源:README.md124-130 scripts/README.md1-5

项目结构中的位置

The /scripts 目录是标准 Go 项目布局中的一个顶级目录。它构成了构建基础设施的一部分,并支持应用程序开发生命周期。

The /scripts 目录与其他的操作和支持组件紧密配合,特别是在开发过程中进行构建和部署阶段。

来源:README.md124-130 scripts/README.md1-5

在构建基础设施中的作用

The /scripts 目录是构建和部署基础设施中的关键组成部分,它连接了各种构建过程,并确保在不同环境中的操作一致性。

The /scripts 目录是大多数构建操作的引擎。虽然 Makefile 通常为开发人员提供了一个简单的接口,但复杂任务的实际实现被委托给了此目录中的脚本。

来源:README.md124-130 scripts/README.md1-5 Makefile1-2

常见的脚本类别

Scripts 目录下的脚本通常根据其在开发工作流程中的功能分为几个类别

类别目的示例
构建脚本为不同的平台/架构编译应用程序build.sh, compile_all.sh
测试脚本运行不同级别的测试run_tests.sh, integration_test.sh
分析脚本代码质量、代码风格检查和静态分析lint.sh, static_analysis.sh
安装脚本设置开发环境或安装应用程序install.sh, setup_dev_env.sh
实用脚本其他脚本使用的辅助函数utils.sh, common.sh
部署脚本为应用程序的部署做准备prepare_release.sh, version.sh

来源:README.md124-130 scripts/README.md1-5

与 Makefile 的集成

开发人员和构建脚本之间的主要接口通常是项目根目录下的 Makefile。Makefile 通常提供简单的目标,这些目标会调用 /scripts 目录中更复杂的脚本。

这种关注点分离使得 Makefile 保持干净和专注于提供简单的接口,而实际的实现细节则封装在脚本中。

来源:README.md126-128 Makefile1-2 scripts/README.md3-5

最佳实践

在使用 /scripts 目录时,请考虑以下最佳实践

  1. 保持脚本的专注性:每个脚本都应执行一个单一的、定义明确的任务
  2. 提取公共功能:将共享函数放在实用脚本中,以便其他脚本可以引用
  3. 保持一致的命名:根据脚本的用途采用清晰的命名约定
  4. 添加文档:在脚本中包含注释,解释其用途和用法
  5. 脚本环境独立性:确保脚本在不同的开发环境中一致地工作
  6. 错误处理:在脚本中包含适当的错误处理和报告
  7. 退出码:使用有意义的退出码来指示成功或特定的失败模式

来源:scripts/README.md1-12

真实项目中的示例

许多著名的 Go 项目都遵循使用 /scripts 目录来组织其构建和实用脚本的模式

  1. Kubernetes Helmgithub.com/kubernetes/helm/tree/master/scripts
  2. CockroachDBgithub.com/cockroachdb/cockroach/tree/master/scripts
  3. HashiCorp Terraformgithub.com/hashicorp/terraform/tree/master/scripts

这些项目使用 /scripts 目录来管理其构建和开发流程的各个方面,从而使它们的根 Makefile 更简洁、更易于维护。

来源:scripts/README.md7-12

目录组织

对于大型项目,/scripts 目录本身也可以根据脚本的用途或生命周期阶段进一步组织到子目录中

这种组织方式有助于在脚本数量不断增长时保持清晰,方便开发人员找到适合他们需求的脚本。

来源:scripts/README.md1-12

与其他构建组件的关系

The /scripts 目录与标准 Go 项目布局中的其他构建相关目录协同工作

虽然 /scripts 目录包含构建相关操作的实现,但 /build 目录通常包含 CI/CD 系统和打包的配置文件和资源。/deployments 目录包含用于将应用程序部署到各种环境的配置模板。

来源:README.md124-142