Je travaille dans une équipe de taille moyenne qui partage le même code source et tout en ayant une intégration continue en place, mais comme nous devons tous travailler dans la même branche, la construction est presque toujours interrompue.
Comme nous avons également une règle, qui a été introduite récemment pour atténuer les builds cassés, qui stipule que personne n'est autorisé à s'enregistrer pendant la construction est rouge.
Cela dit, pendant une journée, tout le monde a une poignée de fenêtres de 10 à 15 minutes où nous avons pu nous enregistrer.
Et au fur et à mesure que l'équipe s'agrandit, les fenêtres des opportunités d'enregistrement se réduisent encore plus. Cela oblige les développeurs à accumuler leurs modifications localement, ce qui se traduit par des ensembles de modifications plus importants, ce qui rend encore plus difficile de garantir que les modifications ne cassent rien. Vous pouvez voir le cercle vicieux.
Que pouvez-vous recommander pour me permettre de continuer à travailler efficacement dans un environnement comme celui-ci. Aussi, veuillez garder à l'esprit que je suis un développeur, pas un gestionnaire, et que je ne peux pas beaucoup changer le processus ou le comportement d'autres personnes.
Réponses:
Pour commencer, ce commentaire:
est totalement faux. Je l'entends souvent de gens qui ne sont pas habitués à la ramification, mais c'est toujours faux.
Si de nombreux développeurs accumulent des modifications localement, leurs modifications locales constituent une branche de facto du référentiel principal.
Quand ils poussent enfin, c'est une fusion de facto .
Le fait que vos branches et vos fusions soient implicites ne supprime pas la complexité supplémentaire qui vous préoccupe, il la cache simplement. La vérité est que rendre ce processus explicite pourrait vous aider (pluriel = toute l'équipe) à apprendre à le gérer.
Maintenant tu dis
mais dans ce cas, la construction ne peut jamais être corrigée, elle ne peut donc pas être tout à fait précise.
En général, s'il est raisonnable de construire localement (c'est-à-dire que la construction n'est ni trop grande ni trop lente), les développeurs devraient le faire avant de pousser quand même.
Je suppose que ce n'est pas le cas, car ils ne pousseraient pas les builds cassés en premier lieu, mais ce serait génial si vous pouviez clarifier ce point.
En général, la réponse à
est: arrêtez de casser la construction .
la source
C'est vraiment vicieux. Accumuler les changements localement est un gros drapeau rouge indiquant que quelque chose est gravement pourri dans le processus de développement. Cela détruit en quelque sorte le but d'avoir un système de contrôle de version .
Tant que vous voulez éviter de modifier le processus ou le comportement d'autres personnes, la solution la plus naturelle serait de configurer votre propre branche et de l'utiliser pour "accumuler" vos modifications (pour être davantage intégré à la branche d'équipe lorsque vous obtenez un chance).
En fait, s'il y a plus de gars comme vous, vous pouvez même collaborer et établir une branche de développement partagée pour échanger librement vos mises à jour sans être gêné par des idées de gestion incompétentes. La ramification permet de nombreuses façons différentes de simplifier le travail d'équipe.
Par souci de précision, vous pouvez réellement , ce sont des questions d'influence et de communication et il n'est pas vraiment nécessaire d'être en position de pouvoir pour changer les choses à leur goût (recherchez sur le Web quelque chose comme "gérer" si vous suis intéressé par plus de détails).
Cependant, c'est plutôt lourd et fastidieux et je peux parfaitement comprendre si l'on préfère simplement rester concentré sur le codage, avec peu d'implication dans la politique - donc si vous ne voulez pas (même si en théorie vous le pouvez ), c'est compréhensible. :)
la source
Je suis sensible à l'idée que vous vous sentez impuissant à changer l'environnement, mais je pense que cette situation constitue un sérieux défi pour votre professionnalisme en tant que programmeur.
Que se passerait-il si un chirurgien stockait des scalpels sales avec des scalpels propres? Que se passerait-il si un plombier ne testait pas les tuyaux qu'il avait installés? Que se passerait-il si un violoniste jouait toujours en désaccord avec l'orchestre?
Pourquoi les programmeurs devraient-ils être exemptés du travail d'équipe et de la courtoisie commune? En tant que membre de cette équipe, vous partagez la responsabilité du résultat. Il est irresponsable d'ignorer l'équipe car elle sabote ses propres efforts.
Je suis curieux d'où vient la règle selon laquelle "personne n'est autorisé à s'enregistrer alors que la construction est rouge"? C'est une bonne règle si cela concentre ensuite tout le monde sur la correction de la construction. J'essaierais de montrer l'exemple et d'aider à réparer la construction chaque fois qu'elle est cassée. Avouons-le, vous ne faites rien d'autre de toute façon. Si cela vous ennuie, je vous suggère d'exprimer ces préoccupations. La voix de quelqu'un qui essaie activement d'améliorer une situation a plus d'influence que le gars qui grogne dans le coin.
la source
Je pense que tant que vous pensez que vous êtes "juste un développeur" et donc vous ne pouvez pas changer les choses, vous allez souffrir de ce problème.
Ce que vous devez faire, c'est que vous devez annuler chaque validation du référentiel à chaque fois que quelqu'un rompt la génération, puis dire à ce type qu'il vient de rompre la génération et que cela doit s'arrêter. Vous devez également expliquer cette situation au manager et lui dire que la productivité de votre équipe souffre à cause de ce problème.
Vous devez faire tout ce que vous pouvez pour changer le processus et dire plutôt que vous êtes désolé plus tard au lieu de demander la permission.
Je pense que vous et votre équipe êtes dans une situation où le processus doit être changé et vous ne pouvez pas travailler efficacement avec ce modèle cassé. Je pense aussi qu'il est de votre responsabilité de faire quelque chose contre ce problème lorsque vous l'avez reconnu. Si personne d'autre ne veut rien faire contre le problème, c'est vous qui devez!
la source
Je peux comprendre votre sort, j'ai fait face à une situation similaire avec mon dernier projet au travail. Nous avons fini par implémenter une sorte de système de "patate chaude" où le développeur qui a récemment cassé la version devait la garder / nounou / la surveiller jusqu'à ce qu'elle soit corrigée ET réussir tous nos tests de vérification.
Cela a été un succès car les tests de construction et de vérification prenaient généralement environ 4 heures, donc la rupture de la construction signifiait que vous perdiez une demi-journée à faire du vrai travail. Inutile de dire que les développeurs ont utilisé les branches plus efficacement avant de les fusionner dans le tronc. Pour la plupart des développeurs, l'état d'esprit précédent était "Je vais simplement laisser le système de construction CI m'informer si mon code est cassé."
la source
Une simple modification du système CI le ferait: toute modification qui rompt la construction est automatiquement annulée. Encore mieux, laissez le référentiel CI devenir une zone de transit, où les modifications ne sont transmises au référentiel faisant autorité que lorsque la version est verte. Des outils comme Gerrit peuvent vous aider ici.
la source
Deux autres choses pourraient aider ici:
Mais vous devriez vraiment regarder les branches.
la source