TeamCity construyendo archivos MSP

Para el fondo: tengo una buena configuración de TeamCity; que contiene una compilación ci y una compilación de lanzamiento que usa WiX para compilar mis instaladores y parchear todos los números de versión. Cuando realizo una compilación de una nueva versión, me gustaría crear automáticamente parches de MSP contra un conjunto anterior de instaladores. Estoy pensando en etiquetar RTM en TeamCity o como una lista de números de versión.

El enfoque al que me inclino es crear una configuración separada y obtener los artefactos msi de todas las compilaciones anteriores que se ajusten a los criterios (etiqueta o número de versión). La etiqueta parecería mucho más ordenada, pero no puedo ver nada en la documentación sobre cómo la usa.

Tengo una secuencia de comandos para crear el parche MSP, pero se basa en un archivo PCP que debe editarse en ORCA para describir el parche.

  1. En cuanto a la edición del PCP, ¿hay algo más que pueda usar además del ORCA para editar? He estado buscando pasar al método WiX aquí: http://wix.sourceforge.net/manual-wix3/patch_building.htm que parece prometedor.
  2. ¿Alguien sabe si puede acceder a artefactos en TeamCity por etiqueta en la misma compilación o en otra?
  3. ¿Alguien tiene alguna otra idea sobre la creación/encadenamiento automático de archivos de parches MSP en TeamCity?

preguntado el 22 de mayo de 12 a las 16:05

2 Respuestas

  1. Puede crear el archivo .PCP utilizando el elemento PatchCreation en el conjunto de herramientas de WiX. Eso probablemente le dará la flexibilidad necesaria para crear los archivos .PCP personalizados.

  2. Lo sentimos, no utilice TeamCity.

  3. Lo sentimos, no utilice TeamCity. :)

Respondido el 20 de junio de 12 a las 17:06

Para agregar a la respuesta de Rob:

#2. TeamCity puede recuperar artículos por etiqueta:

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

#3. Usé el elemento PatchCreation (Rob sugirió arriba) en el conjunto de herramientas de WiX y tiene razón, es lo suficientemente flexible para esto. Aquí hay un resumen de lo que he construido, todo parece funcionar bastante bien en las pruebas,

El proyecto teamcity tiene una serie de parámetros de construcción, estos son:

  1. Nuevo número de versión: predeterminado como changeme, por lo que si no se ha cambiado, se rompe la compilación.

  2. Número de versión anterior - como arriba

  3. Nuevo repositorio de compilación: este es el buildtypeid, observe la cadena de consulta de su proyecto y tendrá buildTypeId=btXX. El XX es el número que debe proporcionarse aquí.

  4. Repositorio de compilación anterior: como arriba

El proyecto teamcity consta de los siguientes pasos:

  1. Ejecutor de MSBuild para ejecutar build.msbuild (ver más abajo)

  2. Ejecute Candle en patch.wxs para crear un archivo patch.wixobj

  3. Ejecute Light en patch.wixobj para crear un patch.pcp

  4. Descomprima la nueva versión (comando: msiexec /q /a new.msi) -

  5. Descomprima la versión anterior (comando: msiexec /q /a old.msi) - elija un directorio de trabajo diferente

  6. Crear parche (comando: msimsp -s patch.pcp p hotfix-%system.msiOldVersion%-%system.msiNewVersion%.msp -l patch.log

MSBuild para crear 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 utilizado por el script de 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>

Respondido el 25 de junio de 12 a las 15:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.