2011-12-28 11 views
5

Tenemos un script NAnt para actualizar nuestros ensamblajes "preconstruidos" en TFS como uno de nuestros proyectos de construcción de TeamCity. La construcción se desencadena por otras construcciones. Hace una comprobación de TF, mueve algunos archivos y luego realiza una comprobación de TF.Error de TF: no hay cambios restantes para registrar

El objetivo relevante (tf resuelve al camino de tf.exe):

<target name="checkin.assemblies"> 
    <exec program="${tf}"> 
    <arg value="checkin" /> 
    <arg value="${dir.assemblies}" /> 
    <arg value="/comment:${message}." /> 
    <arg value="/noprompt" /> 
    <arg value="/recursive" /> 
    </exec> 
</target> 

Regularmente se obtiene:

Checking in edit: ... 
The following changes were not checked in because the items were not modified. 
Undoing edit: ... 
There are no remaining changes to check in. 
External Program Failed: E:\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe (return code was 1) 
Process exited with code 1 
BUILD FAILED - 0 non-fatal error(s), 1 warning(s)

Lo que creo que está sucediendo es la acumulación se desencadena una vez demasiados veces (hay varias construcciones que pueden desencadenarlo). Si los archivos que queremos actualizar no cambian, TFS omite el check-in y "helpfully" devuelve un código de error. Lamentablemente, también devolverá 1 error de "bloqueado para extraer", que es grave.

Como referencia: TF Command-Line Exit Codes

La solución es sencilla pero molesto - disparar una de las compilaciones que topar número de versión de un ensamblaje y luego desencadenar esta construcción.

¿Cómo podemos hacer que esto funcione de manera confiable?

Actualización: Terminamos revisando las configuraciones de activación de compilación para que TeamCity cree "cadenas" de compilación, asegurando que la verificación solo se active una vez.

Respuesta

8

Hay un tipo de parámetro de línea de comandos documentado para tf checkin llamado /force. Está en la lista in the usage and on MSDN, pero no se describe en ningún lado.

Esto establece el indicador CheckinParameters.AllowUnchangedContent y le permite registrar un archivo que no tiene cambios. Esto debería solucionar tu problema.

Cuestiones relacionadas