2010-11-30 15 views
13

¿Existe alguna manera simple de incluir TeamCity como texto o html change-log como uno de sus artefactos de salida?Crear artefacto de registro de cambios en TeamCity

Quizás deba ir por la ruta de tener msbuild o algún otro proceso para crear el registro de cambios pero como TeamCity genera uno para cada compilación, me pregunto si ya hay una manera simple de acceder a él como un artefacto y incluirlo en las directivas de rutas de artefactos para que pueda ser parte de un paquete de lanzamiento.

+0

¿Puede aclarar de dónde se genera este registro? Normalmente, adjuntar archivos como un artefacto no debería ser un problema. –

Respuesta

12

Sí, el cambio de registro es accesible como un archivo, ruta de este archivo se encuentra en el parámetro TeamCity construcción:

%system.teamcity.build.changedFiles.file% 

por lo que podría hacer esto:

  • Agregue un paso de compilación de línea de comandos a su compilación.
  • Utilice el tipo Script personalizado.
  • Introduzca este script:
  • "% system.teamcity.build.changedFiles.file%" changelog.txt

copia

  • Finalmente modifique las reglas de artefactos para su generación para incluir el changelog.txt en sus artefactos (Configuración general -> Rutas de artefactos -> Agregar "changelog.txt").
+0

+1 Este es un buen comienzo para mí. Pero el archivo changelog.txt carece de los comentarios asociados con cada archivo enumerado. ¿Sabes si hay una forma de incluir los comentarios también? – slolife

+1

No lo creo. Tuvimos el mismo requisito y terminamos creando una aplicación de consola que accedió a la API de descanso de TC para obtener los comentarios de confirmación. La ejecución de esta aplicación de consola se agregó como el último paso de compilación. –

+0

¿Hay alguna posibilidad de que puedas compartir ese código? ¿O explicar qué datos/parámetros obtuvo de TC para llamar a la aplicación de la consola? – slolife

8

Puede generar un registro de cambios a través de la API REST de TeamCity. Se puede encontrar una secuencia de comandos de PowerShell here:

<# 
.SYNOPSIS 
    Generates a project change log file. 
.LINK 
    Script posted over: 
    http://open.bekk.no/generating-a-project-change-log-with-teamcity-and-powershell 
#> 

# Where the changelog file will be created 
$outputFile = "%system.teamcity.build.tempDir%\releasenotesfile_%teamcity.build.id%.txt" 
# the url of teamcity server 
$teamcityUrl = "%teamcity.serverUrl%" 
# username/password to access Teamcity REST API 
$authToken=[Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("%system.teamcity.auth.userId%:%system.teamcity.auth.password%")) 
# Build id for the release notes 
$buildId = %teamcity.build.id% 

# Get the commit messages for the specified change id 
# Ignore messages containing #ignore 
# Ignore empty lines 
Function GetCommitMessages($changeid) 
{ 
    $request = [System.Net.WebRequest]::Create("$teamcityUrl/httpAuth/app/rest/changes/id:$changeid")  
    $request.Headers.Add("AUTHORIZATION", "$authToken"); 
    $xml = [xml](new-object System.IO.StreamReader $request.GetResponse().GetResponseStream()).ReadToEnd()  
    Microsoft.PowerShell.Utility\Select-Xml $xml -XPath "/change" | 
     where { ($_.Node["comment"].InnerText.Length -ne 0) -and (-Not $_.Node["comment"].InnerText.Contains('#ignore'))} | 
     foreach {"+ $($_.Node["user"].name) : $($_.Node["comment"].InnerText.Trim().Replace("`n"," "))`n"} 
} 

# Grab all the changes 
$request = [System.Net.WebRequest]::Create("$teamcityUrl/httpAuth/app/rest/changes?build=id:$($buildId)") 
$request.Headers.Add("AUTHORIZATION", "$authToken"); 
$xml = [xml](new-object System.IO.StreamReader $request.GetResponse().GetResponseStream()).ReadToEnd() 

# Then get all commit messages for each of them 
$changelog = Microsoft.PowerShell.Utility\Select-Xml $xml -XPath "/changes/change" | Foreach {GetCommitMessages($_.Node.id)} 
$changelog > $outputFile 
Write-Host "Changelog saved to ${outputFile}:" 
$changelog 
+1

Esta es una secuencia de comandos fantástica que simplemente hace exactamente lo que se supone que debe hacer sin necesidad de otra configuración. –

+0

Buena secuencia de comandos. Exactamente lo que estaba buscando –

+5

Cualquier persona que use la secuencia de comandos anterior en TeamCity 10.x querrá actualizar los encabezados de AUTHORIZATION para que sea "Basic $ authToken". – Hastarin

Cuestiones relacionadas