2010-11-23 27 views
3

Nous avons récemment développé Hudson pour une intégration continue, et nous commençons à profiter des avantages du test automatisé, de l'analyse statique, etc. Notre prochaine étape consiste à lancer notre processus de relâchement manuel encombrant. Ce que j'imagine est un processus en deux phases:Communiqués automatisés avec Hudson + Ant + Subversion

  1. Branche pour une ligne de libération. Une fois que notre ligne de développement se sera stabilisée, nous aimerions nous lancer. Parce que nous avons des utilisateurs à faible densité et à forte demande, il y a souvent un peu d'activité à la suite d'une sortie officielle, ce qui entraîne un peu de stop-and-go-développement au début d'une ligne de lancement (et nous ne vouloir bloquer le développement de la ligne principale pour cela), donc la pratique de se ramifier à un moment opportun, puis de permettre une fenêtre de stabilisation (des heures à un jour ou deux) est logique. (Ceci est fait dans subversion, habituellement nous marquons la version de développement immédiatement avant la branche, puis nous branchons, puis nous poursuivons le développement parallèle)

  2. Couper une version de la branche. Cela implique actuellement

    1. Un peu de "correction" pour mettre les numéros de version où ils appartiennent.
    2. Checkin
    3. Tag
    4. Export
    5. Construire
    6. Un peu de "fixup" pour revenir numéros de version à "devel/instantané".
    7. Checkin

Donc, pour opérationnaliser quelque chose comme ça à Hudson, proprement, comment pouvons-nous:

  • exécuter une opération de branche d'Hudson que les branches de l'arbre, étant donné une nouvelle version nom de la branche et génère un nouveau travail Hudson pour créer une nouvelle ligne de construction continue pour cette branche. (Il est proche d'une copie de la configuration -trunk existante, mais doit remplacer certains noms d'espace de travail et des choses ...)

  • D'où vient la logique d'interagir avec Subversion? (Peut-être pourrait être dans le script ant, pourrait être un script séparé, Hudson/plugins semblent également fournir une partie de cette logique?)

  • Toute réflexion sur les utilisateurs/autorisations pour Hudson/processus subsidiaires quand il parle à la repo en mode écriture? En ce qui concerne la phase deux, les questions ci-dessus s'appliquent également. Puis-je utiliser le plugin release pour automatiser une logique comme celle-ci?

J'ai lu attentivement la documentation Plugin Hudson et la libération, mais il est plutôt inégale et il n'y a pas beaucoup d'exemples de travail disposés de bout en bout ...

Edité pour ajouter : Je comprends et attendais le "Avez-vous considéré Maven?" réponses ... J'apprécie, et je comprends que Maven est probablement la bonne solution à long terme, mais un changement de système de construction avec toute la force et le drang de passer aux contraintes précises de Maven et d'éduquer le personnel technique n'est pas réalisable À court terme. Vraisemblablement, il y a un moyen de le faire avec Ant et une petite graisse de coude ...

+0

Avez-vous envisagé d'utiliser maven? En maven je changerais la cible du test au déploiement. :-P –

+0

@Peter Lawrey: Nous regardons Maven. J'avoue avoir été brûlé/frustré par un couple de projets Maven il y a des années. J'entends dire que c'est une vieille nouvelle, et nous verrons une transition vers Maven, mais cela devra être une question à plus long terme (problèmes de stabilité/productivité) – andersoj

+0

Ne considérez pas Maven. Maven est horrible et cassé et rigide et sans valeur et stupide. Vous pouvez facilement faire mieux vous-même. –

Répondre

1

à court terme processus basé sur Ant

Compte tenu de votre engagement envers le processus de construction Ant (et il n'y a rien de mal à cela, sauf pour les goodies que vous êtes absent sur) Je vous suggère que vous mettez en miroir le Maven approche, mais le faire dans Ant. Donc, ayez une complète read of this article that shows how to use SVNAnt.

Solution idéale pour le long terme

Comme @Peter Lawray a mentionné, Maven est votre ami ici. Examinez spécifiquement le plugin de publication qui gérera le processus de marquage de votre référentiel Subversion avec la version "gold release" de votre projet. Essentiellement, vous effectuez une construction complète (y compris des tests fonctionnels si vous les avez) pour vérifier votre artefact, puis Maven balise votre repo Subversion et enfin il court sur vos fichiers pom.xml de projet et les re-versions au niveau suivant en haut (comme des instantanés). En termes de processus de construction, Hudson travaille joyeusement avec Maven et construit et teste les artefacts (vos fichiers JAR, WAR, EAR, etc.) dans la séquence que vous spécifiez dans le fichier pom.xml de Maven.

Vous pouvez lier SeleniumRC et fournir un environnement de test fonctionnel automatisé multi-navigateur si vous le souhaitez. Maven gère tout depuis la construction, jusqu'au déploiement de l'artefact dans le serveur de construction, puis les tests fonctionnels ultérieurs avec une dernière validation par un processus de libération. Je suis blogged a little about this si vous êtes intéressé.

+0

+1 parce que je suis d'accord, Maven est un objectif à long terme pour nous. Mais nous avons besoin d'une solution minimalement disruptive (mais imparfaite) en utilisant Ant et pas trop d'impact sur le mode de fonctionnement normal des développeurs ... – andersoj

+0

@andersoj Édité ma réponse en réponse –

+0

@Gary Rowe: Grande ressource, je ne sais pas comment Je ne l'ai pas fait monter ... J'étais conscient de la périphérie de SVNAnt mais je n'ai pas réalisé la portée de son ensemble de fonctionnalités. Je vais laisser la question ouverte/sans réponse pour le moment pour attirer d'autres contributeurs, et nous donner une chance de ramener du contenu de cette page pour avoir une maison permanente sur StackOverflow. c.f. meta.stackoverflow.com/questions/7656/how-do-i-write-a-good-answer-to-a-question et meta.stackoverflow.com/questions/7515/why-is-linking-bad et msmvps. com/blogs/jon_skeet/archive/2009/02/17/répondeur-technical-questions-helpfully.aspx – andersoj

1

Ceci est conçu comme une solution jusqu'à ce que vous ayez maven en place.

Je pense que vous devriez simplement créer des scripts pour faire tout le travail (soit des scripts ant et/ou batch/shell). Jetez un oeil à la Batch Task plugin. Cela vous permet d'exécuter la version sur l'espace de travail actuel de votre travail. Votre script (s) sont destinés à faire tout le travail. Vous pouvez créer une copie de votre travail en cours en utilisant le remote api. Si les variables d'environnement, comme JobName, ne sont pas disponibles, vous devrez probablement coder en dur le nom du travail (ou les enregistrer pendant la construction dans un fichier sur l'espace de travail). A la fin, vous aurez un tronc mis à jour (ligne de dev), une nouvelle ligne de sortie (dans les branches) et un travail qui exécute tout votre CI sur la branche de publication.

+0

Scheutze: +1, bonne aide ici. Donc, l'utilisation de l'API à distance semble un peu maladroite puisque chaque appel à copier/modifier un travail va provenir d'Hudson en premier lieu - n'y a-t-il pas un plugin/option (peut-être pour une construction paramétrée? générer une nouvelle copie du travail en cours "? – andersoj

+0

Je ne suis pas au courant d'un plugin. Jetez un oeil à la liste des plugins (http://wiki.hudson-ci.org/display/HUDSON/Plugins). J'utilise l'API à distance pour déplacer les artefacts de construction entre un système Windows et Unix.Les artefacts sont produits sur le maître (Windows) et seront repris par un travail différent lié à un esclave (Unix). Ce n'est pas parfait mais fonctionne plutôt bien et l'impact sur les performances est minime, comparé à l'exécution totale du travail esclave. –

+0

J'ai juste eu une idée stupide. Que diriez-vous d'un travail paramétré. Le paramètre est l'URL SVN de votre projet. Ensuite, vous créez un déclencheur après validation dans SVN qui appelle ce travail paramétré avec la bonne URL pour le projet (branche ou cible). Malheureusement, vous devez configurer votre projet pour extraire de subversion quelque chose comme chaque année (ou une date dans le passé - je ne sais pas si la solution passée fonctionne réellement) afin que vous puissiez déclencher la construction à partir de svn. Le déclencheur doit s'assurer que vous avez seulement envoyé des déclencheurs valides (trunk et release braches). Afin de rapidement ... (voir le commentaire suivant) –

0

Je ne ferais pas le branchement et le marquage dans le cadre de la construction, je le ferais à la main. C'est (encore!) Peut-être une différence philosophique: je vois Hudson comme un moyen de prendre l'état actuel d'une ligne de code et de produire ses artefacts, plutôt que comme un outil pour manipuler les lignes de code. C'est comme un gros compilateur, mais pas comme un IDE.

Alors, mon processus ressemblerait (et notre processus, en fait, ne ressemble):

  1. Tag au point de sortie (appeler root_release23_20101124)
  2. Direction générale à ce moment-là (appeler release23_20101124)
  3. Modifier les propriétés de libération des fichiers à ajouter le numéro de version, et ce que d'autres fixup
  4. Arrivée à la branche
  5. Mettre en place un nouvel emploi Hudson (en copiant un travail de modèle) pour construire un rel la facilité, le configurer pour vérifier de la branche
  6. exécuter le travail

Ainsi, la mise en place d'une nouvelle version est un développeur/build tâches manager, mais en fait la construction de la libération se fait par Hudson.

La création d'une version implique un travail manuel, mais vous ne pouvez pas l'appeler fastidieux - combien de temps faut-il pour marquer, brancher, éditer quelques fichiers, valider, créer un travail et changer son nom de branche?

+2

C'est une question de DRY, je suppose. Après avoir fait cela plusieurs fois, je sais combien il est facile pour moi ou quelqu'un d'autre de le faire mal, hors d'usage, sauter une étape, utiliser un schéma de nommage de balises légèrement différent, peu importe ... Si c'est répétitif, je ne fais pas Je veux le faire à la main, et je veux que le processus soit codé par programme ... – andersoj

+0

Assez juste. Cependant, je ne pense toujours pas que ce soit un travail de Hudson. Un script shell ferait l'affaire. –

+0

Mais je trahis mes préjugés quand je dis ça! –