web-dev-qa-db-fra.com

Utilisez Hudson pour créer un commit git spécifique

J'ai un serveur de construction Hudson. Le code source est géré par un référentiel git. Pour chaque build, la dernière version est extraite et compilée. Maintenant, je voudrais dire à hudson d'utiliser non pas la dernière version, mais une ancienne version du code (spécifié par moi).

Dans Hudson, j'ai deux paramètres qui peuvent être réglés. Premier "nom du référentiel", avec la valeur par défaut "Origine" et deuxième refspec avec la valeur +refs/heads/*:refs/remotes/Origin/*. J'ai essayé un peu quelque chose comme Origin/[commitid] ou +refs/heads/*:refs/remotes/Origin/[commitid]. Mais rien n'a fonctionné comme prévu.

Je pense que je devais utiliser un travail paramétré, afin que je puisse donner le commit comme paramètre au travail.

Comment puis-je dire à hudson d'utiliser un commit spécifique au lieu du dernier?

36
Bernd

Je veux juste this répondre plus clairement. Comment faire votre travail pour vérifier un commit spécifique, étape par étape:

  1. Ajoutez un paramètre de chaîne à votre travail avec un nom, que ce soit COMMIT dans mon exemple.
  2. Choisissez Git comme SCM (fourni par plugin Jenkins Git ).
  3. Dans les propriétés Git SCM, définissez vos propriétés de dépôt.
  4. Dans Git SCM, dans le paragraphe Branches à construire tapez ${COMMIT} qui est la référence au paramètre de travail et sera résolu lors de la génération.

Voilà, lancez la construction et dans le journal, vous verrez quelque chose comme ceci:

Cloning the remote Git repository
Cloning repository ssh://your-repo.git
Fetching upstream changes from ssh://your-repo.git
using GIT_SSH to set credentials 
Fetching upstream changes from ssh://your-repo.git
using GIT_SSH to set credentials 
Checking out Revision af63e2102b65953316e512c0bb659578bb143a33 (detached)

Notez qu'il existe d'autres façons de définir la variable d'environnement avant la récupération SCM, c'est-à-dire en utilisant Prepare environment for the run étape du EnvInject Plugin (vous pouvez même utiliser Groovy pour cela).

De plus, si vous ne voyez pas les options dont je parle ou qu'elles ne fonctionnent pas, assurez-vous d'avoir une nouvelle version d'un plugin Git Dans mon cas, c'est la 2.2.0.

57
izzekil

Vous pouvez utiliser le paramètre de branchement de jenkins-git-plugin pour définir un identifiant de validation spécifique.

Jenkins ne récupérera alors que le commit et non le responsable d'une branche.

9
lkimmel

Comme le dit la documentation:

git plugin branch configure

Saisissez votre ID de validation dans le paramètre "Branches à créer".

7
linkaipeng

Une solution de contournement consisterait à:

  • définissez le plugin Git pour créer un "build_br" branche.
  • réinitialiser la branche build_br au commit attendu
  • Poussez cette branche build_br au moniteur de dépôt à distance par Jenkins ou Hudson (ce serait un Push --force, comme illustré dans " git reset --hard et un référentiel distant ")

De cette façon, la construction de cette branche build_br signifierait la construction d'un commit spécifique, et le GIT_COMMIT sera correctement défini.
Aucun développement ne devrait avoir lieu sur cette branche spéciale, car elle est réinitialisée régulièrement à tout commit que vous devez créer.

4
VonC

Dans "Pre Steps", essayez d'ajouter "Execute Shell" et ajoutez:

   git pull
   git checkout <commit version>
4
Andrzej Jozwik

Vous pouvez configurer votre travail Hudson pour créer une branche spécifique. Ensuite, vous pouvez pousser les modifications que vous souhaitez que Hudson intègre sur cette branche.

2
Dave Bacher

Je ne suis pas sûr de Hudson, mais le plugin Git de Jenkins a un bouton "Avancé ..." à droite juste au-dessus du champ "Navigateur de référentiel". Cliquer dessus révèle de nombreuses options supplémentaires, l'une d'entre elles étant "Commander/fusionner vers une succursale locale (facultatif)". Son texte d'aide dit "Si donné, vérifiez la révision pour construire comme HEAD sur cette branche. Veuillez noter que cela n'a pas été testé avec des sous-modules", donc cela semble être ce que vous avez en tête .

1
sschuberth