[TFS] Qui a dit que la build compilait toujours la dernière version?
L’affirmation qui dit que la build compile toujours la dernière version est ni vrai ni fausse, juste incomplète: la build ne compile pas la dernière version du code au moment où la build récupère le code, mais au moment où elle démarre. Cela fait toute la différence et c’est tant mieux en fait!
Démonstration:
Je prends un projet dans l’état suivant: avant la build le dernier changeset archivé est le #13. Je lance la build. Remarquez quelle version est prise:

On en apprend pas beaucoup à ce moment là.
A ce moment même, j’archive un bout de code: c’est le changeset #14. La build a continué de son coté et son status changé entretemps:

La build ne prend pas en compte ce changeset et s’arrète au #13!
Explication:
Voilà ce qu’il s’est passé: avant que j’archive le changeset #14, la build a déterminé que le dernier changeset correspondant à la “Latest” était le #13. Donc quelque soient les nouveaux changesets créés, la version du source qui sera utilisée pour la build sera la dernière version jusqu’au changeset# 13. Donc mon changeset #14 n’est pas pris en compte. Cela est très utile pour plusieurs cas:
- Imaginons une build avec 2 solutions: A et B. si la build commence à compiler la “latest” pour A puis la “latest” pour B si peut y avoir potentiellement un soucis si par exemple la “latest” de B prend en compte un changeset qui comprend des modifications de A ainsi que des modifications de B qui ont besoin des modifications de A. Le résultat est un plantage de la build. Pourtant lorsqu’on récupère la dernière version du code: tout marche!
- Avec ce numéro de changeset la build peut être relancée plusieurs fois avec le même code source (changeset ou label). Pour cela il suffit d’aller dans les propriétés avancées lors du lancement de la build:

Build me baby one more time!
Un tout petit détail: et bien en fait cela ne marche pas! Il faut modifier le template de build car celui par défaut ignore complètement cette propriété. Pour cela, j’ai ajouté la tâche suivante dans le workflow:

Elle est ajoutée dans la séquence “Run On Agent” et la tâche SetBuildProperties a les propriétées suivantes:

Avec tout cela la version compilée par vos builds n’aura plus de secrets pour vous!
End Of Line
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :