2

На моем компьютере работает система непрерывной интеграции, которая помещает результаты тестовой сборки во временные файлы системы.
К сожалению, это означает, что брандмауэр Windows рассматривает каждое из них как отдельное приложение и выдает уведомление для каждой сборки, а это несколько в ходе тестового запуска.
Эти сборки взаимодействуют исключительно через localhost, поэтому нет абсолютно никакой причины пропускать их через брандмауэр. В настоящее время они используют порт 8081 но могут быть установлены на что угодно.

Есть ли способ заставить брандмауэр Windows просто оставить все программы под %TEMP% заблокированными?

брандмауэр Windows заблокировал некоторые функции этого приложения

2 ответа2

1

Вы получаете это приглашение, потому что нет явного правила, относящегося к приложению. Политика брандмауэра по умолчанию позволяет исходящим соединениям не соответствовать ни одному правилу, поэтому в большинстве случаев это относится к приложению, принимающему входящие соединения, которые по умолчанию блокируются и, следовательно, требуют наличия определенного правила брандмауэра, прежде чем они будут пропущены через брандмауэр.

Брандмауэр 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

Для использования предоставленного скрипта вам необходимо:

  1. Установите PowerShell v4.0 на CI-сервере. Это должно быть в случае Windows 8x или Server 2012
  2. Сохраните сценарий в каталоге, к которому у вашего инструмента CI есть права на чтение и выполнение, в файл с расширением .ps1
  3. Запустите сценарий от имени администратора - это необходимо, потому что изменение правил брандмауэра является привилегированной операцией.
  4. Попросите инструмент CI выполнить сценарий с помощью команды, аналогичной следующей:powershell.exe -ExecutionPolicy Bypass Add-BuildFirewallRule.ps1 -BuildPath %FULL_BUILD_PATH Вам необходимо заменить %FULL_BUILD_PATH% в приведенной выше команде на полный путь к встроенному исполняемому файлу - вашему CI Инструмент должен быть в состоянии сделать это довольно легко.

Разблокировать целевой порт

Вы можете иметь брандмауэр Windows, разрешающий весь трафик (или весь трафик определенного протокола) на определенный порт (ы). Это позволит вашим сборкам (и любому другому приложению, использующему этот порт) обмениваться данными. Возможно, вы сможете указать, что обмен данными должен быть ограничен локальным компьютером с использованием брандмауэра Windows с расширенным интерфейсом безопасности для создания правила, но я все равно избегал бы этого, если это возможно.

0

Благодаря исследованиям я понял, что привязан ко всем адресам на компьютере, включая внешние, что и вызвало брандмауэр. Я изменил тесты, чтобы явно привязаться к 127.0.0.1 и брандмауэр с тех пор не жаловался.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .