在Windows Server 2012上安装TeamCity时出现“java.library.path中没有sqljdbc_auth”错误

13
我正在一个Windows 2012服务器上安装TeamCity。我遇到了数据库连接设置屏幕,但出现了以下错误信息: “当执行以下操作时SQL错误:从数据源获取连接:java.library.path中没有sqljdbc_auth” 我已经将“sqljdbc_auth.dll”复制到“C:\Windows\System32”文件夹中,并添加系统环境变量“java.library.path”,指向该文件夹。
7个回答

18

即使您的平台是64位的,Teamcity会安装32位版本,除非您有意使用64位版本。因此,我将为您提供在Teamcity SQL数据库设置中使用Windows身份验证的32位说明。对于64位设置,说明是相同的,只需将x86更改为x64。

  1. 在SQL服务器中创建一个空数据库
  2. 确保配置在TeamCity服务上的Windows帐户可以访问该数据库
  3. 将sqljdbc42.jar复制到<TeamCity_data_dir>\lib\jdbc\ sqljdbc42.jar
  4. 从Microsoft下载中复制auth\x86\sqljdbc_auth.dll<TeamCity_data_dir>\lib\sqljdbc_auth.dll
  5. 打开System > Advanced System Settings > Environment Variables并添加一个系统变量TEAMCITY_SERVER_OPTS,其值为 -Djava.library.path=<TeamCity_data_dir>\lib 或运行 setx TEAMCITY_SERVER_OPTS=-Djava.library.path=<TeamCity_data_dir>\lib
  6. 单击所有对话框上的OK并重新启动Teamcity服务。

现在,您可以使用Windows身份验证将Teamcity连接到SQL服务器,之后向导将创建数据库。

编辑:2020年1月27日

在2019.2.1更新中,我不得不将sql_jdbcauth.dll文件移动到<TeamCity_data_dir>\system\caches\jdbc\native\windows-i386,这可能只是升级过程中的一个错误。


4
这应该是TeamCity指南的编写方式,而不是他们当前无法帮助我的文档。非常感谢您的答案。 - Pricey
3
第5步令人困惑。Server 2016拥有一个改进的对话框,需要您将变量名和变量值分开。正确的变量名是TEAMCITY_SERVER_OPTS,正确的变量值是-Djava.library.path=<TeamCity_data_dir>\lib,当然要用实际的teamcity数据目录路径替换<TeamCity_data_dir> - Sam Rueby

7

我点赞因为它对我帮助很大——但我建议在链接旁添加更多信息。总的来说,就是用x64 jre替换TC jre。 - Grzegorz W
3
如果您使用的是32位系统,只需将jdbc下载中的x86版本的sqljdbc_auth.dll文件放入<TeamCityProgramDir>\bin目录即可。 - Brian Lacy
@BrianLacy 这是唯一对我有用的东西,谢谢。你应该将它添加为答案。 - demoncodemonkey

6

我通过在数据库配置设置期间使用SQL Server身份验证而不是Windows身份验证来解决了这个问题。不确定为什么这样可以修复错误,因为它涉及到Java环境变量,但我只能假设该错误是由于无法登录数据库并以某种原因抛出了一个不相关的错误。

这似乎是TeamCity抛出了错误的错误消息。如果您遇到此错误,请尝试切换到SQL Server身份验证。


Windows身份验证具有特定的配置要求 - 访问支持它的Microsoft提供的DLL。普通的SQL身份验证不需要这个。请查看我的回答。 - Bron Davies
您需要提供dll的路径 -Djava.library.path=path/to/dll,请在此处阅读更多信息 https://dev59.com/-ajja4cB1Zd3GeqP5RR0#50115530 - rafalkasa
为了解决文件未找到错误而从Windows身份验证切换到SQL Server身份验证就像用加农炮杀蚊子一样。 - janv8000

6
如果您正在运行32位系统,只需将jdbc下载中的x86版本的sqljdbc_auth.dll复制到<TeamCityProgramDir>\bin中即可。

2
这在迁移步骤中对我起了作用。但是之后运行TeamCity时,它仍然找不到文件。所以我最终将文件复制到TeamCityProgramDir\binTeamCityProgramDir\lib,现在一切都很好。 - demoncodemonkey
1
这应该是答案! - Miguel
bin 文件夹中的文件会在 TeamCity 自动更新期间被移动:_[2019-03-19 16:18:14,375] INFO - jetbrains.buildServer.UPDATE - 将 C:\TeamCity\bin\sqljdbc_auth.dll 移动到 .old_。 - janv8000

1
你应该检查TeamCity服务器日志。我的(位于c:\TeamCity\logs\teamcity-server.log)提到了以下内容:

[2019-03-20 07:54:56,045] INFO - jetbrains.buildServer.STARTUP - Native library sqljdbc_auth.dll was not found under either E:\BuildServer\lib\jdbc\native\windows-i386 or E:\BuildServer\lib\jdbc\native; will continue looking in sun.boot.library.path and java.library.path.

sqljdbc_auth.dll库放入E:\BuildServer\lib\jdbc\native\windows-i386并重新启动服务后,一切都很好;无需干涉bin文件夹(它们在TC升级期间会被重置)或者定义环境变量。

0
在我的情况下,它没有起作用,因为之前安装和版本的TeamCity中有一些文件。我卸载了TeamCity,删除了所有TeamCity文件夹并重新安装。然后它就像魔法般地工作了。

0
今天我在使用TeamCity 10.x时遇到了这个问题,它自带Java,并且我想将现有的内部数据库迁移到SQL Server。
  1. 按照 使用 MS SQL Server 设置 TeamCity 的步骤进行,直到需要设置 JDBC 驱动程序。
  2. 使用与您设置 SQL Server 相同的 Windows 帐户登录 TeamCity 服务器。
  3. 当前版本建议下载 6.0+ 版本的驱动程序,但是引用了 4.x 版本。您需要下载位于 Downloads\Microsoft JDBC Driver 6.2 for SQL Server\sqljdbc_6.2\enu\mssql-jdbc-6.2.2.jre8.jar 的版本,并将其复制到 C:\ProgramData\JetBrains\TeamCity\lib\jdbc\mssql-jdbc-6.2.2.jre8.jar
  4. 从相同的 6.x 驱动程序下载中,将 Downloads\Microsoft JDBC Driver 6.2 for SQL Server\sqljdbc_6.2\enu\auth\x86\sqljdbc_auth.dll 复制到 C:\ProgramData\JetBrains\TeamCity\lib\sqljdbc_auth.dll
  5. 添加一个名为 TEAMCITY_SERVER_OPTS 的新系统环境变量,值为 -Djava.library.path=C:\ProgramData\JetBrains\TeamCity\lib
  6. 为使 MaintainDB 工具正常工作,请添加另一个名为 TEAMCITY_MAINTAINDB_OPTS 的系统环境变量,值与上述相同(-Djava.library.path=C:\ProgramData\JetBrains\TeamCity\lib)。

现在您可以运行MaintainDB而不会出现关于sqljdbc_auth.dll不在JAVA库路径中的错误。

请参见通过maintainDB命令行工具创建备份 - maintainDB启动选项,了解为什么需要设置两个环境变量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接