Как получить каталог, в который извлечен мой артефакт на этапе выпуска?

Я использую VSTS для развертывания веб-приложений asp.net. Мы меняем способ развертывания преобразованных файлов web.config, так как мы обгорели во время недавнего производственного поста, когда файлы были неправильно преобразованы во время «Развертывания веб-приложения IIS. Наш новый план — использовать nuget CodeAssassin.ConfigTransform». task, и все наши преобразования конфигурации преобразуются как часть build. Они могут быть проверены/проверены нашими разработчиками локально и включены в артефакт сборки.

Итак, на мой вопрос: в основном в моем артефакте сборки, в корне моего веб-проекта, мы найдем преобразованные файлы web.config, например. web.dev.config.transformed, web.qa.config.transformed, web.dev.config.transformed и т. д.

В качестве нового шага в моем процессе выпуска для каждой среды я хочу скопировать правильный файл в своем артефакте до того, как задача «Развертывание веб-приложения IIS» отправит изменение на веб-сервер. На самом базовом уровне после всех замен переменных команда копирования будет выглядеть примерно так.

copy-item ?????web.dev.config.transformed -Destination ?????web.config

надо заменить????? с путем, по которому был извлечен мой артефакт, например.

C:\vstsagent\A1\_work\r1\a\temp_web_package_7996773376015784\Content\C_C\VSTS_agent\_work\6\s\My.Web.Project\obj\Release\Package\PackageTmp\

Я просмотрел каждую переменную сборки/выпуска (спасибо Джан Мария Создать дамп всех переменных среды во время сборки TFS/VSTS), и я не вижу ничего похожего на этот путь, к которому я могу получить доступ из переменной.

Я, очевидно, упускаю здесь что-то простое... так как эта информация доступна для других задач?

Любая помощь приветствуется!


comment
В итоге я отказался от этой попытки из-за сложности копания в zip-архиве пакета веб-развертывания. Теперь я использую параметры веб-развертывания, которые я указываю в переменных проекта VSTS.   -  person raterus    schedule 28.12.2017


Ответы (2)


Во-первых, файл temp_web_package_XXX.zip создается задачей развертывания веб-приложения IIS, если включены Преобразования файлов и подстановка переменных (Извлеките пакет > Выполните преобразование > Архивировать файлы во временный пакет (temp_web_package_xxx.zip)), поэтому вам не нужно делать файлы временного пакета.

Во-вторых, вам просто нужно сделать с вашими файлами пакета (например, извлечь файл пакета> Скопировать файлы в папку), а путь похож на $(System.DefaultWorkingDirectory)/[build definition name]/[Artifact name (Specified in Publish Build Artifacts task)]/*.zip.

Вы можете удалить структуру исходного пути из пакета, указав /P:PackageTempRootDir="" аргументы MSBuild в задаче Visual Studio Build или MSBuild. Для проекта dotnet core с помощью задачи .NET Core (команда: опубликовать; параметр Проверить опубликованные проекты Zip).

После этого структура папок похожа на [WebApp]\Content\D_C\PackageTmp.

person starian chen-MSFT    schedule 21.12.2017

Искомая переменная — $(System.DefaultWorkingDirectory).

Это даст вам первую часть пути. После этого вы можете добавить свои собственные папки и файлы следующим образом:

$(System.DefaultWorkingDirectory)\My.Web.Project\obj\Release\Package\PackageTmp\

Вы также можете использовать задачу Копировать файл (v2) в определении сборки, а затем проверьте Flatten Files. Это удалит ненужные вам каталоги из пути в вашем артефакте. Это упростит работу с артефактом в вашем релизе.

person Wouter de Kort♦    schedule 20.12.2017
comment
Но откуда взяться этому значению (в моем примере выше)? temp_web_package_7996773376015784 - person raterus; 20.12.2017
comment
@Wouter de Kort Работает ли $(System.DefaultWorkingDirectory), если я использую его в машинописном файле для пользовательской задачи? т.е. let buildsPath = $(System.DefaultWorkingDirectory) - person xtreampb; 19.07.2018
comment
@xtreampb при создании задачи NodeJS (с помощью JavaScript или TypeScript) вы можете получить доступ к свойствам как к переменным среды с помощью process.env[INPUT_SAMPLESTRING]. См. github.com/Microsoft/vsts-task. -lib/blob/master/node/docs/ для получения дополнительной информации. - person Wouter de Kort♦; 20.07.2018