【问题标题】:Build dependencies and local builds with continuous integration使用持续集成构建依赖项和本地构建
【发布时间】:2015-05-26 08:57:51
【问题描述】:

我们公司目前使用 TFS 进行源代码控制和构建服务器。我们的大部分项目都是用 C/C++ 编写的,但我们也有一些 .NET 项目,如果将来需要使用其他语言,我们不希望受到限制。

我们希望使用 Git 进行源代码控制,并且我们正在尝试了解构建服务器的最佳选择。我们已经开始研究 TeamCity,但我们遇到的一些问题可能与我们选择的构建服务器有关:

  1. 构建依赖项 - 我们希望能够控制每个<project, branch> 的构建依赖项。例如,让<MyProj, feature_branch> 依赖于<InfraProj1, feature_branch> 和<InfraProj2, master>。 根据我们所见,要做到这一点,我们可能需要使用 Gradle 或类似的东西来构建我们的项目,而不是普通的 MSBuild。它是否正确?有没有更简单的方法来实现这一点?
  2. 本地构建 - 显然我们也希望能够在本地构建项目。当引入项目依赖项时,这会成为一个问题,因为我们需要一种方法来引用这些资源或将它们复制到本地以使构建成功。这通常是如何解决的?

感谢您提供任何意见,但涵盖这些问题的示例设置也会有很大帮助。

【问题讨论】:

    标签: continuous-integration teamcity dependency-management build-server teamcity-9.0


    【解决方案1】:

    恕我直言,您提到的两个问题都属于配置管理类别,因此,正如您所说,与构建服务器的选择无关。

    项目构建的工作区(无论是集中式还是本地)应该真正包含构建所需的所有资源。

    你怎么能做到这一点?拥有一个项目 "metadata" git repo,其中包含一个 "content" 文件,其中包含您的所有项目组件及其依赖项(每个都有自己的 git/other repo)及其确切版本- 有效地将它们连贯地联系在一起(您可能会发现在此组件中存储其他元数据也很有用,例如如果在整个工作空间中使用 SCM 的混合,则组件特定的 SCM 信息)。

    一个工作区拉包装脚本将首先拉出这个 元数据 git repo,解析 content 文件,然后根据 拉出所有其他项目组件及其依赖项>内容文件信息。此类工作空间中的任何构建都将具有所需的所有部分。

    当需要修改项目组件中的代码或其中一个依赖项的版本时,您还需要更新 元数据 中的此 content 文件git repo 以反映更新并提交它 - 这就是您的项目整体取得进展的方式。

    当然,实际管理依赖是另一回事。那里有大量的意见,有些甚至是相互矛盾的。

    【讨论】:

    • 非常感谢您的回答。这看起来像是我将要走的方向,但让我感到惊讶的是,没有标准的方法可以做到这一点。有依赖关系的人是否定义了自己的元数据文件和自定义脚本来解决它们?以前没有人这样做过并在某处分享他的解决方案吗?
    猜你喜欢
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 2015-08-31
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多