Construire gestion des versions dans la livraison continue
J'ai quelques questions concrètes au sujet de gestion des versions dans la Livraison Continue. Je crois que je comprends de flux de travail global qui est plus ou moins ceci:
1) Code
2) Push to version Control
3) Continuous Integration (unit, integration and end-to-end auto testing)
4) Artifacts deployment
Que sur le contrôle de version? Comment gérer construire des versions?
Disons que nous travaillons sur une Maven du projet, avec la sémantique versions: major.minor.build
.
Quand développeur de valider les modifications apportées aux VCS et serveur CI effectuer une génération, devraient serveur CI incrémenter le numéro de version et de créer une balise dans VCS?
Est cette version présente dans le code source? Si donc, après chaque poussée de VCS, les développeurs de mettre à jour le projet, depuis le serveur CI engage des changements (version incrément) sur le projet.
Je suis un peu confus et j'aimerais comprendre le CD de flux de travail d'une manière pratique.
La question est probablement un meilleur ajustement pour programmers.stackexchange.com
OriginalL'auteur Héctor | 2015-11-20
Vous devez vous connecter pour publier un commentaire.
En général, vous devriez avoir:
Le premier point est crucial si vous vous souciez de semver ou dans le cas où vous devez fournir les informations de compatibilité pour d'autres outils/libs. C'est seulement vous qui pouvez dire si une nouvelle "version" casse quoi que ce soit - le plus populaire système d'indication est à la suite de la semver règles de contrôle de version.
Le second point ("référence" nombre) peut ou peut ne pas être important pour vous. Vous n'avez généralement pas besoin de plus d'un, le CI/CD build numéro de version (tous les populaires CI/CD service a un numéro de version ID, qui se réfère à "construire"). Le point de ce nombre, c'est que vous pouvez rapidement vérifier que le CI/CD build/logs d'un artefact si vous en avez besoin.
Comment fusionner les deux (ou plus) parties?
Il n'est pas rare d'avoir séparé la "version" et "construire" des nombres. En fait, chaque iOS projet que par défaut. Dans ce cas, vous avez la "version" nombre gérés manuellement, et un autre à "construire" le nombre géré automatiquement. Le numéro de version peut être dans l'artefact nom, ou peut être imprimé lorsque quelqu'un récupère le
--version
de l'information dans le cas d'un fichier binaire (ex:$ brew info
->0.9.5 (git revision 18c48; last commit 2015-11-02)
Alternativement, vous pouvez ajouter de nouveaux composants à semver (
x.x.x.BUILDNUM
), utilisez la dernière composante de semver (x.x.BUILDNUM
- je ne recommanderais pas ceci si vous avez un strictement incrémentiellesBUILDNUM
) ou simplement inclure le "construire" le nombre dans le nom de l'artefact.Ce sont toutes les possibilités, vous aurez à choisir le meilleur pour votre cas. Vous devez définir la signification de ces chiffres et de décider de l'endroit où le nombre devrait être présenté (par exemple, devrait-il faire partie d'une
--version
appel ou devrait-il être juste une partie du nom de fichier).modifier: pour réfléchir à votre question sur "devraient serveur CI incrémenter le numéro de version et de créer une balise dans VCS?" - Je ne recommanderais jamais ce. Un serveur CI peut avoir aussi des problèmes, vous ne devriez jamais modifier votre code à partir d'un processus de veille. Écraser accidentellement (par exemple, force de poussée) quelque chose qui peut être vraiment dangereux. C'est pourquoi il est préférable de simplement utiliser le Numéro de Build exposés par le CI/CD service.
Oui, nous avons l'habitude d'avoir un script qui n'a qu', basé dans une version simple fichier texte. Nous l'exécuter manuellement lorsque nous voulons incrémenter le numéro de version, il incrémente dans la version du fichier, puis crée un commit & tag. Vous pouvez bien sûr le faire manuellement, mais c'est plus sujette aux erreurs.
Pour référence, c'est un nettoyés version de notre script qui bosses le numéro de version pour l'un de nos projets: gist.github.com/viktorbenei/d341e74c8321473c8a67 - d'abord, il vérifie si il y a quelque chose qui n'est pas encore validé, puis il procède à changer le numéro de version, engageons le changement et créer connexes git tag.
Pouvez-vous expliquer pourquoi vous devriez ne jamais modifier votre code à partir d'un processus de veille" est vrai?
c'est plus d'un générique d'informer, que si vous pouvez l'éviter, vous devez. Si vous permettre à un non environnement interactif pour modifier votre code, il peut modifier de toute façon, tout ce que vous pouvez faire est d'arrêter le processus si vous trouvez un problème et essayer de réécrire l'historique de git. Un simple, moins nocif exemple est que, si un changement d'outil, où il génère la sortie de la construction et il commence à commettre des artefacts (iOS ipa, Android apk, etc.) dans les pensions de titres, si le nouveau dir n'est pas git ignoré. La suppression du fichier peut également se produire. En fonction de ce que et comment vous le faites, cela pourrait ne pas être un problème, mais surtout pour les débutants.
OriginalL'auteur Viktor Benei