Je viens de commencer un nouveau travail le mois dernier et on dirait qu'ils n'ont AUCUN contrôle de code source pour leur code. Ils comptent sur les sauvegardes que leur hébergeur prend pour eux.
Après avoir parlé un peu, j'ai convaincu mon patron que nous devrions certainement utiliser le contrôle de code source et après avoir donné un court séminaire à ce sujet, toute l'équipe est à bord; ils aimaient Mercurial.
Voici donc comment nous travaillons actuellement:
º----------BitBucket
º---------/
º--------/
Moi-même et les trois autres développeurs hg pull
de BitBucket, apportons nos modifications, puis hg push
à BitBucket.
Maintenant, pour le déploiement, quelqu'un aurait besoin de FTP les derniers fichiers vers le serveur de production.
Je pensais installer Mercurial sur notre serveur et utiliser hg clone
(par la suite hg pull
) pour garder les versions à jour en production.
º---push->-----BitBucket----<-pull-----º (production server)
º---push->----/
º---push->---/
Est-ce une bonne idée? Des pièges potentiels que je ne vois peut-être pas? Quelqu'un ici a-t-il fait quelque chose de similaire? Comment déployez-vous une grande application de framework PHP (nous utilisons Moodle)?
la source
Réponses:
C'est certainement une bonne idée et c'est une méthode courante à utiliser pour le déploiement. Vous souhaiterez peut-être utiliser une branche stable à des fins de déploiement tout en conservant le tronc pour le développement continu afin de pouvoir tester la branche stable avant de la déployer en production.
Le seul problème peut survenir lorsque vous avez des informations sensibles dans votre base de code (telles que des clés API, etc.) que vous ne souhaitez pas télécharger sur des serveurs tiers (dans votre cas, ce serait Bitbucket). Dans ce cas, un script simple qui est exécuté une fois que vous avez extrait les données du référentiel pour restaurer les données sensibles au bon endroit résoudra ce problème.
la source
N'oubliez pas que cette stratégie de déploiement n'est pas atomique. Il peut arriver que certains fichiers soient déjà mis à jour alors que d'autres fichiers peuvent encore être dans l'ancien état pendant que l'application est lancée. Cela peut provoquer des effets secondaires inattendus.
Une façon de faire des déploiements atomiques consiste à utiliser des liens symboliques. Créez un répertoire contenant les nouveaux fichiers. lorsque tout est prêt, modifiez un lien symbolique pour le répertoire utilisé. Si vous conservez l'ancienne version, vous pouvez également facilement revenir en arrière.
la source
Autre possibilité (à mon avis meilleure) : utiliser un serveur de build / serveur d'intégration continue.
Brève explication courte: il s'agit d'un serveur (peut être interne, n'a pas besoin d'être sur Internet) que vous configurez pour surveiller vos référentiels, et chaque fois qu'il y a de nouveaux changements dans le référentiel, le serveur construit votre code ( AFAIK cela n'est pas nécessaire en PHP) , exécute des tests unitaires et déploie votre code sur le serveur Web.
Pour plus d'informations, consultez ces liens:
Il existe de nombreux produits différents pour CI , mais le seul que j'ai utilisé jusqu'à présent est TeamCity . Très facile à installer ... en fait, c'est le premier que j'ai essayé, et je l'ai tellement aimé que je m'en suis tenu.
Solution alternative bon marché:
Si la configuration d'un serveur de build demande trop d'efforts ou si vous souhaitez plus de contrôle sur le moment exact où votre site est déployé, il vous suffit de configurer un fichier de script (Batch / Powershell sur Windows ou quelque chose de similaire sur Linux / Mac) qui tire le la dernière version de votre référentiel et la transfère sur le serveur de production.
Fondamentalement, c'est la même chose qu'un serveur de build, mais plus simple.
Peu importe comment vous le résolvez à la fin ... assurez-vous de l'automatiser d'une manière ou d'une autre!
Vous voulez pouvoir déployer en un seul clic / en tapant une seule commande, afin que TOUT LE MONDE puisse le faire sans avoir à connaître quoi que ce soit de spécial et sans faire d'erreurs - même en cas de catastrophe ou de stress.
la source
Nous faisons cela, ou des choses similaires à cela. Le @johannes non anatomique mentionne que l'angle est un problème, bien qu'en termes réalistes cela se produise si vite qu'il devrait être OK et il existe des moyens de contourner cela comme il le fait remarquer.
Probablement plus important que cette non-atomicité serait "comment gérez-vous les mises à jour du schéma de la base de données" - le déploiement de mauvais code de cette façon facilite la correction. Le gros problème est lorsque vous déployez une mise à jour qui modifie la base de données que vous souhaitez restaurer. Ou si vous effectuez de mauvaises mises à jour et corrompez des données.
L'autre problème que nous avons eu avec les outils DCVS (par opposition à l'utilisation de SVN) est que vous avez maintenant une copie de la base de code entière sur la machine quelque part qu'un attaquant pourrait potentiellement récupérer. Et aussi que cette base de code DCVS peut devenir assez lourde en termes de taille, ce qui pourrait avoir de l'importance si vous payez pour le stockage et / ou la sauvegarde. Nous utilisons toujours SVN pour le déploiement final pour ces raisons.
la source
C'est une excellente idée, mais gardez à l'esprit les points suivants:
hg update -C
n'affecte pas la production (par exemple, supprimez les fichiers importants)hg status
sortie propre sur le serveur (cela vous aidera à vous assurer que vous ignorez les choses en tant que cache)Enfin, je pense que la chose la plus précieuse pour ajouter un DVCS à votre processus de déploiement est que cela ajoutera de la sécurité à votre déploiement, parfois les pirates informatiques injectent du code malveillant dans vos fichiers et vous n'avez vraiment aucun moyen de le détecter facilement sans quelque chose comme le contrôle de version ( spécialement distribué, car l'aspect distribué de VCS facilite la vérification de l'intégrité de vos fichiers).
Certains sites ont été piratés plusieurs fois, Mercurial m'aide à annuler littéralement ces piratages en émettant simplement un
hg update -C
sur le serveur (bien sûr, vous voudrez peut-être faire unhg status
et obtenir les fichiers affectés pour une analyse ultérieure).la source