2012-03-27 12 views
6

Usamos compilaciones automáticas de integración continua TFS 2010 que se inician en cada check-in. Recientemente cambié la plantilla de proceso para compilar Debug and Release en paralelo en diferentes agentes de compilación en lugar de secuencialmente en el mismo agente.Después de cambiar a la construcción de diferentes sabores en paralelo, vemos fallas de construcción de forma intermitente debido a la falla CreateLabel

Desde entonces, estamos viendo intermitentemente una falla de compilación debido al siguiente error. Sucede con tanta frecuencia que es inaceptable (cada quinta y décima generación, más o menos).

"TF203059: La etiqueta ya existe Volver a intentar el comando con un nombre de etiqueta diferente."

no he sido capaz de averiguar un patrón específico que hace que esto suceda. ¿Alguien ha encontrado esto antes? ¿Hay algún cambio que deba hacerse en la actividad Crear etiqueta en el proceso de compilación?

+0

Esto depende en gran medida de cómo haya personalizado su plantilla de proceso de compilación. ¿Puedes describir un poco más de cerca cómo has configurado esto? – pantelif

+0

Hola pantelif, gracias por tu respuesta. Usé la plantilla de proceso de compilación compartida aquí como un ejemplo: http://blogs.msdn.com/b/jimlamb/archive/2010/09/14/parallelized-builds-with-tfs2010.aspx – LiliaP

+0

Más detalles: agregué un flujo de control ParallelForEach para la secuencia del proceso de compilación y coloca todo el bloque RunOnAgent dentro de él. La actividad CreateLabel fue parte del bloque RunOnAgent, por lo que ahora se ejecuta para cada estilo de compilación. La etiqueta se establece en el número de compilación que tiene el formato $ (Fecha: aaaa.MM.dd) $ (Rev: .rr). Como resultado, tanto la depuración como la versión usarán la misma etiqueta. Esto no causa problemas la mayoría de las veces, pero obtenemos fallas de compilación intermitentes – LiliaP

Respuesta

1

Hay un par de problemas que pueden provenir de la paralelización. Las etiquetas son una, y la modificación de los elementos de trabajo es la segunda. Puede haber más, pero eso es con lo que me he encontrado. Si mueve ambos a la parte roscada única, debería solucionar sus problemas. Sin embargo, eso a menudo viene con su propio anfitrión de problemas. IIRC, el etiquetado requiere que asigne el área de trabajo y obtenga la última información antes de poder etiquetar, por lo que si tiene muchos archivos, esto puede mitigar los beneficios de paralelismo en el rendimiento. Para los elementos de trabajo, el problema puede ocurrir porque un proceso modifica el elemento de trabajo después de que otra rama lo lea, y TFS lanza un ajuste que ha cambiado para que no pueda actualizarse.

+0

Rob - ¡Muchas gracias por su respuesta! He estado fuera del país y ahora estoy volviendo a este proyecto.Nuestra solución no es tan grande, por lo que obtener las últimas no tomará tanto tiempo. – LiliaP

+0

Rob: una pregunta sobre su solución a este problema: ¿cómo se movió el etiquetado en la parte de un solo hilo? ¿Logró esto editando la plantilla en la interfaz de usuario de edición de Visual Studio Build Process o tuvo que implementar una solución personalizada? – LiliaP

+0

Ha pasado un tiempo, pero creo que lo volví a mover a la parte de un solo hilo editando el flujo de trabajo –

0

En el caso de las compilaciones paralelas para Configuraciones "Depurar" y "Liberar". Trata de poner la misma etiqueta dos veces, por lo que puede crear problemas. particularmente necesitamos proporcionar esa etiqueta solo una vez. Por lo tanto, en este caso para evitar este problema, podemos poner una condición para que la configuración coloque la etiqueta y la etiqueta de omisión para la segunda configuración.

uso esto si condición:

si (configuración = "Release") Entonces (createLabel) demás [Tienes que dejar esto en blanco para depuración como ya hemos proporcionado esa etiqueta una vez para " Release "condición]

De esta manera he resuelto mi problema relacionado con el problema de la etiqueta duplicada.

"TF203059: La etiqueta ya existe Volver a intentar el comando con un nombre de etiqueta diferente."

espero que también trabajará para usted perfectamente bien para compilaciones paralelas.

Cuestiones relacionadas