安装和配置搜索
Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018
了解如何在Azure DevOps Server中为代码、Wiki 和工作项搜索扩展执行以下操作。
有关管理搜索索引的信息,请参阅 “管理搜索”和“索引”。
先决条件
- 若要安装搜索扩展,必须为组织的 Project 集合管理员 (PCA) 。 非管理用户还可以请求将扩展添加到其 PCA。
- 请参阅安装和配置Azure DevOps Server和要求和兼容性。
硬件建议
可以在运行Azure DevOps Server的任何大小物理服务器或虚拟机上使用搜索。 可以在同一台服务器上或专用于搜索的单独服务器上对其进行配置。 在同一服务器上配置搜索时,请考虑现有的 CPU 利用率系数,因为Azure DevOps Server本身。
提示
对于生产环境,建议在单独的服务器上配置搜索。
对于多用户方案中可接受的性能,请考虑以下建议:
- 服务器上搜索的用户少于 250 个, (通常用于演示和试用目的) :
- 四核处理器,16 GB (最小) RAM
- CPU 利用率系数小于 50%
- 固态硬盘 (SSD) 存储支持的快速硬盘
- 位于 单独服务器上的搜索的用户少于 500 个:
- 双核处理器,最小) RAM (8 GB
- 固态硬盘 (SSD) 存储支持的快速硬盘
- 位于 单独服务器上的搜索的用户少于 1,000 个:
- 四核处理器,16 GB (最小) RAM
- 固态硬盘 (SSD) 存储支持的快速硬盘
- 位于 单独服务器上的搜索超过 1,000 名用户:
- 四核处理器,16 GB (最小) RAM
- 固态硬盘 (SSD) 或存储区域网络 (SAN) 存储支持的快速硬盘
- 具有多个 AT 的Azure DevOps Server:
- 在单独的服务器上安装搜索
- 在搜索安装之前,Azure DevOps Server CPU 使用率大于 50%:
- 在单独的服务器上安装搜索
磁盘空间要求:
搜索使用的磁盘空间量主要取决于索引的文件的类型和大小。 对于代码搜索,由于存储库可能很大,并且版本控制中具有不同的代码文件,因此磁盘空间要求可能很重要。 最多分配要编制索引的所有存储库大小的 150%。 从 TFS 2018 Update 3 及更高版本开始,用户可以从其存储库中排除文件夹以编制索引,以优化搜索使用的磁盘空间。
软件依赖项
搜索具有以下依赖项,这些依赖项自动作为配置的一部分进行安装:
- Elasticsearch BV (的 Elasticsearch 请参阅 Notes 1 和 2)
- Elasticsearch NEST 客户端
- Azul Zulu OpenJDK (请参阅 Java 安装说明)
- Markdowndeep by Topten Software
- Roslyn 编译器平台
- ANTLR 语言识别分析器
注意
Java 安装说明
- 如果搜索配置向导未检测到 Java 运行时环境 (JRE) 的工作安装,则提供下载和安装最新支持版本的选项。 需要 Internet 连接才能下载。 如果目标服务器没有 Internet 连接,则必须在尝试安装搜索之前手动下载并安装 JRE。
- Azure DevOps Server使用 Oracle Server Java 运行时环境之前搜索的版本。 在Azure DevOps Server中,默认 JRE 为 Azul Zulu OpenJDK。
- 安装期间,向导会将 JAVA_HOME 环境变量设置为指向 JRE 安装文件夹。 如果配置向导未正确配置,或者 JAVA_HOME 设置指向早于搜索所需的早期版本,则配置向导可能无法检测到现有的 JRE 安装。
注意
不建议在共享资源的计算机上安装 Elasticsearch,尤其是在具有多个应用程序层的大型企业环境中。 相反,我们建议在单独的专用计算机上设置 Elasticsearch。 这样,JAVA 环境不会在计算机之间共享,以用于其他目的。
如果 JRE 版本早 于搜索所需的最低版本,并且 JAVA_HOME 变量已设置为该版本,建议在 单独的服务器上安装 Search。 如果更改 JAVA_HOME 变量的值,可能会导致其他已安装的软件失败。
如果服务器 JRE 版本 等于或晚 于搜索所需的最小值,并且配置向导无法识别该版本,请将 JAVA_HOME 变量的值设置为该版本。 此操作在 JRE 安装指南中介绍。 然后,重新运行配置向导。
如果由于其他依赖项而无法安装搜索所需的 Java 版本,可以执行以下任务:
- 在未安装 Java 的服务器上使用搜索扩展安装Azure DevOps Server。 对于超过 250 个用户或 CPU 使用率超过 50% 或多个 AT,我们不建议执行此操作)
- 在与 Azure DevOps Server 不同的服务器上安装搜索和 JRE
注意
如果使用 Oracle Server JRE 8(TFS (Azure DevOps Server中搜索的默认值)不使用 Oracle Server JRE 8) ,请注意以下信息:
- 搜索不使用或支持服务器 JRE 8 的任何商业功能。 因此,在搜索配置期间,服务器 JRE 的商业功能既未激活也不解锁
- 如果选择继续使用 Oracle JRE,请联系 Oracle 获取 Java 标准版 订阅,以便继续接收 JRE 更新
从 Oracle Server JRE 迁移到 Zulu OpenJDK
Azure DevOps Server中的搜索同时支持 Azul Zulu OpenJDK 和 Oracle JRE,让你可以根据需求在它们之间进行选择。 在安装期间选择 JRE 时,Azure DevOps Server默认为 Azul Zulu OpenJDK 8。
若要更改为 Azul Zulu OpenJDK,请执行以下步骤:

