Статьи

TeamCity и Git за корпоративным прокси-сервером NTLM

Недавно я имел удовольствие настроить новую среду сборки на работе, чтобы заменить нашу настройку TFS Team Build и ее неполноту информации о сборке. В ходе этого процесса я обнаружил множество вещей, которые не так интересны для разработчиков, которые есть в нашей крупной корпоративной ИТ-инфраструктуре, чтобы держать массы в страхе — одна из них — прокси-сервер NTLM. И так началось стучать головой — надеюсь, я смогу спасти вам клетки мозга и вовремя доставить вас домой.

образСегодня мы рассмотрим две вещи;

  • Как TeamCity работает на Windows , чтобы увидеть внешний мир через прокси — сервер NTLM.
  • Запуск MSyGit в Windows для просмотра внешнего мира через NTLM-прокси.

Моя ситуация может отличаться от вашей, но она сводится к следующему: мой сервер сборки находится за прокси-сервером, прошедшим проверку подлинности NTLM. Прокси не является анонимным. Короче говоря, для доступа к Интернету необходимы имя пользователя и пароль домена или токен NTLM.

Поэтому мне нужно, чтобы TeamCity и Git использовали мой прокси-сервер.

Конфигурация TeamCity

Хотя вы можете подумать, что TeamCity будет относительно легко просто «указать на ваш прокси-сервер» на симпатичной странице в разделе «Администрирование» или аналогичной, но вы будете жить в стране сказок.

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

После долгих попыток я понял, что TeamCity работает на Java, а точнее на веб-сервере Tomcat. Java позволяет передавать параметры конфигурации при запуске, а у Tomcat Catalina есть отличная панель конфигурации, в которую можно их ввести — если вы знаете только, где искать. Из этого окна вы можете ввести параметры конфигурации Java .

То, что мы ищем, это:

-Dproxyset=true
-Dhttp.proxyHost=myproxyserver.mydomain.com
-Dhttp.proxyPort=8080
-Dhttp.nonProxyHosts="mydomain.com"
-Dhttps.proxyHost=myproxyserver.mydomain.com
-Dhttps.proxyPort=8080
-Dhttps.nonProxyHosts="mydomain.com";

Волшебное заклинание, чтобы добраться до этой панели:

Откройте командную строку с повышенными правами.

Переместитесь в папку bin TeamCity (обычно C: \ TeamCity \ bin).

cd C:\TeamCity\bin\

Введите команду:

tomcat7w //ES//TeamCity

Это откроет это окно:

образ

Перейти к вкладке J ava .

Введите параметры, указанные выше:

образ

Нажмите Применить и перезапустите TeamCity (служба TeamCity).

Конфигурация Git

Следующей частью нашей проблемы было заставить Git общаться через прокси-сервер.

Git не поддерживал прокси-серверы NTLM до недавнего времени (версия 1.7.10 ), и с тех пор вы можете сказать git использовать прокси-сервер из командной строки следующим образом:

git config --global http.proxy=myproxyserver.mydomain.com:8080
git config --global https.proxy=myproxyserver.mydomain.com:8080

Это не похоже на работу для моей установки, хотя.

После большого количества исследований между моей командой и нашими ребятами из инфраструктуры выяснилось, что тип используемого NTLM-прокси просто не понравился Git.

Чтобы обойти это, мы установили следующий прокси-сервер « человек посередине» CNTLM .

CNTLM работает так: вы предоставляете ему некоторые учетные данные, указываете все, что вам нужно для доступа к Интернету, в качестве прокси-сервера, и он предлагает прокси-соединение без проверки подлинности, которое затем проходит аутентификацию и передает ваш прокси-сервер NTLM.

Для настройки CNTLM откройте файл : C: \ Program Files (x86 \ cntlm \ cntlm.ini

Username testuser
Domain contorso
Password password
Proxy  mycorporateproxy.mydomain.com:8080

Перезапустите службу, а затем укажите Git на вашем новом прокси-сервере CNTLM.

git config --global http.proxy=localhost:3128
git config --global https.proxy=myproxyserver.mydomain.com:8080