Nous utilisons TeamCity avec subversion et MSBuild et nous avons un problème avec la construction continue qui est déclenchée par les commits Subversion.La construction incrémentale est-elle possible en combinaison avec l'intégration continue?
La construction continue est configurée pour effectuer des générations incrémentielles (la génération nocturne est pleine et propre).
Le problème se produit si un développeur modifie et valide le fichier pour la deuxième fois après le démarrage de la génération (validation déclenchée) mais avant que l'objet qui utilise le fichier soit créé. Le fichier objet reçoit maintenant un horodatage après l'horodatage de la deuxième validation. Cela entraînera toutes les générations incrémentielles ultérieures à ignorer les modifications apportées au fichier.
Pour plus de clarté supplémentaire est ici la ligne de temps:
T1: Developer engage file.cpp (file.cpp a le temps T1)
T2: construction de la première incrémentale commence sur la construction serveur
T3: Création du serveur obtient les fichiers pour la dernière modification (fichier.cpp à T1)
T4: développeur valide fichier.cpp pour la deuxième fois (fichier.cpp a T4)
T5: Buildserver compile file.cpp de T1 dans fichier.obj (maintenant file.obj a l'heure T5)
T6: Finitions de première construction (le résultat est bon)
T7: Deuxième génération incrémentielle démarre sur le serveur de build
T8: Création du serveur récupère les fichiers pour le dernier changement (file.cpp au T4)
Et maintenant le problème:
T9: Création du serveur ne compile pas file.cpp (de T4) dans file.obj car file.obj est de T5 donc le compilateur pense qu'il est plus récent que le fichier source.
Le problème est facilement résolu avec une version complète, mais cela prend beaucoup de temps (30 minutes sans tests unitaires).
La construction incrémentale est-elle possible en combinaison avec l'intégration continue?
Éditer: Ce problème ne semble se produire que lorsque vous utilisez le mode d'extraction côté serveur. Avec le mode d'extraction côté agent de génération, les fichiers modifiés obtiennent l'horodatage du moment de la récupération, tandis qu'avec l'extraction côté serveur, ils reçoivent l'heure de validation comme horodatage.
Votre serveur CI pourrait interroger votre VCS sur les changements de code. – jfs
C'est le cas. Le problème est le timing. Si un fichier est modifié après que le serveur CI a obtenu le prev. version, mais avant qu'il ne soit réellement utilisé dans la construction, il semble y avoir un problème. – Halt
@Halt: Je veux dire que votre VCS peut dire quels fichiers sont vraiment modifiés, donc vous pouvez les toucher pour que votre système de compilation fonctionne correctement. Quelque chose comme 'svn diff -r PREC: HEAD --summarize | awk '{print $ 2}' | xargs touch' – jfs