Continuous integration 有哪些工具可以帮助将各种软件元素收集到完整的软件版本中?

Continuous integration 有哪些工具可以帮助将各种软件元素收集到完整的软件版本中?,continuous-integration,release,build,versioning,installation,Continuous Integration,Release,Build,Versioning,Installation,我们的软件产品由许多部分组成。假设它由内核驱动程序部分、用户dll和GUI软件组成。在开发过程中,我们会在最新版本中编译和使用所有这些工具,但在发布版本中并不相同 实际上,内核部分必须比其他部分更早冻结。然后,dll被冻结,以进行广泛的测试,最后一次冻结的是GUI。随着QA的发展,我们需要使用固定的GUI创建完整版本的更新版本,但仍然使用以前包含的内核驱动程序和dll 我想知道是否有一个工具存在,它可以管理用于创建发布的每个软件部件的版本 此工具可能会集成到工具链中,以构建所选每个软件的版本,并

我们的软件产品由许多部分组成。假设它由内核驱动程序部分、用户dll和GUI软件组成。在开发过程中,我们会在最新版本中编译和使用所有这些工具,但在发布版本中并不相同

实际上,内核部分必须比其他部分更早冻结。然后,dll被冻结,以进行广泛的测试,最后一次冻结的是GUI。随着QA的发展,我们需要使用固定的GUI创建完整版本的更新版本,但仍然使用以前包含的内核驱动程序和dll

我想知道是否有一个工具存在,它可以管理用于创建发布的每个软件部件的版本

此工具可能会集成到工具链中,以构建所选每个软件的版本,并将其收集到Windows安装程序或Linux软件包中

编辑:我们现在怎么样

到目前为止,我们正在使用SVN和buildbot作为Linux/gcc和Windows/VStudio的CI工具。我们正处于这样一种模式:根据需要对整个存储库进行分支/标记。但现在有越来越多相对独立的软件部件,这会让发布过程痛苦不堪

我们正在考虑更改存储库布局,使其具有几个独立的分支/标记项目。这将更适合软件开发和发布周期。但是,我们绝对需要这样一个工具

问题在于将不同的软件片段(每个片段都有自己的分支/标记版本)收集到一个完整的软件版本中

编辑:需要什么

最后,我明白了我需要的是一个Windows软件包管理器。Linux上RPM或DEB管理器意义上的包管理器


有人知道Windows上的软件包管理器吗?

我一直在使用的一个工具是,它以一种非常有趣的方式展示了各种生命周期。您不仅可以使用java项目,还可以使用.net,有很多插件,还有很好的存储库(我使用的是来自的那个)

我想你要找的术语是。这里也有一个非常重要的文档:。

最明显的问题是软件不同部分(如内核1.0、驱动程序a 1.1等)之间的依赖性问题。这会给我一种印象,如果你的构建工具能够管理听起来不像那样的依赖项,那么你必须考虑它。所以你应该看看Maven(已经提到)、SCons(我不确定)或者其他工具,比如Ant和Ivy的结合。您需要定义某种基线,描述哪些模块在哪个版本中协同工作并可以发布。这是应该由构建工具处理的元信息。您可以自己创建一些东西……但我不建议这样做。

我们有一个系统,其中“主干”是生产中的内容。我们为下一个发行版创建一个分支,当开发人员完成对某个问题的更改时,他将这些更改签入我们的发行版管理器,并将这些更改的文件与该问题编号或bug ID关联

当我们开始构建时,我们可以阻止对某个问题的所有更改,只是不在构建中包含该问题。当我们折叠分支时,我们可以看到所有已更改但未包含在上一次构建中的文件-我们将它们从折叠中排除

这个系统的另一个优点是它将所有的SQL脚本(巧妙地)组合成一个大的SQL文件,用于将版本升级为测试、QA和产品


更多信息可以找到

要处理您的源代码,您一定要单独对组件进行分支。二进制文件通过。这方面的最佳实践将根据您的目标操作系统而有所不同。我的公司做嵌入式软件,所以我们用我们设计的定制脚本来管理它。在Linux上,您希望生成.deb或.rpm包。Ubuntu指南。我对Windows不是很熟悉,但在我安装的软件中,它是一个流行的选择

它们都应该具有指定依赖项版本范围的机制。您可能需要一个确切的版本、某个版本或更新的版本,或者两个版本之间的任何内容。然后您有一个“父”包,它没有二进制文件,只指定组件包的版本。这将允许您升级一个组件,同时保留其他组件的二进制文件。如果您想将所有内容保存在一个包中,那么就没有理由不从源代码重新构建整个内容。如果您的构建脚本是版本控制的,那么您的二进制文件将是相同的。

我们过去使用use来管理软件部署的集成级别,遗憾的是,这在一段时间前就不再受支持了,现在我们已经完成了使用的迁移

我的其余答案没有涉及,但留在这里供参考


我们有各种代码存储库(内部
git
svn
存储库,以及对外部库和存储库的引用,例如),它将它们很好地结合在一起,只部署任何给定构建所需的组件

来自:

Buckminster是一个组件解析和物化框架。它的目的是为您获取软件组件,并在选择的上下文中具体化它们,通常是工作区或文件系统。无论您是查看本地计算机上、开发组织内还是公共开源云中的可用内容,这都适用。Buckminster消除了组件描述中的模糊性,实现了组件共享,并在开发、构建、组装和部署场景中应用时提高了生产效率

Buckminster是一个可扩展的元框架,包括一个组件元数据语言