TeamCity Data Directory(TeamCity 数据目录)
TeamCity 数据目录是 TeamCity 服务器在文件系统中用于存储配置,构建结果和当前操作文件的目录。 目录是所有配置设置的主要存储位置,且保存了对 TeamCity 安装至关重要的数据。
构建历史、用户及其数据以及其他一些数据都存储在 数据库 中。 请查看关于 备份 的注释,了解存储在目录和数据库中的数据的描述。
请注意,在本文档和其他 TeamCity 材料中,该目录通常被称为 .BuildServer
。 如果您有其他名称,请将 .BuildServer
替换为实际名称。
TeamCity 数据目录的位置
当前正在使用的数据目录位置可以在正在运行的 TeamCity 服务器实例的 Administration | Global Settings页面上查看。 点击浏览链接将打开Administration | Global Settings | 浏览数据目录选项卡,允许用户在目录中上传新文件或修改现有文件。
当前的 Data Directory 位置也在 logs/teamcity-server.log
文件中可用(在服务器启动时查找 "TeamCity Data Directory:" 行)。
配置位置
有三种方法可以配置 TeamCity 数据目录的位置:
通过在第一次服务器启动时的 UI 表单中选择它。 指定的数据目录然后被保存到
<TeamCity 安装目录>/conf/teamcity-startup.properties
文件中。手动地,使用
TEAMCITY_DATA_PATH
环境变量。 该变量可以是系统范围内的,也可以是在启动 TeamCity 服务器的用户下定义的。手动,通过指定
teamcity.data.path
JVM 属性。
如果在首次启动时,TeamCity 发现已将数据目录位置配置为环境变量,它会跳过相关的启动屏幕并使用检测到的路径。
如果未设置 TEAMCITY_DATA_PATH
环境变量,且 <TeamCity 安装目录>/conf/teamcity-startup.properties
文件也未定义它,那么默认的 TeamCity 数据目录位置将是用户的主目录(例如,在 Linux 下,它是 $HOME/.BuildServer
,在 Windows 下,它是 %USERPROFILE%/.BuildServer
)。
关于选择数据目录位置的建议
由于数据目录存储了所有的服务器和配置项目设置,因此不允许具备相应访问级别的操作系统用户进行读写非常重要。 参阅相关的 安全提示。
默认情况下, system
目录存储历史记录中所有构建的 工件 和构建日志,并可能非常大,因此建议将 TeamCity 数据目录放在非系统磁盘上。 请参考 Clean-Up 页面,配置自动清理旧版本的设置。 如果单个本地硬盘无法存储所有的工件,您可以添加另一个硬盘并配置 多个工件路径。
请注意,TeamCity 假定可以可靠且持久地读写访问 TeamCity 数据目录,如果数据目录无法访问,可能会导致其功能失常。 此故障可能会在目录不可用时影响 TeamCity 的操作,并可能还会破坏当前正在运行的构建的数据。 虽然 TeamCity 应该能够容忍偶尔的数据目录不可访问,但在极少数情况下,存储在目录中的数据可能仍会被损坏或部分丢失。
建议将 <TeamCity 数据目录>/system/caches
存储在本地磁盘或者甚至单独的专用磁盘上,尤其是如果 TeamCity 数据目录位于网络存储上。 您可以在主目录中创建一个符号链接指向 caches
目录,或者通过 teamcity.caches.path
JVM 系统属性重新定义其路径,例如,可以在 TEAMCITY_SERVER_OPTS 环境变量中指定此属性。
TEAMCITY_SERVER_OPTS=-Dteamcity.caches.path=<本地缓存目录的路径>
caches
目录存储了 VCS 仓库的本地克隆,为其提供良好的性能非常重要。 如果目录内容丢失,系统会重新构建,不会有任何数据丢失。
TeamCity 数据目录结构
TeamCity 数据目录的 配置
子目录包含了您的 TeamCity 项目的配置,而 system
子目录包含了构建日志、构件和数据库文件(如果使用的是默认的内部数据库(HSQLDB))。 您还可以查看 手动备份和恢复 的信息,以更好地理解哪些数据存储在数据库中,哪些存储在文件系统中。
BuildServer / config
— 一个用于存储项目,构建配置和常规服务器设置的目录。_trash
— 删除的项目的备份副本,您可以手动删除它们。 有关恢复项目的详细信息,请查阅 操作方法。通知
— 通知模板和通知配置设置。日志记录
— 内部服务器日志配置文件,新的文件可以手动添加到目录中。项目
— 一个包含所有项目相关设置的目录。 每个项目都有自己的目录。 项目层次结构并未被使用,所有的项目都有一个对应的目录直接位于 “projects” 下。<projectID>
—— 一个包含所有<projectID>
ID 项目设置的目录(包括构建配置设置,但不包括子项目设置)。 只要具有必需的嵌套文件,就可以创建新的目录。 Root 目录包含了 root project 的设置。 无论何时,只要在目录下出现*.xml.N
文件,它们就是通过网页用户界面更改项目配置时创建的相应文件的备份。 这些备份副本不被 TeamCity 使用。buildNumbers
— 一个包含<buildConfigurationID>.buildNumbers.properties
文件的目录,这些文件存储对应构建配置的当前构建编号计数器。buildTypes
— 一个包含<构建配置或模板 ID>.xml
文件的目录,这些文件具有相应的构建配置或模板设置。pluginData
— 用于存储可选的和插件相关的项目级设置的目录。 捆绑插件设置和像自定义项目标签这样的辅助项目设置都存储在目录中的plugin-settings.xml
文件中。 根据版本设置,存储在 VCS 外部的凭证存储在secure/credentials.json
文件中。vcsRoots
— 一个目录,其中包含项目的 VCS 根设置在文件<VcsRootID>.xml
中。
main-config.xml
— 服务器范围内的配置设置。database.properties
— 数据库连接设置,更多信息请查阅 设置外部数据库。license.keys
— 一个用于存储输入到 TeamCity 中的许可证密钥的文件。change-viewers.properties
— External Changes Viewer 配置属性,如果可用的话。internal.properties
— 用于指定各种 TeamCity 内部属性的文件。 默认情况下,它不存在,如有需要,必须创建它。auth-config.xml
—一个用于存储服务器范围内的身份验证相关设置的文件。ldap-config.properties
— LDAP 认证 配置属性。ntlm-config.properties
— Windows 域认证 配置属性。issue-tracker.xml
— 问题跟踪器集成设置。cloud-profiles.xml
— 云(例如,Amazon EC2)集成设置。backup-config.xml
— 网页 UI 备份配置设置。roles-config.xml
— 角色-权限 分配文件。database.*.properties
— 不同外部数据库的默认模板连接设置文件。*.dtd
— 用于 XML 配置文件的 DTD 文件。*.dist
— 对应于无.dist
的文件的默认模板配置文件。 请参见 下方。
.BuildServer/plugins
— 一个目录,可以在其中存储 TeamCity 插件,以便在 TeamCity 启动时自动加载。 新的插件可以添加到目录中。 在服务器未运行时,可以移除现有的项目。 插件的结构在 插件打包 中有所描述。.tools
— 创建此目录以集中要安装在所有代理上的工具。 此文件夹下的任何文件夹或.zip
文件都将分发给所有代理,并显示在 Agent 安装目录 文件夹下。
.BuildServer/system
—— 存储构建结果数据的目录。 目录的内容由 TeamCity 生成,不是为手动编辑而设计的。工件
— 存储构建工件、日志和其他数据的默认目录。 工件存储的格式是<project ID>/<build configuration name>/<internal_build_id>
(了解更多关于 内部构建 ID 的信息)。 如有必要,可以手动添加/删除每个构建目录中的文件——这将会反映在相应构建的构件中。消息
— 一个存储无法移动的文件的目录(有关详细信息,请查看服务器启动时的服务器日志)。更改
— 一个目录,其中 remote run 的更改以内部格式存储。 目录内的文件名包含内部个人更改 id。 如果需要,可以手动删除文件,但相应的个人构建会在 UI 中丢失个人更改,而且当受影响的排队构建尝试启动时,他们会失败或者无法运行个人补丁。pluginData
— 存储关于构建、当前系统状态等多种数据的目录。 建议不要删除或修改此目录。 此目录的内容对应于存储在数据库中的数据,因此,当数据库恢复时,应将此目录恢复到与数据库一致的状态。audit
— 存放构建配置更改历史的目录,并用于显示更改的差异。 同时在数据库中存储相关数据。caches
— 一个包含内部缓存的目录(版本控制系统仓库内容、搜索索引、其他)。 它可以被 手动删除 以清除缓存:如有需要,它们将自动恢复。 在服务器未运行时删除目录更为安全。.unpacked
— 该目录会自动创建,用于存储解压后的服务器端插件。 在服务器运行时,不应进行修改。 如果服务器没有运行,可以安全地删除。
buildserver.*
— 一组与嵌入式 HSQLDB 相关的文件。
.BuildServer / backup
— 用于存储通过 web UI 创建的备份存档的默认目录。 这个目录中的文件不会被 TeamCity 使用,如果已经复制保管,那么可以安全地删除。.BuildServer/lib/jdbc
— TeamCity 用于搜索 数据库驱动程序 的目录。 如果有必要,创建目录。 TeamCity 不管理目录中的文件,它仅扫描存储所需驱动程序的.jar
文件。
直接修改配置文件
在 配置
目录下的文件可以手动编辑(除非明确注明)。 更改将在不重启服务器的情况下生效。 TeamCity 会监控这些文件的更改,并在检测到修改或新文件时自动重新读取它们。 请注意,这些文件的物理结构或逻辑结构很容易被破坏,因此请极其谨慎地编辑它们。 在进行任何更改之前,始终要备份您的数据。
请注意,文件的格式可能会随着 TeamCity 的新版本而更改,所以在升级后,文件更新流程可能需要进行调整。
REST API具有用于编辑大多数常见设置的功能,并且在服务器升级后的功能稳定性更高。
.dist 模板配置文件
许多为手动编辑而设计的配置文件遵循以下约定:
与文件(假设命名为
fileName
)一起,还有一个文件fileName.dist
。.dist
文件的目的是储存默认服务器设置,以便您可以将它们用作fileName
配置的样本。.dist
文件不应手动编辑,因为每次服务器启动时,都会覆盖这些文件。 另外,.dist
文件在服务器升级过程中用于确定fileName
文件是否被用户修改,或者后者是否可以更新。
XML 结构和引用
如果您计划手动修改配置,请注意,有些条目是通过 ids 相互链接的。 这样的条目的例子包括 构建配置 -> VCS 根 链接和 项目 -> 父项目 链接。 在整个服务器中,所有同类型的条目必须具有唯一的 ids。 只有在它们的 id 唯一时,才能添加新条目。
另请参阅与在 TeamCity 服务器之间移动项目相关的 部分。