git - ramas - Evite que TeamCity se base en la fusión de avance rápido para dominar si existe una creación para ese SHA1
git merge (2)
Puede consultar construcciones para un SHA1 particular ... pero debe conocer su ID de compilación anterior para eso .
Entonces, ¿qué haría?
- escriba en una carpeta dedicada (accesible por todos los agentes) la sha1 construida al final de cada trabajo
- solo activa un nuevo trabajo si ese archivo sha1 no está presente.
Usando TeamCity en combinación con git.
Actualmente, TeamCity está configurado con " master
" como la rama predeterminada.
Normalmente, el desarrollo tiene lugar en otra rama (por ejemplo, " dev
"): TeamCity está configurado para vigilar los cambios en " dev
" y compilar automáticamente.
Si DEADBEEF-SOME-SHA
ha sido creado y etiquetado por TeamCity como compilación 1.2.3.4 en " dev
" y avanzamos la fusión de git SHA1 a " master
", TeamCity todavía realiza una compilación, por lo que terminamos con DEADBEEF-SOME-SHA
etiquetado como 1.2.3.4 y 1.2.3.5.
Según lo entiendo, hacer que " dev
" sea la rama predeterminada evitaría esto.
¿Hay alguna otra forma de evitar que TeamCity realice una compilación si una compilación ya tuvo éxito para esa misma SHA1?
Tenga en cuenta que si presionamos directamente para master
(y que SHA1 no existe en otras ramas / no se ha creado), me gustaría ver una compilación.
Me gustaría lograr esto completamente en TeamCity si es posible, sin guiones / escritura adicionales de archivos, etc.
Tal vez me perdí algo:
Si las confirmaciones se etiquetan en su repositorio, antes de comenzar una compilación nueva, puede verificar si el acuse de recibo no está etiquetado:
# if you use exclusively lightweigth tags :
git show-refs --tags | grep $(git rev-parse HEAD)
# also check that the tag looks like a build tag, e.g : refs/tags/1.2.3.4
| grep "refs/tags/[1-9.]*$"
# if you use annotated tags :
git show-refs --tags --dereference | grep $(git rev-parse HEAD)
# the grepped line may look like : refs/tags/1.2.3.4^{}
| grep -E "refs/tags/[1-9.]*(/^/{/})?$"