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?
Je veux juste this répondre plus clairement. Comment faire votre travail pour vérifier un commit spécifique, étape par étape:
COMMIT
dans mon exemple.${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.
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.
Comme le dit la documentation:
Saisissez votre ID de validation dans le paramètre "Branches à créer".
Une solution de contournement consisterait à:
build_br
" branche.build_br
au commit attendu 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.
Dans "Pre Steps", essayez d'ajouter "Execute Shell" et ajoutez:
git pull
git checkout <commit version>
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.
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 .