2015-08-04 3 views
7

У меня довольно странная проблема с TeamCity. У меня есть установка TeamCity с локальными и удаленными агентами сборки. Сервер TeamCity скрыт за IIS с помощью маршрутизации запросов приложений (ARR), чтобы включить SSL и т. Д. У меня такое чувство, что это может быть частью проблемы, но я не уверен. Еще одна причина подозревать, что IIS является частью проблемы, я попытался разместить TeamCity в Azure Web App и получил точно такое же поведение.Проблемы публикации артефактов на удаленном сервере TeamCity на IIS

Проблема в том, что после сборки, когда агенты сборки пытаются опубликовать артефакты на сервере, я получаю обратно 404 с сервера TeamCity. TeamCity считает, что это восстанавливаемая ошибка (см. Журнал), и несколько раз пытается повторить попытку. В конце концов публикация не удалась.

Если я настраиваю локальные агенты для доступа к TeamCity через http://localhost, все работает плавно. Но при доступе через общедоступный адрес (который подается через IIS), я получаю 404s. Содержимое 404 выглядит как стандартная страница IIS 404.

Я попытался установить ведомость ведения журнала агента на DEBUG, но он по-прежнему не выводит фактический URL-адрес, который он пытается вызвать.

У кого-нибудь есть ключи к устранению неполадок? Получение агента TeamCity для вывода URL-адреса, для которого он получает 404, будет хорошим началом.

[Publishing artifacts] Publishing 1 file [F:/tc/ba3/temp/buildTmp/out/_PublishedWebSites/**/* => dist.zip] using [WebPublisher] 
[15:34:15][Publishing artifacts] Publishing 1 file [F:/tc/ba3/temp/buildTmp/out/_PublishedWebSites/**/* => dist.zip] using [ArtifactsCachePublisher] 
[15:35:10] 
[Publishing artifacts] Recoverable problem publishing artifacts (will retry): <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">; 
<html xmlns="http://www.w3.org/1999/xhtml">; 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> 
<title>404 - File or directory not found.</title> 
<style type="text/css"> 
<!-- 
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;} 
fieldset{padding:0 15px 10px 15px;} 
h1{font-size:2.4em;margin:0;color:#FFF;} 
h2{font-size:1.7em;margin:0;color:#CC0000;} 
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} 
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF; 
background-color:#555555;} 
#content{margin:0 0 0 2%;position:relative;} 
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;} 
--> 
</style> 
</head> 
<body> 
<div id="header"><h1>Server Error</h1></div> 
<div id="content"> 
<div class="content-container"><fieldset> 
    <h2>404 - File or directory not found.</h2> 
    <h3>The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable.</h3> 
</fieldset></div> 
</div> 
</body> 
</html> 

ответ

10

EDIT: Нашел это документировано на страницах Teamcity, а также:

https://confluence.jetbrains.com/display/TCD9/Known+Issues#KnownIssues-FailuretopublishartifactstoserverbehindIISreverseproxy

Failed Request Tracing (как упоминалось Terri Rougeou Донахью) был инструмент, чтобы помочь мне. У меня было две ошибки.

1) Во-первых, StaticFileHandler не был отключен. Поэтому при попытке POST на URL /httpAuth/artefactUpload.html StaticFileHandler попытался обработать запрос до того, как ARR сможет его обработать.

2) Когда я выключил StaticFileHandler, модуль RequestFiltering запустил и вернул код ошибки 404.13, который является «Content Length Too Large». После небольшого количества поисковых запросов, я нашел это, http://www.iis.net/configreference/system.webserver/security/requestfiltering/requestlimits, описывая параметр maxAllowedContentLength и говорит: «Значение по умолчанию - 30000000, что составляет примерно 28,6 МБ».

Решение было:

1) Выключите StaticFileHandler для веб-сайта (Handler отображений) 2) Редактировать свойства «Фильтрация запросов» настройки на веб-сайте, установите «Максимально допустимая длина контента» для что-то разумное. Я добавил 0 (делает его примерно 286 МБ, поскольку артефакты могут стать довольно большими).

maxContentLength IIS settings window

+3

Мы только что переехали через сервер за прокси-сервером вчера, и я бил головой о стену, пытаясь понять это. Спасибо за помощь!! – MattGWagner

+2

Поверьте мне, с моей стороны было много поворота (не хорошего), прежде чем, наконец, выяснив решение (с отличной помощью от SO) –

+1

И, конечно, я нашел этот ответ примерно через 5 минут после публикации билет поддержки с JetBrains ... проблема решена в любом случае. –

2

Вы можете включить Failed Request Tracing на сервере IIS, что TeamCity разворачивает к. Это обеспечит местоположение, в котором происходит 404.

+0

Спасибо за отзыв. Тем не менее, я не вижу «Трассировка неудачных запросов» в разделе «Конфигурация» в IIS, как указано в статье. –

+0

Необходимо также установить функцию веб-сервера «Трассировка»: http://www.iis.net/configreference/system.webserver/tracing/tracefailedrequests –

+0

Сбой запроса - это драгоценный камень. Были две ошибки. Я создаю свой собственный ответ для разработки. –