Я установил TeamCity на Windows Server 2012 за корпоративным брандмауэром, который требует аутентификации пользователя через прокси-сервер для доступа в Интернет.
Я хочу подключить TeamCity к Bitbucket (git), на котором размещены наши проекты, чтобы получить код, собрать и развернуть в корпоративной сети.
Git сам по себе через SourceTree (клиент Git для Windows) и через командную строку отлично работает. Я добавил настройку прокси в .gitconfig, и он может без проблем подключаться по https через прокси.
Все идет нормально. Но когда я пытаюсь заставить TeamCity разговаривать с bitbucket, я получаю сообщение об ошибке:
Ошибка подключения! Не удалось получить список удаленных ссылок: java.netConnectException: соединение отклонено: подключиться к bitbucket.org
Я просмотрел документы, и оказалось, что если вы хотите подключиться через прокси-сервер, вам нужно передать учетные данные JVM, на которой работает TeamCity. Поскольку я использую Windows Server 2012, а TeamCity работает как служба, это, предположительно, достигается путем установки такой переменной среды:
TEAMCITY_SERVER_OPTS
-Dproxyset=true
-Dhttp.proxyHost=11.111.1.11
-Dhttp.proxyPort=8080
-Dhttp.proxyUser=username
-Dhttp.proxyPassword=password
-Dhttp.nonProxyHosts=localhost|127.0.0.1
-Dhttps.proxyHost=11.111.1.11
-Dhttps.proxyPort=8080
-Dhttps.proxyUser=username
-Dhttps.proxyPassword=password
-Dhttps.nonProxyHosts=localhost|127.0.0.1
Я создал переменную env системного уровня и перезапустил сервер, после чего я получил следующую ошибку:
https://bitbucket.org/teamname/example.git: 407 Требуется проверка подлинности прокси (Forefront TMG требует авторизации для выполнения запроса. Доступ к фильтру веб-прокси запрещен.)
Итак, это оставляет мне две возможности
TeamCity документы не упоминайте аргументы proxyUser и proxyPassword, я сам вставил их после просмотра доступных аргументов прокси JVM.
Я попросил одного из наших сетевых специалистов взглянуть на брандмауэр (не сегодня), но пока что, если кто-нибудь имеет опыт в этом и знает, есть ли что-нибудь, что я пропустил. Любая помощь будет высоко ценится.
Обновление от 16 февраля 2016 г.
На сайте поддержки JetBrains я обнаружил следующее:
Привет, мы не поддерживаем аутентификацию прокси из командной строки. А задавать только параметры не получится.
Кроме того, приведенные выше параметры относятся только к Java-коду, выполняемому с JVM сервера TC. Однако мы часто используем собственные клиенты для доступа к VCS: hg, perforce и TFS. Git и svn используют библиотеки java.
Таким образом, похоже, что подход с использованием переменных окружения - это тупик, и для установления соединения придется использовать клиент Git.
Итак, ответ на вопрос, как заставить TeamCity работать за прокси-сервером NTLM, - это обмануть.
В итоге я установил приложение под названием Прокси-сервер аутентификации CNTLM, он находится между TeamCity и моим NTLM-прокси и обрабатывает все запросы.
Когда это работает, все отлично, я могу подключиться к битбакету, запускаются сборки и т. Д. Но я должен добавить слово предостережения, на Windows Server 2012 R2 он часто дает сбой. Сначала мы этого особо не замечали, но когда мы добавили приложения в TeamCity, у нас было несколько сбоев в день, которые требовали перезапуска службы CNTLM.
Теперь у меня была новая настройка прокси без аутентификации, чтобы решить проблему. Ваш пробег может отличаться.
Чтобы подключить TeamCity к CNTLM, вам необходимо добавить переменную окружения TEAMCITY_SERVER_OPTS со следующим значением
-Dproxyset=true -Dhttp.proxyHost=localhost -Dhttp.proxyPort=3128 -Dhttp.nonProxyHosts="localhost|127.0.0.1" -Dhttps.proxyHost=localhost -Dhttps.proxyPort=3128 -Dhttps.nonProxyHosts="localhost|127.0.0.1"
с портом 3128, который прослушивает CNTLM после установки. После изменения / добавления вам потребуется перезапустить службу и агент TeamCity.