项目导入
项目导入会将项目及其所有数据和用户帐户从备份文件添加到现有 TeamCity 服务器,实际上是将两台服务器合并为一台。
项目导入或服务器迁移
导入是一项会造成中断的操作,并且 并非所有数据都会被导入 ,因此仅在需要向已托管其他项目的服务器添加项目时使用。 要将服务器的所有数据移动到另一台计算机,请改用 服务器迁移。
导入项目
在目标服务器上,转到 服务器管理 | 项目导入 ,上传备份文件,然后按照向导操作。 导入完成后,TeamCity 会显示结果。
选择要导入的项目
选择备份文件后,选择要导入的项目。 TeamCity 会分析这些项目,并报告每个项目将被导入、合并还是跳过。
如果项目对于目标服务器是新的,则该项目为 已导入。 其所有实体(构建配置、模板、构建等)及其数据都会在目标服务器上创建。
项目为 已合并 ,如果它已存在于目标服务器上,即源项目和目标项目共享相同的 UUID 和 外部 ID。 现有实体保持不变,只有对目标来说是新的实体及其数据会被导入。
现有实体的数据既不会被导入也不会被合并:新变更不会添加到现有 VCS 根,并且同时存在于两台服务器上的模板会保留其目标设置。 这也意味着不能将缺失的构建导入到现有构建配置中 — 要执行此操作,请在 UI 中删除该构建配置,然后重新导入其项目。项目为 跳过的 ,如果发生 冲突 :其 UUID 是新的,但其 外部 ID 已存在于目标中,或者源项目和目标项目具有相同的 UUID 但外部 ID 不同。
定义导入范围
可以按任意组合导入项目设置、构建和变更历史以及用户帐户。 由于导入的项目可以使用其父项目的设置,TeamCity 还会导入父项目的 VCS 根、模板、Meta-Runner 以及其他与项目相关的设置。 目标服务器上的现有对象永远不会被覆盖。
配置文件导入
对于每个已导入或合并的项目,TeamCity 会将对目标服务器来说是新的配置文件复制到其 数据目录。 现有文件不会被更改。
以下文件已导入:
项目及其构建配置、模板、VCS 根以及子项目的配置 XML 文件。
来自
<TeamCity Data Directory>/plugins目录的所有文件。新添加的构建配置的构建编号文件。
导入用户、组和令牌
用户帐户
TeamCity 用户必须具有唯一用户名,因此当用户包含在导入作用域内时,TeamCity 会比较用户名,以判断每个用户将被导入还是合并。 在这两种情况下,都会传输所有与用户相关的数据(个人构建、变更、测试静音和调查)以及 用户帐户设置 — 角色、权限、VCS 名称、通知设置等,包括系统范围的设置以及与导入项目相关的设置。
用户名对目标服务器来说是新的用户将被 已导入。 这些用户会在目标服务器上以一个单独的组的形式出现,标记为 已导入 <导入日期时间>。
用户名在两台服务器上都存在的用户可以被 已合并。 现有数据保持不变,只有对目标来说是新的数据会被添加。
合并依赖用户名,因此如果同一用户名在两台服务器上属于不同的人,其信息仍会被合并。 合并还可能扩展用户在目标服务器上的权限:源服务器上授予的系统管理员角色会添加到目标用户,而项目角色只会为导入作用域内的项目添加。
项目导入 | 导入范围 | 用户 部分会报告发现的冲突数量,以便进行查看并决定是否合并。 TeamCity 会列出在两台服务器上用户名相同但电子邮件不同的用户,并统计用户名和电子邮件都相同的用户数量。 如果启用了 电子邮件验证 ,则会根据已验证的电子邮件比较此类用户。 只有当源服务器、目标服务器或两者上存在具有已验证电子邮件的用户时,这些选项才会处于活动状态。
用户组
组的工作方式相同:新组会被导入,现有组可以被合并。 如果发生 冲突 — 某个组存在于两台服务器上但角色不同 — 导入后目标组可能会获得额外角色,其所有成员也会如此。
项目导入 | 导入作用域 | 组 部分会报告发现的冲突组数量。 可以查看所有共享同一组密钥的组,并决定是否合并它们。 "All Users" 组始终会被列为冲突,因为默认情况下它存在于每个 TeamCity 服务器上。
访问令牌
当用户包含在导入作用域内时,TeamCity 是否传输其 访问令牌取决于 令牌作用域:
限制为导入所选项目的令牌(按项目限制作用域)默认会被导入。 在目标服务器上,这些令牌仅对导入的项目保留其权限。
限制为任何其他项目的令牌不会被导入。 这会产生以下影响:
如果某个令牌的作用域为项目 A(已导入)和项目 B(未导入),其权限作用域会缩小到 A。
如果某个令牌的作用域为多个项目,而这些项目均未导入,则该令牌完全不会被导入。
作用域为已导入项目父项目的令牌会被跳过,即使 TeamCity 会导入该父项目与其子项目共享的设置。
授予与其所有者相同权限的令牌(与当前用户相同 作用域)仅在获得显式同意后才会导入:在 项目导入 | 导入范围 | 用户 部分选择相应的复选框。 由于此类令牌不限于任何项目,因此在目标服务器上,它们会授予其所有者在该服务器上拥有的所有权限 — 这就是默认将其排除在外的原因。
对于合并的用户,导入的令牌会添加到该用户在目标服务器上已有的令牌中。 如果用户已拥有名称相同的令牌,则会跳过匹配的导入令牌。
冲突
如果备份文件中的实体与目标服务器上的实体发生冲突,TeamCity 不会导入这些实体。 导入之前,TeamCity 会分析备份文件,并在 导入范围 配置页面上显示所有检测到的冲突。
继续之前需要 强烈建议您解决所有冲突 ,因为未解决的冲突可能会导致导入后出现不可预测的行为。 例如,如果某个构建配置所依赖的 VCS 根被跳过,它可能会报告严重错误;如果源服务器和目标服务器中的模板存在冲突的 外部 ID ,它可能会引用错误的模板。
如果在未解决冲突的情况下导入,可以在导入结果日志下的 冲突文件 目录中找到冲突文件。
未包含在导入中的数据
导入有以下限制:
代理和代理池未被导入(TW-39797)。
设置按文件合并:会添加新文件,但不会合并任何设置文件。 例如,如果要导入的项目已存在于目标服务器上,则其参数、项目特性和插件设置不会被合并。
如果对版本化设置使用 "将安全值(如密码或 API 令牌)存储在 VCS 外部" 选项,则对于服务器上已存在的项目,不会导入凭据。
只有当用户包含在导入作用域内时,才会导入审计记录。
正在运行的构建和构建队列不包含在备份中,因此不会被导入。
内部 ID,例如构建 ID,不会保留。 这意味着,即使从旧服务器重定向到新服务器,指向构建结果页面的 URL 也会显示为已损坏。
备份文件不包含工件和日志(构建日志存储在构建工件下),因此这些内容不会自动导入。 TeamCity 提供脚本来 手动移动它们。
全球服务器设置(身份验证方案,自定义角色等)不会被导入。
构建工件和日志无法导入到 TeamCity Cloud。
移动工件和日志
工件和日志不会从备份文件导入,但可以使用 TeamCity 日志下 projectsImport-<date> 目录中的 .bat 和 .sh 脚本,将它们从源复制或移动到目标服务器。 这些脚本通过命令行接受源和目标 工件目录 ,其余操作会自动完成。 可以在服务器运行时运行这些脚本。
TeamCity 可能需要一些时间来显示导入的构建工件。
查看导入结果
每个导入过程都会在 TeamCity 日志下创建 projectsImport-<date> 目录,以便查看导入结果。 此目录包含:
包含所有已合并数据的
冲突文件目录源数据库和目标数据库中字段的映射
用于复制工件和日志的脚本(参见 上文 部分)
列出导入结果的导入报告,包括未导入数据的信息(如果有)