2012-05-22 3 views
3

Для фона: у меня неплохая настройка TeamCity; содержащий сборку ci и сборку релизов, которая использует WiX для сборки моих установщиков и исправления всех номеров версий. Когда я делаю новую сборку релизов, я хотел бы автоматически создавать патчи MSP против предыдущего набора установщиков. Я думаю, что либо помечен RTM в TeamCity, либо как список номеров версий.TeamCity build MSP files

Подход, к которому я склоняюсь, создает отдельную конфигурацию и получает артефакты msi всех предыдущих сборников, которые соответствуют критериям (тег или номер версии). Тег выглядит намного опрятным, но я не вижу ничего в документации о том, как вы его используете?

У меня есть сценарий для создания патча MSP, но он зависит от файла PCP, который необходимо отредактировать в ORCA для описания патча.

  1. Что касается редактирования PCP, есть ли что-нибудь еще, что я могу использовать, кроме ORCA для редактирования? Я смотрел на переход к методу WiX здесь: http://wix.sourceforge.net/manual-wix3/patch_building.htm, который выглядит многообещающим.
  2. Кто-нибудь знает, можете ли вы получить доступ к артефактам в TeamCity по тегу в том же или другом сборке?
  3. Есть ли у кого-нибудь другое понимание автоматического создания/связывания файлов исправлений MSP в TeamCity?

ответ

1
  1. Вы можете создать файл .PCP с помощью элемента PatchCreation в наборе инструментов WiX. Это, вероятно, даст вам необходимую гибкость, необходимую для создания настраиваемых файлов .PCP.

  2. Извините, не используйте TeamCity.

  3. Извините, не используйте TeamCity. :)

1

Чтобы добавить ответ Роба:

# 2. TeamCity может получать товары по тегам:

http://servername:8080/httpAuth/app/rest/buildTypes/id:bt13/builds?status=SUCCESS&tag=RTM 

# 3. Я использовал элемент PatchCreation (Rob, предложенный выше) в наборе инструментов WiX, и он прав, достаточно гибкий для этого. Вот набросок того, что я построил, все это, кажется, работает достаточно хорошо в тестировании,

Проект TeamCity имеет ряд параметров сборки, они являются:

  1. Новый номер версии - по умолчанию как changeme, поэтому, если он не был изменен, он разрушает сборку.

  2. Старый номер версии - как указано выше

  3. вбизи репо - это buildtypeid, посмотрите на строку запроса для вашего проекта, и это будет иметь buildTypeId = btXX. XX - это номер, который должен быть указан здесь.

  4. Старый билд репо - как указано выше

Проект TeamCity имеет следующие шаги:

  1. MSBuild бегун бежать build.msbuild (смотри ниже)

  2. Run Свеча на patch.wxs для создания файла patch.wixobj

  3. Run Light на patch.wixobj создать patch.pcp

  4. Распакуйте новую версию (команда: MSIexec/Q/new.msi) -

  5. Распаковка старая версия (команда: Msiexec/д/а old.msi) - выбрать другой рабочий реж

  6. Создать патч (команда: msimsp -s patch.pcp р hotfix-% system.msiOldVersion% -% system.msiNewVersion% .msp -l patch.log

MSBuild to Создание patch.pcp

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <!--<Import Project="references\MSBuild.Community.Tasks.Targets"/>--> 
    <UsingTask AssemblyFile="references\MSBuild.Community.Tasks.dll" TaskName="WebDownload"/> 
    <UsingTask AssemblyFile="references\MSBuild.Community.Tasks.dll" TaskName="TemplateFile"/> 
    <Target Name="Build"> 
    <!-- preconditions for build --> 
    <Error Condition="'$(msiOldVersion)' == 'changeme'" Text="Use run custom build, setting the client version of the msi"/> 
    <Error Condition="'$(msiOldVersion)' == ''" Text="Use run custom build, setting the client version of the msi"/> 
    <Error Condition="'$(msiNewVersion)' == 'changeme'" Text="Use run custom build, setting the new version of the msi"/> 
    <Error Condition="'$(msiNewVersion)' == ''" Text="Use run custom build, setting the new version of the msi"/> 
    <Message Text="Old Version: $(msiOldVersion)"/> 
    <Message Text="New version: $(msiNewVersion)"/> 

    <!-- download files from teamcity... --> 
    <WebDownload FileUri="http://server:8080/httpAuth/repository/download/bt$(msiOldRepo)/trunk/Path/bin/Release/en-us/installer-v-v.$(msiOldVersion).msi" UserName="download" Password="abcdefgh" FileName="downloads/oldversion.msi" /> 
    <WebDownload FileUri="http://server:8080/httpAuth/repository/download/bt$(msiNewRepo)/trunk/Path/bin/Release/en-us/installer-v.$(msiNewVersion).msi" UserName="download" Password="abcdefgh" FileName="downloads/newversion.msi" /> 

    <!-- fill in blanks in patch.wxs --> 
    <ItemGroup> 
     <Tokens Include="oldVersion"> 
     <ReplacementValue>$(msiOldVersion)</ReplacementValue> 
     </Tokens> 
     <Tokens Include="newVersion"> 
     <ReplacementValue>$(msiNewVersion)</ReplacementValue> 
     </Tokens> 
    </ItemGroup> 
    <TemplateFile Template="template.wxs" OutputFileName="patch.wxs" Tokens="@(Tokens)"/>  
    </Target> 

Template.wxs используемые MSBuild скрипт

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <PatchCreation 
     Id="deadbeef-dead-beef-dead-beefdeadbeef" 
     CleanWorkingFolder="no" 
     OutputPath="patch.pcp" 
     WholeFilesOnly="no"> 
    <PatchInformation 
     Description="Small Update Patch" 
     Comments="Small Update Patch"       
     Manufacturer="Your Manufacturer"/> 
    <PatchMetadata 
     AllowRemoval="yes" 
     Description="Hotfix" 
     ManufacturerName="Your Manufacturer" 
     MoreInfoURL="http://yourwebsite.com" 
     TargetProductName="Your Product Name"   
     Classification="Hotfix" 
     DisplayName="Hotfix - TBC"/> 

    <Family DiskId="5000" 
     MediaSrcProp="Sample" 
     Name="Sample" 
     SequenceStart="5000"> 
     <UpgradeImage SourceFile="downloads\newunpack\newVersion.msi" Id="SampleUpgrade"> 
     <TargetImage SourceFile="downloads\oldunpack\oldVersion.msi" Order="2" 
      Id="SampleTarget" IgnoreMissingFiles="no" /> 
     </UpgradeImage> 
    </Family> 

    <PatchSequence PatchFamily="SamplePatchFamily"   
     Supersede="yes" />  
    </PatchCreation> 
</Wix>