安装和配置搜索
Azure DevOps Server 2022 - Azure DevOps Server 2019
本文介绍如何为在自己的硬件上运行的 Azure DevOps Server 安装、 配置和 卸载 安全搜索引擎。 有关详细信息,请参阅以下文章:
先决条件
- 若要安装搜索扩展,您必须是组织的 PCA) (项目集合管理员。 非管理用户还可以请求将扩展添加到其 PCA。
- 有关详细信息,请参阅 安装和配置 Azure DevOps Server 和 要求和兼容性。
硬件建议
搜索适用于运行 Azure DevOps Server 的任何物理服务器或虚拟机。 可以在同一台服务器上设置它,也可以设置不同的搜索服务器。 如果使用同一服务器,请考虑 CPU 使用率。
提示
建议在单独的服务器上为生产环境配置搜索。
若要在多用户方案中获得可接受的性能,请考虑以下建议:
- 服务器上具有搜索的用户少于 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) 存储支持的快速硬盘驱动器
- 具有多个应用程序层的 Azure DevOps Server (AT):
- 在单独的服务器上安装搜索
- 在搜索安装之前,Azure DevOps Server CPU 使用率大于 50% :
- 在单独的服务器上安装搜索
磁盘空间要求:
搜索使用的磁盘空间量主要取决于索引文件的类型和大小。 对于代码搜索,由于存储库很多时候可能很大,并且版本控制中具有不同的代码文件,因此磁盘空间需求可能很大。 分配最多要编制索引的所有存储库大小的 150%。 从 TFS 2018 Update 3 及更高版本开始,用户可以从其存储库中排除文件夹,以便索引以优化搜索使用的磁盘空间。
软件依赖项
搜索具有以下依赖项,这些依赖项作为配置的一部分自动安装:
- Elasticsearch 的 Elasticsearch 。
- 搜索使用修改后的 Elasticsearch 版本。 它仅适用于此修改的版本。
- 较新版本的 Elasticsearch 随 TFS 2018 Update 2 及更高版本一起提供,Azure DevOps Server。 从旧版搜索结果升级后,所有内容都会在安装后重新编制索引。 根据内容量(代码文件、工作项和 Wiki 页面),重新编制索引可能需要一些时间才能完成。
- Elasticsearch NEST 客户端。
- Microsoft Build of OpenJDK Version 11.
- Microsoft Build of OpenJDK 不会自动安装更新。
- 由 Topten Software 提供的 Markdowndeep 。
- Roslyn 编译器平台。
- ANTLR 语言识别分析器。
Java 安装说明
如果搜索配置向导未检测到 Java 运行时环境 (JRE) 的工作安装,则会提供下载和安装最新受支持版本的选项。 下载需要 Internet 连接。 如果目标服务器没有 Internet 连接,则必须在尝试安装 Search 之前手动下载并安装 JRE。
Azure DevOps Server之前的搜索版本使用 Oracle Server Java 运行时环境。 在 Azure DevOps Server 中,默认 JRE 为 Azul Zulu OpenJDK。
在安装过程中,向导将 JAVA_HOME 环境变量设置为指向 JRE 安装文件夹。 如果配置向导未正确配置现有 JRE 安装,或者 JAVA_HOME 设置指向的版本低于搜索要求的版本,则配置向导可能无法检测到该安装。
注意
不建议在共享资源的计算机上安装 Elasticsearch,尤其是在具有多个应用层的大型企业环境中。 建议在单独的专用计算机中设置 Elasticsearch。 这样,不会出于其他目的在计算机之间共享 JAVA 环境。
如果 JRE 的版本 早 于搜索所需的最低版本,并且 JAVA_HOME 变量已设置为该版本,建议在 单独的服务器上安装 Search。
如果服务器 JRE 版本等于或晚 于搜索所需的最小值,并且配置向导无法识别,请确保 未设置JAVA_HOME 变量。 然后,通过设置 Java 虚拟机的路径重新运行配置向导(
& "C:\Program Files\Azure DevOps Server XXX\Search\ES\vX.XX\bin\elasticsearch-service.bat" manager
)并选择版本。如果由于其他依赖项而无法安装搜索所需的 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) ,请注意以下信息:
- 搜索不使用或不支持 Server JRE 8 的任何商业功能。 因此,在搜索配置期间,服务器 JRE 的商业功能既未激活也不解锁。
- 如果选择继续使用 Oracle JRE,请联系 Oracle 获取 Java 标准版 订阅,以便继续接收 JRE 更新。
从 Oracle Server JRE 迁移到 Microsoft Build of OpenJDK
Azure DevOps Server 中的搜索同时支持 OpenJDK 的 Microsoft 内部版本和 Oracle JRE,让你可以根据需求在它们之间进行选择。
若要更改为 Microsoft Build of OpenJDK,请确保 未设置JAVA_HOME 变量。 然后,通过设置 Java 虚拟机的路径重新运行配置向导(& "C:\Program Files\Azure DevOps Server XXX\Search\ES\vX.XX\bin\elasticsearch-service.bat" manager
)并选择版本。
功能可用性
- 工作项搜索在 Team Foundation Server (TFS) 2018 及更高版本中可用。
- Wiki 搜索在 TFS 2018 Update 2 及更高版本中可用。
- 工作项和 Wiki 搜索是在搜索配置期间默认安装的内置扩展。
- 代码搜索在 TFS 2018 及更高版本中可用,并且是一项选择加入功能。 稍后可以从本地库安装代码搜索。 以管理员身份 (
http://{server}/_gallery
) 转到本地库。 非管理用户还可以请求Azure DevOps Server的扩展。 有关详细信息,请参阅 安装扩展。
配置搜索
安装Azure DevOps Server时,使用服务器配置向导中的专用页配置搜索服务。 之后,还可以通过再次运行服务器配置向导或启动搜索配置向导来 取消 配置搜索。
配置注意事项
配置搜索时,请考虑以下信息:
- 配置“搜索”时,工作项和 Wiki 搜索默认启用。 如果需要,可以从 Azure DevOps Server 的 “管理扩展”页中删除这些扩展 。
- 必须为要使用的每个Azure DevOps Server集合安装代码搜索扩展。 最初配置搜索时,可以将检查框设置为自动安装现有项目集合和新项目集合的代码搜索扩展以自动执行此过程。
- 如果未设置用于为所有项目集合安装代码搜索扩展的复选框,则 PCA 可以从本地库安装它。 确保从Azure DevOps Server门户页转到本地库 (
http://{Server}/_gallery
) 。 有关详细信息,请参阅 安装扩展。 - 搜索通常不到一小时即可为集合编制索引。 但是,根据代码文件、工作项或 Wiki 页面的大小和数量,可能需要长达 12 小时的时间。 如果在此时间段后未获得任何结果,检查索引状态。
使用第二个硬盘驱动器和远程服务器
- 为了获得最佳性能,搜索索引文件夹应位于单独的快速硬盘驱动器上,并由快速存储提供支持,例如固态硬盘 (SSD) 或存储区域网络 (SAN) 。 分配最多 150% 的要索引的所有存储库的大小,这是最坏的情况。 实际消耗的空间取决于代码文件的数量和类型,以及该集合中的工作项和 Wiki 页面的数量。
- 除非指定,否则索引服务和 Elasticsearch 引擎在安装期间使用网络服务帐户来创建和访问索引文件。 如果选择其他帐户,则它必须具有 作为服务 权限的登录。
- 限制索引磁盘和文件夹的权限,以保护索引免受意外或恶意修改或删除。 为服务配置适当的 安全设置 。
- 配置具有多个 AT 的服务器搜索时,请在单独的服务器上安装。 在远程服务器上安装搜索后,在任一 AT 服务器上使用配置向导将远程搜索实例与 Azure DevOps Server 实例链接。 取消配置搜索时,必须在最初执行配置的同一 AT 服务器上使用配置向导。
升级服务器
- 如果在配置了 Search 的服务器上执行 预生产升级 ,则必须再次完全重新配置 Search 以避免损坏生产实例。 没有将搜索配置为预生产升级的一部分的选项。 而是在预生产升级完成后对其进行配置。 可以在配置期间取消选中“ 自动安装和配置所有现有集合和新集合的代码搜索 ”。 相反,在配置完成后,仅为一两个集合安装搜索扩展
- 如果在配置了搜索的服务器上执行 生产升级 ,并且想要保留它,请选中 “安装和配置搜索”旁边的框。 向导会检测现有搜索实例,并自动选择“使用现有搜索实例”,并预填充当前搜索服务 URL。 仅当想要在同一服务器上设置搜索的新实例时,才使用 “安装新的 搜索实例”选项。 设置新实例会导致所有代码、工作项和 Wiki 再次编制索引,这可能需要一些时间(具体取决于集合的大小)。 在编制索引期间,用户可能会看到部分搜索结果
- 如果要 将服务器升级到新硬件,则有以下两个选项。 根据之前配置搜索的方式,从这些选项中进行选择:
- 如果 Search 与 Azure DevOps Server 位于单独的服务器上,则必须在服务器配置向导中选择“安装和配置搜索”,然后选择“使用现有搜索实例”并提供现有搜索实例的 URL 以完成搜索配置
- 如果“搜索”与旧服务器上的 Azure DevOps Server 实例一起配置,则必须在服务器配置向导中选择“安装和配置搜索”。 然后,如果要继续共同托管搜索并Azure DevOps Server,请选择“在新服务器上再次安装新的搜索实例”。 将重新创建所有集合的所有搜索索引,这可能需要一些时间,具体取决于每个集合的大小
- 如果要 从一个 Azure DevOps Server 实例分离集合 以将其附加到另一个实例,请执行以下步骤:
- 从源Azure DevOps Server实例分离集合
- 在目标Azure DevOps Server实例 (配置搜索(如果尚未完成))
- 将集合附加到目标Azure DevOps Server
- 从本地库中卸载集合的搜索扩展(如代码、工作项或 Wiki)Azure DevOps Server
- 通过从目标Azure DevOps Server实例浏览到本地库中的集合,安装搜索扩展
在单独的服务器上安装或更新搜索
若要在单独的或远程服务器上安装或更新 Search(通常当用户超过 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 2018 Update 2:包括更新的搜索组件和 Wiki 搜索。
- 如果搜索服务是在 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 管理员istration 控制台。
- 选择服务器的名称。
- 选择 “删除功能”。
- 选择搜索服务,然后选择“删除”。
删除 Elasticsearch 服务:
- 以管理员身份打开 命令提示符 。
- 更改目录。
cd "C:\Program Files\Microsoft Team Foundation Server 15.0\Search\ES\elasticsearch-5.4.1\bin"
- 删除服务。
"elasticsearch-service.bat remove"
删除搜索数据:
- 删除环境变量
SEARCH_ES_INDEX_PATH
描述的位置的内容。
- 删除环境变量
删除环境变量。
"SEARCH_ES_INDEX_PATH"
在单独的服务器上取消配置搜索
执行以下步骤,为每个集合取消配置搜索,例如代码、工作项或 Wiki。
转到 Azure DevOps Server 实例中每个集合的“管理扩展 ”页。
删除搜索功能:
- 打开“删除功能”对话框,管理员管理控制台。
- 在左窗格中,选择 Azure DevOps Server 的名称。
- 在右窗格中,选择“ 删除功能”。
- 在“删除功能”对话框中,选择搜索服务,然后选择“删除”。
删除 Elasticsearch 服务和数据。
- 以管理员身份打开 PowerShell。
- 打开 “配置 Search.ps1 ”文件夹,以及远程安装搜索所需的其余文件。
- 使用 remove 选项再次运行脚本:
"ConfigureTFSSearch.ps1 -remove".
搜索限制
搜索Azure DevOps Server具有以下限制:
- 如果执行灾难恢复(DR)操作并将服务器移回到 SQL 数据库的早期快照,请重新编制所有集合的索引。
- 搜索不可扩展,但你可以在开发者社区上提交新功能请求。