设置外部数据库
TeamCity 将构建历史、用户、构建结果和一些运行时数据存储在 SQL 数据库中。 在此处查看存储数据的完整列表
当前使用的数据库显示在 Administration | Global Settings 页面上。 它还在服务器启动时的 teamcity-server.log
中提到。 HSQL*
意味着正在使用内部数据库。
默认内部数据库
在首次运行 TeamCity 时,默认建议使用内部 HSQLDB 数据库。 内部数据库仅适用于评估目的;它开箱即用,无需额外设置。
然而,我们强烈建议在生产环境中使用外部数据库作为后端 TeamCity 数据库。 外部数据库通常更可靠,性能更佳:内部数据库可能会崩溃并丢失所有的数据(例如,“磁盘空间不足” 的情况)。 内部数据库在处理大数据集(数据库存储文件超过200 MB)时可能会变得极其缓慢。 请注意,如果您使用的是内部数据库,我们的支持不包括任何性能或数据库数据丢失问题。 一旦您开始依赖存储在您的 TeamCity 服务器上的数据, 就迁移到外部数据库。
选择外部数据库引擎
作为一般规则,您应使用最适合您的环境并且您的组织可以更好地维护/配置的数据库。 在我们努力确保 TeamCity 在所有支持的数据库下都能同样出色地运行的同时,可能在某些在 TeamCity 生成的高负载下的数据库中出现问题。
您可能还需要估计所需的数据库容量。
一般步骤
配置外部数据库以供 TeamCity 使用(参见下面的 特定数据库部分)。
通过在 首次启动 TeamCity 服务器 的表单上或手动配置 数据库连接设置 来配置与数据库的连接。
请注意,TeamCity 将对数据库模式拥有所有权。 数据库结构在首次启动时创建,并在升级至新的 TeamCity 版本期间积极修改。 在 TeamCity 正常运行时,模式不会发生变化。
TeamCity 使用的用户帐户应具有在其模式中创建新表、修改和删除现有表的权限,除此之外,还应具有对所有表的常规读/写权限。您可能还需要下载您的数据库的 JDBC 驱动程序。
由于许可条款,TeamCity 并未捆绑外部数据库驱动程序的文件.jar
。 您需要下载 Java JDBC 驱动程序,并将相应的.jar
文件(请参阅下方的驱动程序特定部分)放入<TeamCity 数据目录>/lib/jdbc
目录中。
请注意,.jar
文件应该为不晚于运行 TeamCity 的 Java 版本进行编译。 否则,您可能会遇到与数据库驱动类相关的“Unsupported major.minor version”错误。
特定数据库的步骤
以下部分描述了数据库服务器和 TeamCity 服务器所需的配置。
MySQL
在 MySQL 服务器端
推荐的数据库服务器设置:
使用 InnoDB 存储引擎。
使用 utf8mb4 字符集 (或者如果 MySQL 版本是 5.5.2 或更早版本的话,使用 utf8)。
使用区分大小写的排序规则。
确保运行 TeamCity 的 JVM 和 MySQL 实例的时区保持一致,您可以使用
my.cnf
文件,或者在操作系统级别配置时区。服务器的 sql_require_primary_key 系统变量必须设定为
关闭
,因为 TeamCity 管理的表格没有主键。
将被 TeamCity 使用的 MySQL 用户帐户必须被授予对 TeamCity 数据库的所有权限。 这可以通过在 MySQL 控制台中执行以下 SQL 命令来完成:
在 TeamCity 服务器端(配合 MySQL)
JDBC 驱动安装:
下载 MySQL JDBC driver。 确保使用与您的服务器兼容的版本。 如果 MySQL 服务器版本是 5.5 或更高版本,那么 JDBC 驱动程序版本应至少为 5.1.23。 对于版本8以上,应使用驱动版本8。
对于 Windows,以“自定义”模式运行安装程序,并选择“MySQL Connectors | Connector/J”以安装独立连接器。
将下载的存档(Linux)或安装文件夹(Windows)中的
mysql-connector-java-*-bin.jar
复制到<TeamCity 数据目录>/lib/jdbc
目录中(如果存在任何文件,请先删除)。 继续进行 TeamCity 设置。
PostgreSQL
在 PostgreSQL 服务器端
在 PostgreSQL 中为 TeamCity 创建一个空的数据库。
确保将数据库设置为使用 UTF8。
授予 TeamCity 用户帐户修改此数据库的权限,该用户帐户被用于与数据库工作。
TeamCity 并未明确指定将为其表格使用哪种模式。 默认情况下,PostgreSQL 会在 public
schema 中创建表。 TeamCity 也可以与其他 PostgreSQL 架构一起使用。 要切换到不同的模式,请创建一个与用户名完全相同的模式。 这可以使用 pgAdmin
工具来完成,或使用以下的 SQL:
模式必须为空(不得包含任何表格)。
在 TeamCity 服务器端(使用 PostgreSQL)
下载所需的 PostgreSQL JDBC42 驱动程序 并将其放入 <TeamCity 数据目录>/lib/jdbc
目录中(如有任何现有文件,请先删除)。 继续进行 TeamCity 设置。
Oracle
在 Oracle 服务器端
为 TeamCity 创建一个 Oracle 用户帐户 / 架构。
确保数据库实例的国家字符集是 UTF 或 Unicode。
授予
创建会话
和创建表格
权限给一个用户。这个用户的账号将被 TeamCity 用于与这个数据库进行操作。
在首次连接时,TeamCity会在用户的模式中创建所有必要的表格和索引。 (注意:TeamCity 从不尝试访问其他架构,即使它们是可访问的。)
确保 TeamCity 用户有权限访问表空间。
在 TeamCity 服务器端(使用 Oracle)
获取 Oracle JDBC 驱动。 支持的驱动程序版本为 11.1 及以后版本。 Oracle JDBC 驱动程序必须与您的 Oracle 服务器兼容。
请放置以下文件:ojdbc8.jar
(或ojdbc6.jar
,ojdbc7.jar
,根据您的数据库版本而定)orai18n.jar
(如果在驱动版本中缺失,可以省略)
导入至<TeamCity 数据目录>/lib/jdbc
目录(如果有的话,删除那里的现有文件)。
强烈建议您在 Oracle 服务器安装中定位驱动程序。 如果需要,联系您的 DBA 获取文件。 或者,从 Oracle 网站 下载 Oracle JDBC 驱动程序。
继续进行 TeamCity 设置。
Microsoft SQL Server
要查看逐步指导,请参见 专门页面。 当前部分提供了设置所需的关键细节。
在 MS SQL Server 端
创建一个新的数据库。 作为主要的排序约定,请使用与您的地区相对应的区分大小写的排序方式(排序名称以
_CS_AS
结尾)。创建一个 TeamCity 用户,并确保此用户是数据库的所有者(授予用户
dbo
权限),这将赋予用户修改数据库架构的能力。 对于 SSL 连接,请确保 MS SQL 服务器的版本和 TeamCity 的 Java 版本兼容。 我们建议使用 SQL 服务器的最新版本。根据服务器的使用强度,分配足够的事务日志空间。 我们建议的设置不低于 1 GB。
确保 SQL Server 浏览器正在运行。
确保已为 SQL Server 实例启用了 TCP/IP 协议。
在 TeamCity 服务器端(配合 MS SQL)
下载 Microsoft JDBC 驱动程序v8.4+(
sqljdbc_8.4.x
包)从 Microsoft 下载中心。将下载的包解压到一个临时目录中。 将刚刚下载的包中的
mssql-jdbc-*.jre11.jar
复制到<TeamCity 数据目录>/lib/jdbc
目录中(如果有的话,删除那里现有的文件)。 MS SQL 集成安全性(Windows 认证)需要按照 说明 从驱动程序包中安装sqljdbc_auth.dll
。继续进行 TeamCity 设置。
jTDS 驱动
不建议使用 jTDS JDBC 驱动程序,因为它存在已知的使用 Unicode 字符的问题。
如果您使用的是驱动程序( jtds
文本出现在 connectionUrl
的 database.properties
中),强烈建议您切换至本地驱动程序:
创建服务器 backup,包括数据库。
停止服务器并配置服务器,使其使用在上述部分中提到的原生 Microsoft JDBC 驱动程序。
将备份恢复到新的 MS SQL 数据库中。
运行服务器。
配置数据库连接
属性文件
数据库连接设置存储在 <TeamCity Data Directory>/config/database.properties
文件中。 该文件是一个 Java properties 文件。 您可以修改它以指定数据库连接所需的属性。
对于所有支持的数据库,都有带有数据库特定属性的 模板文件,位于 <TeamCity 数据目录>/config
目录中。 这些文件使用 数据库.<数据库类型>.属性.dist
命名格式,可以作为所需设置的参考。
TeamCity 使用 Apache DBCP 进行数据库连接池管理。 请参考 Apache Commons 文档 以获取配置属性的详细说明。
环境变量
主数据库连接设置可以通过在 TeamCity 服务器的环境中设置环境变量来定义。 环境变量可以用来替代(或者是补充) database.properties
文件中的属性。
使用环境变量配置数据库连接在以下情况中可能会很有用:
在未定义
database.properties
文件的情况下启动 TeamCity 服务器。避免在
database.properties
文件中暴露数据库密码,而是通过设置TEAMCITY_DB_PASSWORD
环境变量来代替。
变量 | 描述 |
---|---|
| 数据库的 JDBC 连接字符串,例如:
|
| 用于连接数据库的用户名 |
| 连接到数据库的密码 |
请注意,环境变量优先于 database.properties
文件中的相应属性:
TEAMCITY_DB_URL
覆盖了connectionUrl
TEAMCITY_DB_USER
覆盖了connectionProperties.user
TEAMCITY_DB_PASSWORD
覆盖了connectionProperties.password