Обновите Azure CSPKG с помощью преобразованного файла web.config после публикации.

Моя сборка:

  1. Сборка с помощью msbuild (/t: build)
  2. Публикация с помощью msbuild (/t: публикация)
  3. Пакет с нужетом
  4. Развернуть с помощью осьминога

создает артефакт (пакет nuget), который содержит следующие файлы:

  • Azure.ccproj.cspkg
  • ServiceConfiguration.Production.csfg
  • Web.config (который будет преобразован при развертывании через Octopus)

cspkg — допустимый развертываемый пакет. Проблема в том, что он содержит файл web.config, который является предварительным преобразованием, поскольку преобразование происходит во время развертывания. См. документацию Octopus по преобразованиям и подстановка переменных для справки.

Как перезаписать файл web.config внутри cspkg преобразованным файлом web.config, который находится в пакете развертывания?

В моем распоряжении есть powershell и полный .net framework.

В качестве альтернативы, если имеет смысл распаковать cspkg, перезаписать файл и затем заново упаковать, я считаю это приемлемым. Я тоже не уверен, как это сделать.

Я знаю, что существует Save-AzureServiceProjectPackage, но я не могу получить его запустить, а документации не хватает.


person David Peden    schedule 09.10.2014    source источник


Ответы (3)


У меня есть проект Octopus с двумя этапами: первый для Dev, размещенный в IIS, второй для Prod, размещенный в Azure. TeamCity выпустила 2 пакета nuget: один от OctoPack для разработчиков, другой от NuGet Pack для Prod с cspkg.

У меня есть эта цель в моем Azure.ccproj:

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="Transform" BeforeTargets="BeforeBuild" Condition="'$(TEAMCITY_VERSION)' != ''">
  <PropertyGroup>
      <SourceTransformFile>..\Api\Web.config</SourceTransformFile>
      <TransformFile>..\Api\Web.Prod.config</TransformFile>
      <DestinationTransformFile>..\Api\Web.config</DestinationTransformFile>
  </PropertyGroup>
  <TransformXml
      Source="$(SourceTransformFile)"
      Transform="$(TransformFile)"
      Destination="$(DestinationTransformFile)" />
</Target>

Условие позволяет запускать только на сервере сборки, а не локально.

person abatishchev    schedule 09.10.2014
comment
Спасибо за ваш ответ, но он не соответствует моим потребностям. Я знаю, как выполнять преобразования с помощью задачи TransformXml. Это преобразование времени сборки. Я зависим от преобразований Octopus во время развертывания, поэтому это решение не решает мою проблему. - person David Peden; 10.10.2014
comment
@David: насколько мне известно, Octopus не выполняет преобразование внутри cspkg в версии 2, хотя в версии 3 это изменится. Так что думаю единственный выход - переделать вручную, потом запаковать и отправить к ОД. - person abatishchev; 10.10.2014
comment
Согласен с вашим первым предложением. Я понял, как это сделать. Разместил ссылку на решение в моем ответе. - person David Peden; 10.10.2014

Я решил эту проблему, отправив решение в Octopus Deploy, которое позволяет мне запускать преобразования .config в Octopus. После выполнения преобразований я создаю пакет .cspkg с пользовательским скриптом powershell.

Я написал подробный пост о развертывании Octopus. http://henrihietala.github.io/

person Henri Hietala    schedule 21.10.2014

Я понял, как сделать то, что мне нужно, на основе информации, содержащейся в сообщение Брэда Уэббера на форуме службы поддержки Octopus.

Я разместил общедоступный репозиторий git, содержащий простой образец решения и документацию здесь.

person David Peden    schedule 09.10.2014