菜单

构建目录 (/build)

相关源文件

/build 目录是 Go 项目布局中的一个标准组件,用于打包和持续集成(CI)配置。此目录包含从 Go 代码创建可部署的工件以及设置自动化构建和测试流程所需的所有文件和脚本。

有关构建脚本和其他构建相关实用程序的信息,请参阅脚本目录 脚本目录。有关部署配置的信息,请参阅初始化和部署目录 初始化和部署目录

结构和目的

/build 目录有两个主要的子目录,每个子目录在构建和打包过程中都有其独特的用途

结构图

来源:README.md132-138 build/README.md1-7

构建/打包目录

/build/package 目录包含用于创建可部署工件的配置和脚本,例如

  • 容器镜像:用于构建 Docker 镜像的 Dockerfile 配置
  • 云镜像:用于创建云提供商镜像(如 Amazon 机器镜像(AMI))的模板
  • 操作系统包:用于构建分发包的配置文件和脚本
    • Debian 包(.deb
    • RPM 包(.rpm
    • 其他特定于操作系统的包格式(.pkg

此目录涉及如何为各种部署环境打包 Go 应用程序,使其适用于不同的基础设施目标。

来源:README.md136 build/README.md5

构建/CI 目录

/build/ci 目录包含持续集成平台的配置文件,包括

  • Travis CI(.travis.yml
  • CircleCI(.circleci/config.yml
  • Drone CI(.drone.yml
  • Jenkins(Jenkinsfile
  • 其他 CI 工具的配置

这些文件定义了在自动化构建管道中如何构建、测试和验证应用程序。CI 工具可能对配置文件位置有特定要求,因此此目录通常包含可能也存在于根目录的文件链接或副本。

来源:README.md138 build/README.md7-8

CI/CD 工作流程中的构建目录

下图说明了 /build 目录如何融入 Go 项目的典型 CI/CD 工作流程

来源:README.md132-138 README.md1-9

与其他目录的关系

/build 目录与标准 Go 项目布局中的其他几个目录密切相关

目录/build 的关系
/scripts包含可能在 CI 过程中或在 /build 的配置中调用的构建脚本
/cmd包含使用 /build 中的配置进行编译和打包的应用程序入口点
/internal包含使用 /build 中的配置进行编译和打包的私有代码
/pkg包含使用 /build 中的配置进行编译和打包的共享库
/deployments包含使用 /build 中定义的流程产生的工件的部署配置

来源:README.md132-138 Mermaid diagrams from prompt (diagram 5 "Build and Deployment Infrastructure")

CI 配置最佳实践

在使用 /build/ci 目录中的 CI 配置时

  1. 配置文件放置:某些 CI 工具要求配置文件位于特定位置。在可能的情况下,将规范版本保留在 /build/ci 中,并链接或复制到所需位置
  2. 参数化:使用环境变量或其他参数化技术,使 CI 配置可在不同环境之间重用
  3. 脚本引用:引用 /scripts 目录中的脚本,而不是复制构建逻辑
  4. 工件输出:配置 CI 工具以在一致的位置生成用于部署的工件

来源:README.md138 build/README.md7-8

打包最佳实践

对于 /build/package 目录中的包配置

  1. 多平台支持:包含应用程序支持的所有部署目标配置
  2. 版本一致性:确保包配置使用一致的版本控制方案
  3. 依赖管理:在包定义中明确指定依赖项
  4. 资源要求:在包元数据中记录资源要求(内存、CPU、磁盘)

来源:README.md136 build/README.md5

实际示例

CockroachDB 项目提供了一个关于如何组织 /build 目录的优秀实际示例

来源:README.md9-11

总结

/build 目录作为与打包和持续集成相关的所有配置文件和脚本的集中位置。通过将这些配置与应用程序代码分开,同时保持标准结构,Go 项目可以确保在不同环境和平台上实现一致且可重复的构建和打包流程。