TeamCity On-Premises 2024.03 Help

项目导入

您可以将所有数据和用户帐户的项目从备份文件导入到现有的 TeamCity 服务器,也就是说,将这些项目从一个服务器添加到通常使用的目标服务器。

项目导入或服务器迁移

仅在需要将某些项目添加到包含其他项目的现有服务器中时,也就是需要将两个服务器合并为一个时,才应使用项目导入。 导入是一种破坏性操作,而并非所有数据都会被导入
如果您需要将所有服务器数据转移到另一台机器,请使用服务器移动

导入项目

在源 TeamCity 服务器上:

在目标 TeamCity 服务器上:

  • 前往 服务器管理 区域,并在左侧选择 项目导入。 上传您的项目设置并按照向导进行操作。 当导入完成时,TeamCity 将显示结果。

选择要导入的项目

在选择备份文件后,您需要指定将导入哪些项目。

TeamCity 将分析选定的项目,以查看它们是否将被导入、合并或跳过。

  • 如果该项目是目标服务器的新项目,将会被 导入。 所有的实体(包括构建配置,模板,构建等等)及其数据将在目标服务器上创建。

  • 如果目标服务器上已存在相同的项目,该项目将被 合并(如果源项目和目标项目具有相同的 UUID外部 ID)。
    在合并过程中,现有的实体将保持不变,只有对目标新的实体才会导入相关数据。
    现有实体的数据不会被导入或合并:新数据不会添加到现有实体中(例如,变动不会添加到现有的 VCS 根目录中),现有文件也不会被改变(例如,如果两个服务器上都存在相同的模板但设置不同,目标文件将被保留)。
    这意味着,例如,您无法将缺失的构建导入到现有的构建配置中。 如果您需要向现有实体添加缺失的数据,例如,将新的构建导入到已导入的构建配置中,您应当使用用户界面删除此构建配置,并重新导入其项目。

  • 如果出现冲突,项目将被跳过:要么项目的UUID为新的,但其外部ID已在目标上存在;或者,如果源项目和目标项目有相同的UUID,但外部ID不同。

定义导入范围

您可以选择导入范围:在项目设置、构建和更改历史以及用户帐户中进行选择,或者导入所有内容。 由于导入的项目也可以使用其父项目的设置,因此 TeamCity 也将为父项目导入所有的 vcs 根、模板、Meta-Runner (元运行器)和其他与项目相关的设置。 如果同一项目已经存在于目标服务器上,已存在的对象不会被覆盖。

配置文件导入

对于每个导入或合并的项目,只要它们对目标服务器来说是新的,配置文件将被导入到目标服务器的 Data Directory。 现有文件将不会被更改。

以下文件已导入:

  • 该项目的配置 xml 文件,包括其构建配置、模板和 VCS Roots,以及其子项目。

  • 来自 <TeamCity 数据目录>/plugins 目录的所有文件。

  • 为新添加的构建配置创建构建编号文件。

导入用户和组

当选中用户进行导入时,TeamCity 将分析用户名,以查看用户是被 导入 还是被 合并

TeamCity 用户必须拥有唯一的用户名。

  • 对于目标服务器来说,用户名为 new 的用户帐户将会被 导入。 这些用户会在目标服务器上以一个单独的组的形式出现,标记为 已导入 <导入日期时间>。 所有相关的数据(个人构建、更改、测试静音和调查)将在目标服务器上创建。 用户帐户设置(角色、权限、VCS 名称、通知设置等:系统范围的设置以及与导入项目相关的设置)在导入期间将被保留。

  • 在源服务器和目标服务器上拥有相同用户名的用户帐户可以被 合并。 在合并过程中,已有的数据将保持不变,只将目标中的新数据加入:所有新的与用户相关的数据(个人构建,更改,测试静音和调查)以及用户帐户设置(角色,权限,VCS 名称,通知设置等:系统范围的设置以及与导入项目相关的设置)都将添加到目标服务器上的用户。
    (!)如果源服务器和目标服务器上的同一用户名属于不同的用户,合并可能会导致问题:在导入过程中,用户信息将无论如何进行合并。
    注意,导入后目标上的用户权限范围可能会发生变化,例如:

    • 如果用户在源系统中拥有系统管理员角色,那么在导入后,该角色将被添加到目标系统的用户中。

    • 如果用户在源上有多个项目的多个角色,只有在导入范围内的项目的新角色将被添加到目标中。

    Project Import | Import scope | Users部分将显示冲突的数量,您可以查看它们并决定是否想要合并它们。

    TeamCity 将在两个服务器上显示具有相同用户名和不同电子邮件的用户,以及具有相同用户名和相同电子邮件的用户数量。 电子邮件验证 可以被启用 于服务器,且具有相同用户名和电子邮件的用户将基于他们的电子邮件验证进行比较。 您可以查看冲突信息,并选择是否合并找到的用户。 如果在源 TeamCity 服务器或目标 TeamCity 服务器上,或者两者都存在已验证电子邮件的用户,那么选项将处于活动状态。

