web-dev-qa-db-fra.com

jenkins rollback version précédente de deploy

Voici la chose. J'ai des travaux de pipeline jenkins dans lesquels déployer des applications backend Java. Les pipelines sont exécutés par des scripts de SCM. Ces scripts sont ceux qui récupèrent le code de l'équipe de développement et: 1- checkout ce code 2- compiler et créer la GUERRE 3- copier la guerre sur le serveur Web.

Maintenant, les développeurs veulent implémenter une restauration et si un travail est exécuté, et qu'un nouveau déploiement est effectué et échoué, ils veulent revenir au dernier qui fonctionnait bien.

Existe-t-il un moyen de le faire dans jenkins et par exemple en utilisant un artificiel Jfrog? nous avons configuré un artefactoire et nous pouvons télécharger des GUERRES (ou d'autres fichiers) dans ce référentiel mais n'est pas utilisé. Je ne sais pas comment implémenter cela. Je pensais que l'utilisation de balises pour différents fichiers WAR et si le déploiement échouait, la suppression de la dernière guerre artificielle qui fonctionnait bien? Est-ce possible? comment cette approche peut-elle se faire dans jenkins en utilisant artificiel. Je peux implémenter une nouvelle étape qui après la création de WAR, puis il télécharge ce WAA vers artificiel, ut comment puis-je connecter tis avec jenkins pour utiliser le WAR que je veux? Une suggestion sur la façon de procéder? Merci!

3
Chanafot

Je vous propose ces approches:

Sans artificiel

Dans ce cas, il vous suffit de paramétrer votre pipeline actuel pour recevoir le nom de la branche ou la balise comme paramètre.

Le flux de travail pourrait être:

  • Avant de fusionner votre branche de publication en master, vérifiez l'existence de la balise avec la version stable précédente ou créez-en une nouvelle.
  • Fusionnez votre version (qa, test ou autre) vers la branche master
  • Exécutez votre pipeline actuel avec la branche principale .
  • Si une erreur est détectée, effectuez une restauration à l'aide de votre SCM (csv, svn, git, etc.). Par exemple, bitbucket a une option revert dans la section des demandes de tirage fusionnées.
  • Exécutez à nouveau le même pipeline avec la branche principale comme paramètre. Si la restauration n'est pas possible, exécutez ce pipeline avec la dernière balise stable comme paramètre.

Avec Artifactory ou un référentiel d'artefacts

Dans ce cas, vous devez adopter une stratégie de version de logiciel. Lisez ces sources:

Dans le mode le plus simple, il vous suffit de créer une version à version incrémentielle de vos guerres. Les versions Spring fonctionnent de manière similaire:

spring-release-versions

https://mvnrepository.com/artifact/org.springframework/spring-core

Par exemple:

  • Aujourd'hui, vous disposez d'une version stable 5.0.0-RELEASE enregistrée dans votre artificiel et déployée dans des environnements de production.
  • Dans la nuit, exécutez votre pipeline et, comme étape finale, téléchargez votre guerre api-5.0.0-RELEASE.war dans votre artificiel.
  • Un mois après, vous avez une nouvelle version 5.0.1-RELEASE .
  • Exécutez votre pipeline et si une erreur est détectée, téléchargez simplement la version stable précédente appelée 5.0.0-RELEASE et déployez-la comme étape de restauration.

Autres techniques similaires

  • Créez une version de votre application à l'aide de Docker et attribuez une version incrémentielle.
4
JRichardsz

En remplacement d'Artifactory, vous pouvez utiliser les versions Github ou les packages Gitlab et suivre un scénario tel que (en supposant un schéma de versioning comme prod.build_number.short_commit_hash):

  1. Hier soir, vous avez publié la version prod.32.ehR456e
  2. Aujourd'hui, il semble que cette version rencontre des problèmes de prod.
  3. À l'aide d'un pipeline de déploiement automatisé, annulez le déploiement en redéployant la version prod.31.fBr451e stockée dans les versions github ou les packages gitlab.
1
EddardOmeka