有关详细信息,请参阅GitHub Code-Search Java 迁移。
注意
- 如果选择使用 Azul Zulu OpenJDK,请确保 下载版本 8。
功能可用性
- 工作项搜索在 TFS 2017 Update 2 及更高版本中可用。
- Wiki 搜索在 TFS 2018 Update 2 及更高版本中可用。
- 工作项和 Wiki 搜索是在搜索配置期间默认安装的内置扩展。
- 代码搜索在 TFS 2017 及更高版本中可用,是一项选择加入功能。 稍后可以从本地库安装代码搜索。 以管理员身份转到 本地库 (
http://{server}/_gallery) 。 非管理用户还可以请求Azure DevOps Server的扩展。 有关详细信息,请参阅本地库文档中 的“安装扩展 ”。
配置搜索
在安装Azure DevOps Server时,使用服务器配置向导中的专用页面配置搜索服务。 此外,还可以通过再次运行服务器配置向导或启动搜索配置向导来 取消配置搜索 。 若要配置搜索,请注意 配置注意事项。
配置注意事项
配置搜索时,请考虑以下信息:
配置搜索时,默认启用工作项和 Wiki 搜索。 如果需要,可以从Azure DevOps Server的“管理扩展”页中删除这些扩展
必须为要使用的每个Azure DevOps Server集合安装代码搜索扩展。 最初配置搜索时,可以设置一个复选框以自动安装现有和新Project集合的代码搜索扩展以自动执行此过程
- 如果未设置用于安装所有项目集合的代码搜索扩展的复选框,则 PCA 可以从本地库安装它。 确保从Azure DevOps Server门户页面转到本地库 (
http://{Server}/_gallery) 。 有关详细信息,请参阅本地库文档中 的“安装扩展 ”
- 如果未设置用于安装所有项目集合的代码搜索扩展的复选框,则 PCA 可以从本地库安装它。 确保从Azure DevOps Server门户页面转到本地库 (
使用第二个硬盘驱动器和远程服务器
为了获得最佳性能,搜索索引文件夹应位于单独的快速硬盘驱动器上,并由快速存储提供支持,例如固态硬盘 (SSD) 或存储区域网络 (SAN) 。 最多分配要编制索引的所有存储库大小的 150%。 这是最坏的情况。 使用的实际空间取决于代码文件的数量和类型,以及该集合中的工作项和 Wiki 页面数
- 除非指定,否则索引服务和 Elasticsearch 引擎在安装过程中使用网络服务帐户来创建和访问索引文件。 如果选择其他帐户,则必须具有 “以服务身份登录 ”权限
- 限制索引磁盘和文件夹的权限,以防止索引意外或恶意修改或删除。 为服务配置适当的安全设置
配置具有 多个应用程序层 (ATS) 的服务器时,请确保它安装在 单独的服务器上。 在远程服务器上安装搜索后,在任一 AT 服务器上使用配置向导将远程搜索实例与Azure DevOps Server实例链接。 将来取消配置搜索时,必须在最初执行配置的同一 AT 服务器上使用配置向导
升级服务器
如果在已配置搜索的服务器上执行 预生产升级 ,则必须再次完全重新配置搜索以避免损坏生产实例。 无法将搜索配置为预生产升级的一部分。 而是在预生产升级完成后对其进行配置。 可以在配置过程中取消选中 自动安装和配置所有现有和新集合的代码搜索 。 相反,在配置完成后,只需为一两个集合安装搜索扩展
如果要在配置搜索的服务器上执行 生产升级 ,并且想要保留它,请选中 “安装和配置搜索”旁边的框。 向导会检测现有搜索实例,并自动选择“使用现有搜索实例”,并预填充当前搜索服务 URL。 仅当想要在同一服务器上设置搜索的新实例时,才使用 “安装新的搜索实例 ”选项。 设置新实例会导致所有代码、工作项和 Wiki 再次编制索引,具体取决于集合大小,这可能需要一些时间。 在编制索引期间,用户可能会看到部分搜索结果
如果要将 服务器升级到新硬件,可以使用以下两个选项。 根据以前配置搜索的方式,从这些选项中进行选择:
- 如果搜索位于独立于Azure DevOps Server的服务器上,则必须在服务器配置向导中选择“安装和配置搜索”,然后选择“使用现有搜索实例”并提供现有搜索实例的 URL 以完成搜索配置
- 如果搜索与旧服务器上的Azure DevOps Server实例一起配置,则必须在服务器配置向导中选择“安装和配置搜索”。 然后,如果要继续共同托管搜索并Azure DevOps Server,请再次在新服务器上安装新的搜索实例。 重新创建所有集合的所有搜索索引,具体取决于每个集合的大小,可能需要一些时间
如果要从一个Azure DevOps Server实例分离集合以将其附加到另一个实例,请执行以下步骤:
- 从源Azure DevOps Server实例分离集合
- 如果尚未) ,请在目标Azure DevOps Server实例上配置搜索 (
- 将集合附加到目标Azure DevOps Server
- 从Azure DevOps Server的本地库中卸载搜索扩展,例如代码、工作项或 Wiki。
- 通过从目标Azure DevOps Server实例浏览到该集合,为本地库的集合安装搜索扩展
在单独的服务器上安装或更新搜索
若要在单独的或远程服务器上安装或更新搜索,通常当用户超过 250 时,请执行以下步骤:
在主服务器上安装Azure DevOps Server时,请在服务器配置向导的“搜索”页中设置“安装和配置搜索”复选框。
选择使用现有搜索服务的选项。
使用向导中提供的搜索服务包链接访问本地计算机上的一组搜索安装程序文件。 然后,将这些文件复制到远程服务器。

按照位于安装程序文件集中的Readme.txt 文件中的说明在远程服务器上安装或更新搜索服务。
安装完成后,将生成的搜索服务器 URL 复制到Azure DevOps Server实例上运行的配置向导的“搜索 URL”字段中。
两个安装完成后,请为这两个服务器配置适当的 安全设置 。
安全搜索
搜索服务使用已修改版本的 Elasticsearch, (术语“搜索”和“Elasticsearch”可互换用于本部分的其余部分) 。 无论搜索服务与Azure DevOps Server位于同一台计算机上,还是在单独的计算机上,管理员都必须提供凭据。 此操作是通过服务器或搜索配置向导配置搜索功能的一部分。 这些凭据是新的,与任何预先存在的帐户或服务器凭据无关。 它们用于设置并连接到搜索服务。 这些新凭据集在搜索服务中启用基本身份验证。

若要从 TFS 2018 Update 1.1 升级到 TFS 2018 Update 3 或搜索重新配置,只有用户信息自动填充,管理员必须提供密码凭据。 管理员可以选择提供不同的用户名和密码(如果愿意)。 如果搜索服务与 Azure DevOps Server 位于同一台计算机上,管理员可以在配置向导中提供一组新的凭据,以便根据需要设置搜索服务。 但是,如果搜索服务位于远程计算机上,管理员必须先向搜索服务安装脚本提供新凭据。
注意
- 用户名和密码值长度应介于 8 到 64 个字符之间。 虽然可以为密码分配任何值,但用户名只能包含字母数字和下划线字符。
- 搜索凭据仅对用户进行身份验证,并确保未经身份验证的用户无法访问 Elasticsearch 终结点。 但是,Elasticsearch 不支持 HTTPS,因此这些凭据通过网络作为 Base64 编码字符串发送。 如果有可能进行中间访问请求,请根据公司安全性和合规性要求配置适当的安全设置。
- 旨在通过 IPSec 限制对使用加密的特定用户或用户组进行搜索和索引的访问,如下所述。
请考虑使用 IPSec 在 Windows 服务器上保护 Elasticsearch 的以下技术:
仅使用身份验证配置安全性:
- 确保只有经过授权的用户才能访问 Elasticsearch 端口。 它只需要服务端规则 (仅运行 Elasticsearch) 的服务器上 (防火墙规则
- 先决条件:必须使用域帐户配置Azure DevOps Server
- 按照创建允许受 IPsec 保护的网络流量的防火墙规则中的步骤操作
使用身份验证、完整性保护和加密配置安全性:
- 确保将加密和完整性保护与身份验证一起应用。 它要求客户端和服务端规则 (运行 Elasticsearch 的服务器上的防火墙规则以及所有Azure DevOps Server应用层服务器)
- 先决条件:必须使用域帐户配置Azure DevOps Server
- 通过要求加密和组成员身份来遵循隔离服务器的步骤
升级搜索
TFS 2017 Update 1 包括更新的搜索组件。
- 如果在升级期间在 TFS 2017 RTM 中配置了搜索服务,则升级的 TFS 上配置了搜索服务,搜索服务组件会自动更新。
- 如果在远程服务器上配置了搜索,请按照 说明 进行更新。
TFS 2017 Update 2 包括工作项搜索。 它使用与代码搜索相同的搜索服务。
- 如果在升级期间在 TFS 2017 RTM/Update1 中配置了搜索服务,则升级的 TFS 上配置了搜索服务,搜索服务组件会自动更新。
- 如果在远程服务器上配置了搜索,请按照 说明 进行更新。
TFS 2018 Update 2 包括更新的搜索组件和 Wiki 搜索。
- 如果在升级期间在 TFS 2017 RTM、Update1、Update2 或 TFS 2018 RTM 中配置了搜索服务,则升级搜索服务组件会自动更新,前提是在升级的 TFS 上配置了搜索服务。
- 如果在远程服务器上配置了搜索,请按照 说明 进行更新。
在这两种情况下,所有现有内容 (代码文件和工作项) 会自动重新编制索引,以支持配置后更新的组件。 根据内容量,此升级可能需要一些时间才能完成。
TFS 2018 Update 1.1 和 TFS 2018 Update 3 包括 TFS 与 搜索服务 之间的通信的基本身份验证,使其更安全。 任何安装或升级到 TFS 2018 Update 1.1 或 TFS 2018 Update 3 时,都必须通过服务器或搜索配置向导提供凭据作为配置搜索功能的一部分。
在单独的服务器上配置搜索时,TFS 2018 Update 2 (或更高版本) 版本Azure DevOps Server 2019 Update 1 需要重新安装搜索。 按照 升级说明进行操作时,在步骤 4 中,而不是更新
Configure-TFSSearch.ps1 – Operation update,请运行以下命令以重新安装搜索:
Configure-TFSSearch.ps1 -Operation remove
Configure-TFSSearch.ps1 -Operation install -TFSSearchInstallPath <install location> -TFSSearchIndexPath $env:SEARCH_ES_INDEX_PATH
卸载搜索
对于预生产升级、生产升级、新硬件迁移、克隆或其他维护操作,服务器配置向导将取消配置搜索。 但是,在服务器维护操作完成后,可以轻松重新配置。
但是,在某些情况下,你可能不再想要使用搜索,或者想要执行新的和干净的安装。 此操作需要执行多个步骤,具体取决于搜索是在与 Azure DevOps Server 相同的服务器上配置的,还是在单独的服务器上配置的。
在配置为Azure DevOps Server的计算机上取消配置搜索
卸载其安装的每个集合的搜索扩展。 转到Azure DevOps Server实例中每个集合的“管理扩展”页:


删除搜索功能:
- 打开Azure DevOps Server管理控制台
- 在左窗格中,选择服务器的名称
- 在右窗格中,选择“ 删除功能”
- 在“删除功能”对话框中,选择搜索服务,然后选择“删除”
删除 Elasticsearch 服务:
- 以管理员身份打开命令提示符
- 更改目录:
- 对于 TFS 2017 RTM,
cd "C:\Program Files\Microsoft Team Foundation Server 15.0\Search\ES\elasticsearch-1.7.1-SNAPSHOT\bin" - 对于 TFS 2017 Update 1,
cd "C:\Program Files\Microsoft Team Foundation Server 15.0\Search\ES\elasticsearch-2.4.1\bin" - 对于 TFS 2018 Update 2 及更高版本以及Azure DevOps Server,
cd "C:\Program Files\Microsoft Team Foundation Server 15.0\Search\ES\elasticsearch-5.4.1\bin"
- 对于 TFS 2017 RTM,
- 删除服务:
- 对于 TFS 2017,
"service.bat remove" - 对于 TFS 2018 和 Azure DevOps Server,
"elasticsearch-service.bat remove"
- 对于 TFS 2017,
删除搜索数据:
- 删除环境变量描述的位置的内容
SEARCH_ES_INDEX_PATH
- 删除环境变量描述的位置的内容
删除环境变量:
- 删除环境变量
"SEARCH_ES_INDEX_PATH" - 删除环境变量 (此环境变量
"ES_HEAP_SIZE"已过时,TFS 2018 Update 2 及更高版本,Azure DevOps Server)
- 删除环境变量
在单独的服务器上配置搜索时取消配置搜索
卸载其安装的每个集合的搜索扩展,例如代码、工作项或 Wiki。 转到Azure DevOps Server实例中每个集合的“管理扩展”页。


删除搜索功能:
- 打开“删除功能”对话框中的“管理控制台”
- 在左窗格中,选择Azure DevOps Server的名称
- 在右窗格中,选择“ 删除功能”
- 在“删除功能”对话框中,选择搜索服务,然后选择“删除”
删除 Elasticsearch 服务和数据:
- 以管理员身份打开 PowerShell
- 打开 “配置Search.ps1 ”文件夹,以及远程安装搜索所需的其余文件
- 使用删除选项再次运行脚本:
- 对于 TFS 2017 RTM,
"Configure Search.ps1 -RemoveTFSSearch" - 对于 TFS 2017 Update1 及更高版本以及Azure DevOps Server,
"ConfigureTFSSearch.ps1 -remove"
- 对于 TFS 2017 RTM,
搜索限制
搜索Azure DevOps Server具有以下限制:
- 如果执行灾难恢复 (DR) 操作并将服务器移回SQL数据库的早期快照,请重新编制所有集合的索引。