用户组的导入工作方式相同:会导入新的组,而现有的组可以合并。

如果发生 冲突(源和目标上都存在群组,但群组角色不同),在导入后,目标服务器上的群组可能会获取额外的角色。 因此,此组在目标上的成员也将获得额外的角色和权限。

项目导入页面 | 导入范围部分 | 将显示找到了多少个冲突的组。 您可以查看所有具有相同群组键的群组,并决定是否要合并它们。 请注意,"All Users" 组 总是会被列为冲突,因为它是所有 TeamCity 服务器上的默认组。

冲突

如果备份文件中的实体与目标服务器上的某些实体存在冲突,TeamCity 不会导入这些实体。 在导入之前,TeamCity 会分析备份文件,并在 导入范围 配置页面上显示所有检测到的冲突。

强烈建议您在进行导入之前解决所有冲突,因为未解决的冲突可能会导致导入后出现无法预测的行为,例如:

  • 如果例如,某些 VCS Root 被跳过,但依赖于它的 Build Configuration 被导入,可能会显示出关键错误。

  • 导入的构建配置可能会引用错误的模板,如果源服务器和目标服务器的模板之间存在未解决的 external IDs 冲突。

如果在导入之前没有解决冲突,您可以在导入结果日志下的 冲突文件 目录中找到冲突文件。

未包含在导入中的数据

关于导入,存在一些限制:

  • 代理和代理池未被导入(TW-39797)。

  • 设置是基于“按文件”进行合并的。 这意味着新的文件被添加,但没有设置文件被合并。 例如,如果要导入的项目已经存在于目标服务器上,其参数、项目特性和插件设置将不会被合并。

  • 如果您在版本设置中使用了"将安全值(如密码或 API 令牌)存储在 VCS 外部"选项,则已经在服务器上存在的项目的凭证将不会被导入。

  • 只有在范围内选择了用户时,才会导入审计记录。

  • 正在运行的构建和构建队列未包括在备份中且不会被导入。

  • 内部 id (例如构建的 id)在导入过程中不会保留。 这意味着,即使将旧服务器上的构建结果页面的 URL 重定向到新服务器,由于在导入时构建 id 发生变化,这些 URL 也会显示为已损坏。

  • 备份文件不包含工件和日志(构建日志存储在构建工件下),因此这些内容不会自动导入,但是 TeamCity 提供了脚本来 手动 移动它们。

  • 全球服务器设置(身份验证方案,自定义角色等)不会被导入。

  • 导入到 TeamCity Cloud :构建工件和日志。

移动工件和日志

尽管备份文件中并未直接导入工件和日志,但您可以使用来自 TeamCity 日志下的 projectsImport-<date> 目录中的 .bat.sh 脚本,从源服务器复制/移动它们到目标服务器。 这些脚本通过命令行接收源数据目录和目标数据目录;脚本接收源和目标 artifact 目录。 剩下的部分将自动完成。 脚本可以在服务器运行时执行。

TeamCity 可能需要一些时间来显示导入的构建工件。

查看导入结果

每个导入过程都会在 TeamCity 日志下创建 projectsImport-<date> 目录,允许您查看导入结果。

该目录包含以下内容:

  • 包含所有已合并数据的冲突文件目录

  • 映射,包含源数据库和目标数据库字段的映射

  • 用于复制工件和日志的脚本(参见 上文 部分)

  • 导入报告,列出导入结果,包括未导入数据的信息(如果有)

最后修改日期: 16日 7月 2024年