【发布时间】:2018-01-15 21:23:19
【问题描述】:
我正在研究如何改进发布版本控制在我的项目中的工作方式。发布的结果由多个工件组成,涉及多个工具及其对应的控制文件,具体取决于它们的域:
- C/C++ 的 CMake (
CMakeFiles.txt) - 用于 Java 的 Maven (
pom.xml) - Node.js 的 NPM (
package.js) - Sphinx (
conf.py) 用于 ReadTheDocs 上托管的文档 - 任何其他工具(例如,我认为我们很快就会为每个版本生成 Docker 映像,因此请在此处添加
Dockerfile)
每一个通常都包含一个 Project Version 字段,其中编写了发布的版本,并且发布工件从那里获取其版本号。我想将分散在多个文件中的那些重复的版本号统一到一个单一的事实来源中。我已经搜索但没有找到令人满意的解决方案,所以我在这里问:
在跨多种语言/构建工具的项目中,对于版本号的健壮和轻松管理,有哪些最佳实践或标准?特别是至少对于前 4 种类型的 avobe,尽管通用解决方案将是首选。
一个重要的必要条件是我宁愿避免包装脚本(例如,使用sed 进行字段替换),以保持工具独立于更多外部工具(即我希望构建命令保持“cmake" 而不是 "cmake_prepare_and_run.sh")。
更新:我认为将 CI 限制为代码存储库上的只读操作是一种普遍的良好做法,这是我在项目中强制执行的策略。我真的不需要,也不希望 CI 太聪明,决定在没有任何监督的情况下自动发布新版本。
【问题讨论】:
-
我已经包含了 2 个想法来回答这个问题,现在已经转移到他们自己的答案中
-
maven 版本在每个工件的 pom.xml 中都是硬编码的。 maven-release-plugin 旨在指导版本控制和发布版本控制。我正在努力应对构建 C/C++ 和 maven 的类似挑战。之前,我们让 maven 控制一切,并使用 maven-native-plugin 来构建 C/C++。但是那个插件已经死了(不支持 VS 2010+ 64 位)并且 cmake 似乎是最流行的 C/C++ 工具。我也在试图弄清楚如何跨构建工具进行版本控制。类似q:stackoverflow.com/questions/44639122/…
标签: git maven npm cmake versioning