Сбой сценариев развертывания шаблона TFS2012 LabDefault.11, поскольку Team Foundation Server не может выполнить задачу развертывания

У меня проблемы с безопасностью при управлении лабораторией и стандартных средах.

У меня установлено обновление 2 TFS2012 в моем домене «DevDomain». У меня есть отдельная машина сборки/лаборатории также в «DevDomain», на которой установлены контроллер сборки, агенты сборки и контроллер тестирования для одной и той же коллекции «CollectionA».

Автоматические сборки работают просто идеально.

У меня есть целевые ПК для развертывания в «DevDomain» и в «TestDomain» (подробнее об этом позже).

Чтобы перейти на следующий уровень, я хочу теперь автоматически развертывать программное обеспечение, созданное агентом сборки TFS, на тестовых машинах; в частности, я хочу, чтобы сценарий развертывания удалил существующий продукт, скопировал обновленный установщик на целевой ПК, а затем установил его.

Моей первой попыткой было определить стандартную среду в моем «DevDomain» и получить часть развертывания лабораторной сборки, работающую в том же домене.

Это сработало. Вот что я сделал;

Автоматическая сборка (с использованием процесса DefaultTemplate.xaml) создает файл MSI, который я хочу использовать для развертывания, и сценарий PowerShell, который я хочу запустить для организации развертывания. (сценарий просто пытается запустить MSI через msiexec для удаления, скопировать новую версию локально, а затем запустить ее через msiexec для установки новой копии). Автоматическая сборка успешно создает оба этих артефакта и помещает их в определенный общий ресурс TFS.

