Build TFS-serveur de la branche?
Nous avons un TFS 2008 projet avec deux branches (le"Principal" et "NewFeature").
Chacun est complète, indépendante de la "copie" (variante) du code source.
Par la modification de l'espace de travail mappages, nous pouvons cartographier les deux variantes sur notre Pc locaux et ont travaillé avec les deux branches avec pas de problèmes.
Cependant, si je configurer les mappages pour passer notre serveur de build sur le NewFeature branche (qui devrait changer la NewFeature code source sans rien changer d'autre, aussi loin que le serveur de build), j'obtiens une erreur:
There is no working folder mapping for $/Main/Product.sln
c'est à dire quand il est la construction de la NewFeature branche, quelque chose est toujours à la recherche dans le Principal branche, même si il n'y a pas de références n'importe où dans le code source de cette branche. Il semble être mise en cache de certains de référence à Main?!
J'ai fait nettoyer complètement construire (supprimé le dossier de la version du serveur et exécuter le construire avec /p:ForceGet=true assurez-vous que la cartographie est vidé vers le serveur, et il n'y a pas de fichiers sur le serveur qui pourrait cache de l'espace de travail liaisons), mais cela ne l'aide pas.
Des suggestions?
source d'informationauteur Jason Williams
Vous devez vous connecter pour publier un commentaire.
Vérifier que:
/MODIFIER /
Noter, cependant, il est pas important que $/Main et $/Branches/Caractéristique vivre au même niveau dans la hiérarchie de l'arbre. Pas plus que le chemin d'accès local sur le serveur de build.* Tout ce qui compte est ce qui est en dessous de chaque branche. Si le contenu est une cohérence interne, puis toutes les scripts de construction devraient fonctionner sans modification.
Pour des exemples concrets de la façon dont j'aime à lier tout cela ensemble, voir mes dernières réponses, par exemple:
Mon chemin n'est pas le seul moyen, mais je peux attester qu'il fonctionne mieux que tous les autres variations que j'ai rencontrés au fil des ans 🙂
*Franchement, en essayant de s'immiscer dans l'Équipe de Construire peut devenir beaucoup plus douloureux que le plan de restructuration à votre MSBuild scripts. Pour la fiabilité, vous devez placer votre tfsbuildservice.exe.config personnalisations sous contrôle de version quelque part...si vous possédez >1 serveur de build (ou qui pourrait dans l'avenir), alors vous avez à considérer un changement de la stratégie de déploiement...vous finissez par avoir besoin d'un méta-processus SCM pour la gestion de vos processus SCM!
J'ai aussi eu ce problème lors de l'exécution de construire à partir d'une branche dans TFS 2010. TSF a été signalé que "Il n'y a pas de dossier de travail pour la cartographie $/Main/Produit.la sln" La solution est avéré être à modifier la définition de build comme suit (je suis en utilisant le "Modèle par Défaut" modèle de processus de génération—je n'ai pas essayé cela avec un modèle personnalisé):
OK, les résultats sont en - j'ai trouvé une solution de contournement.
En raison de notre héritage processus de construction (build, de copie, de dissimuler, de construire des programmes d'installation personnalisés, copier dans le dossier de dépôt), je ne peux pas facilement placer la branche aux côtés de la branche principale. Il doit remplacer.
Donc, si j'ai Principaux et NewFeature, je souhaite détacher Principale et la carte NewFeature à sa place (c'est à dire utiliser "c:\Main" sur le serveur de build, et il suffit de modifier le code source qui s'affiche)
Solution #1 (le plus simple, évident et logique de la solution) est d'utiliser ces mappages:
Résultat attendu: NewFeature de la structure de code remplace simplement Principal, et que le serveur ne sait pas qu'il est sur une autre branche.
Résultat: Échec avec un "vous n'avez pas mappé $/Main, même si vous ne l'utilisez pas d'erreur".
Solution #2 est pour ce faire:
Cela fonctionne (il supprime l'avertissement et permet ainsi de construire de procéder avec MSBuild pas au courant qu'elle est immeuble dans une direction). Cependant, il est moche, et la génération obtient la branche Principale source code inutilement.
Solution #3 (non testé, trop coûteux d'essayer, sauf si je sais que ça marchera beaucoup mieux que le #2) est:
Espère que je peux, puis la carte que dans la branche que j'ai besoin et modifier TFSBuild.proj de le rediriger de construire dans cette branche.
(Edit: Oui, cela fonctionne bien. Maintenant, nous avons réorganisé l'ensemble de notre structure de code, de sorte que tout (toutes les branches) est sous une racine commune dans une seule Équipe de Projet, et la ramification/construction n'est plus un problème - il est facile de faire ce que nous avons besoin maintenant. L'astuce consiste à insérer un dossier racine dans la hiérarchie de sorte que vous pouvez passer à n'importe quel niveau que vous souhaitez. J'ai ajouté un petit tweak pour le script de construction de sorte que nous puissions les transmettre à la direction de la construire en tant que paramètre à MSBuild, de sorte qu'il est facile de construire n'importe quelle variante de maintenant. Toutes les branches nous ne voulons pas travailler sur peut juste être l'invisibilité et le serveur de build reste heureuse.)
Résumé
Toutes ces solutions (pour utiliser le terme technique) sucer. Vous devez reconfigurer l'espace de travail (dans ce cas, il n'est pas simple: 9 mappage des entrées sont requises de sorte qu'il est une source d'erreurs et fastidieux chose à faire), de modifier la TFSBuild.proj, de supprimer tout le code source, et d'exécuter un build avec /p:ForceGet=true pour passer le construire entre les branches. Donc, il faut environ une heure pour passer les branches. Incroyable, il faut prendre quelques minutes tout au plus!
Je de réaliser notre projet est loin d'être idéal, mais je ne peux pas croire qu'il doit être difficile d'en branche dans TFS (C'était un morceau de gâteau dans SourceSafe, Accurev, et Forcément, alors pourquoi tellement douloureux dans TFS?).
Comment tout le monde peut organiser leur TFS branches? Comment passez-vous les développeurs entre les branches? Comment passez-vous les versions de serveur entre les branches? Est-il vraiment à ce douloureux?
Lorsque vous Modifiez la définition de build il y a deux endroits qui ont besoin d'être changé.
Espère que cette aide.
Nouvelle mise à jour:
Comme indiqué dans l'autre réponse, j'ai trouvé une solution de contournement qui était ok pour une courte durée branche, mais il n'a pas vraiment fonctionne très bien. Depuis, j'ai en revenir au problème, et la solution est ridiculement simple:
Dans le TFSBuild.proj, le chemin a été basé sur $(BuildProjectFolderPath). Ce chemin correspond à un côté serveur (source chemin de contrôle) $/Main - pas un chemin d'accès local (D:\ServerBuildFolder\Main).
Malheureusement, pour des raisons historiques, notre code source est répartie sur plusieurs projets de l'équipe, ce qui signifie que l'on "branche" est fragmentée en plusieurs ramifiée dossiers de Contrôle de Source (c'est à dire $/Main/Code et $/Bibliothèques/Code. Vous ne pouvez pas créer une branche qui contient $/Main et $/Bibliothèques). Nous avons donc de rassembler ces fragments disparates de la Source de Contrôle de retour dans un tout cohérent hiérarchie à l'aide de l'espace de travail des mappages.
Cela signifie que Richard était en place sur le chemin relatif à partir de la TFSBuild.proj dossier à la .la sln fichier est incorrect, parce que MSBuild/TFS est en supposant que l' .la sln se trouve dans la même Équipe de Projet et le contrôle de source de la hiérarchie (donc a la recherche d' $/Main/Bibliothèques.la sln au lieu de $/Libraries/Bibliothèques.sln).
La solution est simple: j'ai remplacé $(BuildProjectFolderPath) avec un chemin d'accès local (par ex. D:\ServerBuildFolder\Main) pour les fichiers, afin que la référence a été résolu dans "l'espace local" (après les mappages avait été appliqué), et MSBuild est maintenant en cours d'exécution doucement.
La morale de l'histoire:
1) ne JAMAIS utiliser plus d'une Équipe de Projet si il n'y a aucune chance que vous jamais rêvé d'avoir tout type de référence entre ces code-bases. Ne soyez pas dupé en pensant qu'une nouvelle Équipe de Projet offrent un certain type de indolore distinction logique entre les applications et les bibliothèques. Des projets supplémentaires ont prouvé pour être juste une administration cauchemar - des charges de problèmes supplémentaires pour absolument aucun avantage. (C'est un gros partagé des tas de sous le capot, de sorte que tous les éléments de travail et de contrôle de source de dossiers sont encore visibles dans tous les projets (!), mais il ajoute que quelques-uns des murs de briques qui font de l'inter-projet des liens très problématique)
2) Toujours créer une unique racine de votre Équipe de Projet, contrôle de code source, et puis tout le reste en dessous de ce dossier. par exemple, Pour le projet "$/", créer "$/Main/Root" et puis mettre le tout à partir de votre source de hiérarchie à l'intérieur de la Racine.
En suivant ces règles, vous serez en mesure de branche le single 'Root' dossier à l'avenir, et ensuite seulement besoin d'une seule branche et un unique supplémentaire de l'espace de travail de cartographie. Cela vous aidera à éviter la calvitie prématurée.
(Pour ma défense, je l'aurais fait de cette façon pour commencer - je travaille avec un héritage de l'installation. Dans la défense de l'héritage de l'installation, il semble bon sur le papier mais n'est tout simplement pas pris en charge par Microsoft approche!)
J'ai eu cette erreur et tout ce que je peux imaginer, c'est que la définition est devenue corrompue ou quelque chose. J'ai juste refait le processus de trucs (re-ajout de la solution que j'essayais de construire) et reconfiguré les espaces de travail et il a commencé à travailler à nouveau. HTH.