6
votes

Jenkins construit après une commission meurtrie

Je travaille sur ce projet pendant environ une semaine maintenant et je cherche 2 jours sans explication claire en ligne. Pour une mission scolaire, nous devons configurer un buildServer avec les programmes suivants:

  • Maven, comme notre outil de construction.
  • Mercurial comme système de version de version.
  • Java (JRE), Javac et Javadoc.
  • Junit pour tester unitaire.
  • Jenkins (avec plugin JDEPEND).

    Nous devons créer 3 emplois et 1 de ces travaux sont les suivants:

    chaque fois que le référentiel (local) de Mercurial est édité, une construction doit commencer. (Signification: Chaque commit mercurial doit être détecté par Jenkins. Cette "détection" doit être déclenchée toutes les 1 minute)

    Les outils que nous devons utiliser sont les suivants: Javac , Maven comme outil de construction et mercurial bien sûr.

    Cela arrive tous dans un environnement Ubuntu. Puisque je ne suis pas familier (du tout) avec Linux, je n'ai aucune idée de la façon de faire cela.

    Je ne demande pas une solution prête à l'emploi, mais je demande plutôt que des "conseils" de comprendre des choses comme mercuriale 'haroks' , ce dont j'ai besoin (à faire) pour obtenir Cet emploi travaillant à Jenkins, etc. Tout ce que je trouve en ligne est plutôt vague et utilise des exemples avec python.

    si concret: un peu de guidage pourrait être la bienvenue :) Chaque main aidante est appréciée!


0 commentaires

3 Réponses :


4
votes

On dirait que votre professeur veut que Jenkins sondre le référentiel mercurial des modifications ("déclenchées toutes les 1 minute"). Lorsque vous configurez votre travail Jenkins, la section appelée «Construire des déclencheurs» aura une option de sondage. C'est celui que vous voulez.

Une meilleure solution consisterait à dire mercurial à Jenkins sur les changements, car le sondage est généralement une mauvaise idée (même si vous ne vérifiez rien dans des jours, Jenkins demande toujours chaque minute si quelque chose a changé). Vous pouvez regarder le livre pour des exemples sur la façon d'écrire des crochets mercuriaux ou vous pouvez utiliser script python j'ai écrit.


2 commentaires

Oui, c'est la partie que j'ai déjà compris (* * * * * * -> chaque minute), merci pour l'information cependant. Mais comment puis-je laisser Jenkins détecter que c'était un commit et qu'il doit construire les fichiers qui sont ce référentiel / dossier particulier?


Le plug-in Mercurial Jenkins sait déjà comment détecter la différence entre "aucun changement" et "a un changement". Tout ce que vous avez à faire est de dire à Jenkins, "lorsque vous exécutez ce travail, vérifiez les fichiers à partir de ce fournisseur de contrôle source (Mercurial) et exécutez cette commande (Maven). Et vérifiez chaque minute avec Mercurial pour voir si un travail a besoin de Être exécuté."



13
votes

Le moyen le plus efficace de déclencher des constructions sur Jenkins après que quelqu'un poussé à votre repo utilise le Changegroup Crochet en mecurial.

Jenkins de l'autre côté permet de déclencher de se déclencher à distance en appelant l'URL de votre travail avec un jeton spécial. Cette gâchette avec le jeton correspondant doit être configurée dans votre travail sur Jenkins:

Configuration de la gâchette

Le crochet mercurial qui sera mis dans le fichier repos .hg / hgrc peut être défini comme: xxx

ce crochet utilise le CURL outil de ligne de commande pour appeler l'URL de votre travail Jenkins avec le jeton défini qui permet de déclencher le travail à distance. Curl doit être installé sur votre boîte Linux bien sûr.


7 commentaires

Donc, chaque fois qu'un commit / poussée se produit, l'URL sera tirée et le travail commence?


Oui. Chaque fois qu'une poussée "arrive".


Cela peut sembler idiot (je travaille normalement avec Git), mais cela fonctionnera-t-il pour un commit (changement local par exemple). Nous travaillons dans un contexte très hypothétique (pas de connexions réelles à notre référentiel mercuriel, seuls les changements locaux qui simulent une poussée possible)? Je demande cela depuis que dans Git Push and Desgit sont 2 (très) différentes choses. Merci d'avance! Edit: Pour les engagements, au lieu de [Hooks] Changegroup = ..., je change de groupe de changements en "commit"?


Oui. L'utilisation peut utiliser le crochet de validation pour cela. Pour simuler une poussée, créez simplement un clone local dans le système de fichiers et poussez à partir de ce repo: clone HG / chemin / à / votre / repo; CD Repo; vim foo; HG COMMT -M "BLA"; hg push / chemin / à / votre / repo


Le concept de "poussée" est la même chose dans GIT et HG. (Pareil avec commit.)


@James Comment pouvons-nous authentifier pour une telle méthode?


Vous pouvez ajouter des informations d'identification à l'appel à curl comme curl -user Youruser: Yourpassword --Silent http: // ...



0
votes

Pour déclencher Jenkins construit lorsque vous appuyez sur un référentiel mercurial sur Bitbucket, vous pouvez aller à l'administration (cliquez sur la roue de cog) pour votre référentiel et choisissez Services. Là, vous pouvez définir un service Jenkins avec quatre paramètres:

  1. Point de terminaison: l'URL du serveur Jenkins.
    • Pour un serveur Jenkins sécurisé, vous devez spécifier un nom d'utilisateur et un jeton API. Le jeton API est généré par Jenkins pour l'utilisateur spécifique, sur la page "Gérer les utilisateurs" / "Configurer".
    • Nom du module: Paramètre facultatif, pour déclencher la construction de manière sélective selon ce qui a été poussé
    • Nom du projet: Nom du travail Jenkins
    • jeton: paramètre facultatif, identique au jeton d'authentification défini sur le travail Jenkins lorsque vous sélectionnez "Construction de la gâchette à distance (par exemple, des scripts)"

      (Je suppose que ce n'est qu'une affaire d'interface graphique de définir un "Changegroup Hook" comme mentionné James dans sa réponse à partir du 7 novembre 2012.)


0 commentaires