J'ai juste introduit un DVCS (Git dans ce cas) dans une grande société bancaire, où Perforce, SVN ou ClearCase ont été centralisée VCS de choix:
Je connaissais déjà des défis (voir ma réponse précédente "Peut-on enfin passer à l'DVCS dans les Logiciels d'Entreprise? Est SVN encore un "must have" pour le développement?")
J'ai été questionnée sur trois fronts:
centralisation: alors que le modèle décentralisé a ses mérites (et privé s'engage ou non le réseau tout en ayant accès à la pleine histoire), il y a encore besoin d'être un ensemble clair de centralisé de repos, agissant comme la principale référence pour tous les développeurs.
authentification: un DVCS vous permet de "signer" (commit) votre code... à peu près n'importe qui (l'auteur de "foo
", l'e-mail "foo@bar.com
").
Vous pouvez faire un git config user.name foo
ou git config user.name whateverNameIFeelToHave
, et d'avoir tous vos commits avec un faux nom.
Qui ne se mélangent pas bien avec de l'unique centralisé "Active Directory" utilisateur référentiel utilisé par les grandes entreprises.
autorisation: par défaut, vous pouvez le copier, de pousser ou de tirer à tout référentiel, et de modifier toute une branche, ou n'importe quel répertoire.
Pour les projets sensibles, qui peut être un problème de blocage (le monde bancaire est généralement très protectrice à l'égard de certains prix ou quants des algorithmes, qui imposent un strict accès en lecture/écriture pour un nombre très limité de personnes)
La réponse (pour une installation de Git) est:
-
centralisation: un unique serveur a été configuré pour n'importe quel référentiel d'avoir à être accessible par tous les utilisateurs.
La sauvegarde a été en prenant soin de incrémentiel (chaque jour, chaque semaine).
DRP (Disaster Recovery Plan) a été mis en œuvre, avec une deuxième serveur sur un autre site, et en temps réel de la réplication de données à travers SRDF.
Cette configuration en elle-même est indépendante du type de référentiel ou de l'outil dont vous avez besoin (DVCS, ou Nexus repo, ou principal Hudson planificateur, ou...): un outil qui peut être critique pour une version en production doit être installé sur les serveurs de sauvegarde et de la DR
.
-
authentification: seulement deux protocoles permettent aux utilisateurs d'accéder aux principales repos:
- ssh, avec une clé publique/privée:
- utile pour les utilisateurs externes à l'organisation (comme off-shore de développement),
- et utile pour les génériques de comptes Active Directory manager ne voulez pas créer (parce que ce serait un compte "anonyme"): une personne doit être responsable de compte générique, et qui serait celui qui détient la clé privée
- https, avec un Apache authentifier les utilisateurs par le biais d'un paramètre LDAP: de cette façon, une réelle connexion doit être fourni pour toute git opération sur les titres.
Git propose avec son smart protocole http, permettant non seulement pull
(lu) via http, mais aussi push
(écrire) via http.
La partie authentification est également renforcée sur le Git niveau par un post-receive
crochet qui permet de s'assurer qu' au moins un de la vous engage poussent à une pension a un "committer" nom correspond au nom d'utilisateur détecté par shh ou le protocole http.
En d'autres mots, vous devez configurer votre git config user.name
correctement, ou tout poussez vous souhaitez vous rendre à un centre de pensions sera rejetée.
.
-
autorisation: les deux paramètres précédents (ssh ou https) sont câblés pour appeler le même ensemble de script perl nommé gitolite, avec comme paramètres:
- le véritable nom d'utilisateur détecté par ces deux protocoles
- la commande git (clone, pousser ou tirer) que l'utilisateur veut faire
Le gitolite script perl qui va analyser un simple fichier texte où les autorisations (accès en lecture/écriture pour tout dépôt ou les branches à l'intérieur d'un référentiel, ou même pour les répertoires au sein d'un référentiel) ont été mis en.
Si le niveau d'accès requis par la commande git ne correspondent pas à l'ACL définis dans ce fichier, la commande est rejetée.
Le ci-dessus décrit ce que j'ai dû mettre en place pour un Git, mais plus important encore, il énumère les principales questions qui doivent être abordées pour un DVCS réglage à faire sens dans une grosse société avec un unique utilisateur de la base.
Alors, et alors seulement, un DVCS (Git, Mercurial, ...) peuvent ajouter de la valeur à cause de:
l'échange de données entre plusieurs sites: bien que ces utilisateurs sont authentifiés par le biais d'Active Directory même, ils peuvent être situés partout dans le monde, les entreprises, j'ai travaillé pour des développements généralement entre les équipes à l'échelle de deux ou trois pays). Un DVCS est naturellement fait pour l'échange efficace de données entre les équipes distribuées.
la réplication à travers des environnements: un paramètre à prendre soin de l'authentification/autorisation permet le clonage de ces dépôts sur d'autres serveurs dédiés (pour les tests d'intégration, tests UAT, pré-production et de pré-déploiement fins)
-
l'automatisation des processus: la facilité avec laquelle vous pouvez cloner une pension peut également être utilisé localement sur un poste de travail utilisateur, pour l'unité des fins de test avec le "surveillé s'engage techniques" et d'autres utilisations ingénieuses: voir "Ce qui est le plus habile utilisation de la source de dépôt que vous avez jamais vu?".
En bref, vous pouvez pousser un second local repo en charge de:
- diverses tâches (test de l'unité ou de l'analyse statique du code)
- en poussant sur le repo si ces tâches sont couronnées de succès
-
alors que vous êtes encore dans la première pensions sans avoir à attendre le résultat de ces tâches.
.
-
killer caractéristiques: Tout DVCS est livré avec ceux-ci, le principal étant la fusion (jamais essayé d'en faire un complexe de fusion de flux de travail avec SVN? Ou sloooowly de fusion 6000 fichiers avec ClearCase?).
Que seul (fusion) signifie que vous pouvez vraiment profiter de la ramification, tout en étant en mesure à tout moment à fusionner vous code à l'autre "principal" ligne de développement, parce que tu voudrais faire:
- d'abord localement, au sein de votre propre repo, sans déranger personne
- ensuite, sur le serveur distant, en poussant le résultat de cette fusion sur le repo central.