Для этого у меня есть:

  • Created a new standard lab environment with a single machine (desktop client role)
    • The lab manager successfully deployed the agent to this PC
    • агент работает в интерактивном режиме и показывает его онлайн.
  • Created a new build definition using the LabDefaultTemplate.11.xaml workflow.
    • referenced the above lab in the configuration
    • ссылается на последний вывод автоматизированной сборки в конфигурации
    • указал скрипт PowerShell для вывода сборки (через макрос $(BuildLocation).

На этой вкладке развертывания сборки указан следующий скрипт, который нужно запустить на компьютере в лаборатории с ролью «Настольный клиент»:

cmd /c powershell.exe "$(BuildLocation)\DeployGuiToLabWorkstation.ps1" "$(BuildLocation)"

Это работает.

Обратите внимание, что я настраиваю агенты тестирования для работы в качестве интерактивных процессов, поскольку моей конечной целью после завершения развертывания является запуск закодированных тестов пользовательского интерфейса в этих лабораториях.

Проблемы начинаются при попытке выполнить развертывание на компьютере в другом домене. Теперь, чтобы сделать это более реалистичным, мне нужно определить стандартную лабораторную среду для моих компьютеров QA, которые находятся в другом домене; «Тестовый домен».

Домен «TestDomain» имеет доверительные отношения с доменом «DevDomain». Между "DevDomain" и "TestDomain" нет взаимного доверия.

Опять же, лабораторный центр менеджера по тестированию определил это OK и развернул агент, и агент сообщил о себе в режиме онлайн моему контроллеру тестирования.

Теперь, когда я изменяю лабораторную сборку, чтобы ссылаться на новую стандартную среду (на «TestDomain»), развертывание завершается с ошибкой;

Exception Message: Team Foundation Server could not complete the deployment task for
machine '10.7.70.71', script 'cmd' and arguments '/c copy \\*buildmachine*
\TFS_Drop\...\DeployGuiToWorkstation.ps1 C:\GuiDeploy'. (type LabDeploymentProcessException)

Чтобы диагностировать это, я изменил сценарий лабораторного развертывания следующим образом:

"cmd /c powershell whoami"

И судя по логам процесс запускается как "nt Authority\system", а не под учетной записью лабораторной среды, указанной для тестового агента.

Это объясняет ошибку скрипта; PowerShell на целевом ПК не может получить доступ к общему ресурсу TFS, но поскольку эта учетная запись является учетной записью локального компьютера, я не могу предоставить разрешения учетной записи компьютера ПК в «TestDomain» для общего ресурса и папки NTFS на машине в «DevDomain».

Итак, как я могу предоставить разрешения на общий ресурс / файловую систему «devDomain» учетной записи службы «System» с компьютера в «TestDomain»?

или

Как заставить тестовый агент (работающий от имени администратора локального компьютера) выполнять сценарий развертывания в контексте собственной учетной записи, а не в контексте системы этого компьютера?

Я в тупике!


EDIT: кажется, что пользовательский интерфейс агента тестирования работает в указанной вами учетной записи, но когда вы настраиваете его таким образом, он оставляет службу «Служба агента Visual Studio Lab», работающую как локальная система, вы можете вручную изменить это в службах, на более подходящую учетную запись домена, и эта учетная запись затем отражается в результатах PS "whoami".

Сейчас я изучаю использование учетной записи TestDomain для службы, которая отражает учетную запись DevDomain, чтобы я мог правильно установить разрешения на общий доступ.


Это сценарий, аналогичный скриптам развертывания управления TFS Lab, но поскольку он был обойден с помощью тестов и тестовых настроек, и мне особенно нужно разрешение части развертывания, я подумал, что стоит задать вопрос.


person Pete Stensønes    schedule 14.05.2013    source источник
comment
У меня такая же проблема, и у многих других такая же проблема. Я уже установил учетную запись службы Lab, как предложила Елена ниже, но это не работает. У меня это заработало только тогда, когда я добавляю пользователя domain\serverToDeployTo$ с разрешением на чтение в папку. Смотрите мою тему для получения дополнительной информации. stackoverflow.com/q/16487581/801005   -  person LockTar    schedule 17.05.2013
comment
Боковое примечание: вам не нужен cmd /c. Powershell — это исполняемый файл, а не команда оболочки, такая как DIR или MKDIR.   -  person JamesQMurphy    schedule 18.09.2014


Ответы (5)


Приведенное выше решение Пита Стенсонеса работает в моих условиях.

Но мой сценарий - настроить стандартную среду для рабочей группы, но tfs находится в другом домене. Просто перечислите мои шаги для справки: Создайте локальную учетную запись на следующем сервере: local lab service account — tfslab

  1. Сервер тестового контроллера tfs: создайте локальную учетную запись tfslab. Также настройте tfslab в качестве учетной записи службы лаборатории в консоли настройки тестового контроллера.
  2. Сервер агента тестирования tfs: создайте локальную учетную запись tfslab и добавьте tfslab в локальную группу администраторов. Также обновите службу агента тестирования Visual Studio и службу агента лаборатории Visual Studio, чтобы они работали как tfslab.
  3. сервер папок tfs: создайте локальную учетную запись tfslab. И добавьте разрешение на чтение общего доступа к папке tfs.
person Amitabha    schedule 22.07.2013

Настроили ли вы свой тестовый контроллер для использования учетной записи лабораторной службы?

Если нет, попробуйте это:

введите здесь описание изображения

Используйте учетную запись с соответствующими разрешениями.

Эта учетная запись будет использоваться для доступа к месту размещения сборки, см.

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\QTController.exe.config

и найдите «UseLabServiceAccountToAccessBuildDirectory».

person Elena    schedule 15.05.2013

ОК, в конце концов я решил эту проблему с небольшой помощью наших парней из службы поддержки сети.

Я требую, чтобы агенты в моем «TestDomain» были настроены как интерактивные (поскольку мой следующий шаг — запуск закодированных тестов пользовательского интерфейса), когда вы делаете это, указав учетную запись тестовой лаборатории для связи, но учетную запись компьютера или домена (в «TestDomain ") в качестве учетной записи агента (либо являющегося членом группы администраторов локального компьютера), то лабораторный процесс MTM в "DevDomain" может успешно развернуть и настроить тестовый компьютер в "TestDomain".

Однако это оставляет «Службу агента Visual Studio Lab» на целевом компьютере в «testDomain», работающем как локальная система, которая является процессом, который фактически выполняет ваш сценарий развертывания.

Я не смог найти перестановку в инструменте «Конфигурация тестового агента» на тестовых машинах, который позволил бы мне изменить это, пока агент все еще работает как интерактивный, но вы можете просто изменить информацию для входа в систему для службы с помощью апплета панели управления службами.

Я сделал следующее:

  • Создайте "тестовый агент" локальную учетную запись на целевом компьютере "TestDomain" и добавьте ее в группу локальных администраторов целевого компьютера "TestDomain".

  • Затем я отзеркалировал это, создав локальную учетную запись с теми же именем и паролем на машине, на которой размещена наша точка доступа TFS поделиться.

  • Затем я предоставил этой локальной учетной записи доступ на чтение к общему ресурсу и файловой системе.

Теперь, когда сервер TFS «devDomain» инициирует сборку, выполнение сценария запускается локальной «службой агента Visual Studio Lab» в контексте новой локальной учетной записи «тестовый агент», и поскольку существует совпадающая локальная учетная запись на машине, на которой размещается общий ресурс, он получает предоставленные разрешения, общий ресурс доступен для чтения, и, вуаля, он может запускать мой сценарий.

person Pete Stensønes    schedule 17.05.2013
comment
Хммм, в моем случае я не хотел менять учетную запись, в которой работает служба агента лаборатории Visual Studio, и, как я уже сказал, использование учетной записи службы лаборатории решило проблему, с которой я столкнулся при доступе к удаленному общему ресурсу TFS из LabTemplate (команда /c копировать...). Что я забыл упомянуть, так это то, что вы должны обновить существующие экспериментальные среды при добавлении учетной записи Lab Service, см. msdn.microsoft.com/en-us/library/ee712736.aspx. Но это правильно, это не поможет вам, если вы попытаетесь получить доступ к месту перетаскивания TFS при запуске ваших сценариев развертывания, поскольку они запускаются службой агента Visual Studio Lab. - person Elena; 17.05.2013
comment
Я так взволнован, это работает - после многих часов поиска решения. Буквально все, что касается TFS, до сих пор не работало из коробки. Смена служебной учетной записи - это взлом, но ... поскольку он работает ... (кроме того, сообщения о проблемах с разрешениями имели так мало значения ...) - person Andreas Reiff; 21.06.2013
comment
У нас почти все TFS только что работало — по умолчанию. Даже лабораторная сборка работает просто отлично, пока нам не пришлось использовать машины за пределами наших доверенных доменов. Как оказалось, это всегда проблема с Windows, поскольку безопасность становится сложной и ее всегда трудно диагностировать. - person Pete Stensønes; 21.06.2013

У меня есть среда workgroup без домена, и оказалось, что я создал локальную учетную запись (.\tfslab) и настроил Контроллер тестирования TFS с использованием этой учетной записи для управления лабораторией (.\ tfslab), но я забыл настроить каждую из служб тестовых агентов для запуска под учетной записью локального компьютера.

Чтобы устранить эту проблему, я настоятельно рекомендую изменить «Сценарий и аргументы развертывания» на следующую команду:

cmd /c whoami

См. дополнительные шаги по устранению неполадок здесь: http://social.msdn.microsoft.com/Forums/vstudio/en-US/f46dc491-87c2-4234-8566-99b25302020e/deployment-tasks-run-under-nt.-authoritysystem?forum=tfsbuild

Для тех, у кого в будущем возникнут проблемы с конфигурациями рабочей группы (не доменные), не забудьте обновить следующие службы, чтобы:

Служба агента Visual Studio Lab «Учетная запись для входа» изменена с «учетная запись локальной системы» на «< strong>Эта учетная запись' и укажите учетную запись локального компьютера '.\tfslab'

Служба сетевого агента Visual Studio Lab «Учетная запись для входа» изменена с «учетная запись локальной системы» на « Эта учетная запись' и укажите учетную запись локального компьютера '.\tfslab'.

person Ian Ceicys    schedule 30.09.2014

Используя Visual Studio 2012 с обновлением 4 и Team Foundation Server в конфигурации с односторонним доверием или изолированной/рабочей группой, мы обнаружили, что требуется дополнительный шаг. При выполнении автоматических модульных тестов с помощью рабочего процесса сборки-развертывания-тестирования мы обнаружили, что настройка учетной записи экспериментальной службы — это только часть решения. Чтобы избежать ошибок Отказано в доступе в сборке, нам также пришлось установить пользователя для службы агента лаборатории Visual Studio.

Вот как выглядят службы в апплете «Службы» после настройки учетной записи тестовой службы (в данном примере «.\LabAdmin»):

Visual Studio Lab Agent Service         | Configures, monitors... | Running | Automatic | Local System  
Visual Studio Lab Network Agent Service | Sets network propert... | Running | Automatic | Local System  
Visual Studio Test Agent                | Provides distributed... | Running | Automatic | .\LabAdmin  

Чтобы исправить ошибку «Отказано в доступе», нам также пришлось запустить службу агента лаборатории Visual Studio под учетной записью службы лаборатории:

Visual Studio Lab Agent Service         | Configures, monitors... | Running | Automatic | .\LabAdmin  
Visual Studio Lab Network Agent Service | Sets network propert... | Running | Automatic | Local System  
Visual Studio Test Agent                | Provides distributed... | Running | Automatic | .\LabAdmin  

После внесения этого изменения и перезапуска служб ошибка «Отказано в доступе» исчезла. Это было повторено на двух разных целевых компьютерах, по крайней мере, с нашей конфигурацией это кажется необходимым шагом.

person Kevin    schedule 28.02.2017