Вы получаете это приглашение, потому что нет явного правила, относящегося к приложению. Политика брандмауэра по умолчанию позволяет исходящим соединениям не соответствовать ни одному правилу, поэтому в большинстве случаев это относится к приложению, принимающему входящие соединения, которые по умолчанию блокируются и, следовательно, требуют наличия определенного правила брандмауэра, прежде чем они будут пропущены через брандмауэр.
Брандмауэр Windows видит ваши сборки как отдельные программы, потому что это разные исполняемые файлы с разными путями.
Существует несколько возможных способов решения этой проблемы:
Пусть каждая сборка устанавливает правило
Вы можете создать правило брандмауэра, либо как часть кода приложения, либо как шаг после сборки, выполняемый вашим инструментом CI.
Если вы не хотите добавлять конкретный код в свой исполняемый файл (или процесс установки) для настройки правила, вы можете попросить инструмент CI выполнить скрипт PowerShell, аналогичный приведенному ниже.
Этот скрипт удаляет все существующие правила брандмауэра тестовой сборки и добавляет правило, разрешающее входящие соединения для текущей сборки:
Param
(
[Parameter(Mandatory=$true)]
[string] $BuildPath
)
function Add-TestBuildFirewallRule
{
Param
(
[Parameter(Mandatory=$true)]
[string] $BuildPath
)
$existingRule = Get-NetFirewallRule -Name YourApp-LatestTestBuild -ErrorAction SilentlyContinue
if($existingRule -ne $null)
{
Remove-NetFirewallRule -Name YourApp-LatestTestBuild
}
New-NetFirewallRule -Name "YourApp-TestBuild" -DisplayName "Latest Test Build" -Description "Allow the latest test build to accept incomming connections" -Enabled True -Direction Inbound -Program $BuildPath
}
Add-TestBuildFirewallRule -BuildPath $BuildPath
Для использования предоставленного скрипта вам необходимо:
- Установите PowerShell v4.0 на CI-сервере. Это должно быть в случае Windows 8x или Server 2012
- Сохраните сценарий в каталоге, к которому у вашего инструмента CI есть права на чтение и выполнение, в файл с расширением
.ps1
- Запустите сценарий от имени администратора - это необходимо, потому что изменение правил брандмауэра является привилегированной операцией.
- Попросите инструмент CI выполнить сценарий с помощью команды, аналогичной следующей:
powershell.exe -ExecutionPolicy Bypass Add-BuildFirewallRule.ps1
-BuildPath %FULL_BUILD_PATH
Вам необходимо заменить %FULL_BUILD_PATH%
в приведенной выше команде на полный путь к встроенному исполняемому файлу - вашему CI Инструмент должен быть в состоянии сделать это довольно легко.
Разблокировать целевой порт
Вы можете иметь брандмауэр Windows, разрешающий весь трафик (или весь трафик определенного протокола) на определенный порт (ы). Это позволит вашим сборкам (и любому другому приложению, использующему этот порт) обмениваться данными. Возможно, вы сможете указать, что обмен данными должен быть ограничен локальным компьютером с использованием брандмауэра Windows с расширенным интерфейсом безопасности для создания правила, но я все равно избегал бы этого, если это возможно.