Comment puis-je demander à Jenkins d'exécuter un script qu'il a extrait de Git?

12

J'utilise Jenkins pour déclencher et gérer une série de travaux d'importation. Je veux mettre mon script d'importation dans Github, et lorsque Jenkins construit le travail, il doit (a) extraire ce script contrôlé par version de Github et (b) exécuter le script.

Le problème que je rencontre est que je ne sais pas comment référencer le nom du script à exécuter dans le travail. Je suppose que le code source est tiré dans le répertoire de l'espace de travail. Cette hypothèse est-elle correcte? (Si seulement il y avait de la documentation!)

Voici ce que j'ai fait jusqu'à présent:

  1. J'ai installé Jenkins (évidemment) sur mon serveur Windows (non, je n'avais pas le choix)
  2. J'ai créé un référentiel sur mon compte github et y ai mis mon code
    • C'est public sur https://github.com/mcholl/SARS-Import/
    • Vous verrez que j'ai deux scripts, roottest.py et omniture-video \ test.py. Le code est sous brevet par Apple, j'en suis sûr :)
    • L'idée est que je voudrais exécuter roottest.py
  3. Installé le plugin Github
  4. Créé un travail comme suit:
  5. Exécuter manuellement le travail

Ce que j'obtiens, cependant, est un message d'erreur indiquant que le fichier ne peut pas être localisé. C'est étrange, car je suppose que le flux de travail serait de "tirer une copie locale de la source vers le répertoire ... (Job) / workspace /, puis d'exécuter la commande batch dans le contexte du répertoire de l'espace de travail.

Voici la sortie console complète:

Démarré par l'utilisateur anonyme Construction dans l'espace de travail C: \ Program Files (x86) \ Jenkins \ jobs \ Test de l'intégration Github \ workspace [espace de travail] $ cmd / c appel C: \ Windows \ TEMP \ hudson1966342425043540895.bat

C: \ Program Files (x86) \ Jenkins \ jobs \ Test de l'intégration Github \ workspace> python roottest.py python: impossible d'ouvrir le fichier 'roottest.py': [Errno 2] Aucun fichier ou répertoire de ce type

C: \ Program Files (x86) \ Jenkins \ jobs \ Testing Github Integration \ workspace> exit 2 Étape de build 'Execute Windows batch command' marquée build comme échec Terminé: ÉCHEC

Évidemment, je m'attendais à voir les résultats de ma déclaration d'impression dans la console.

Qu'est-ce que j'ai gâché? Et pourquoi mon script n'est-il pas déjà là?

Affable Geek
la source
Permet de voir le code de C: \ Windows \ TEMP \ hudson1966342425043540895.bat utilisez-vous git pull?
Jenkins le crée puis le supprime automatiquement. Vous pouvez voir le contenu complet dans la sortie de la console, cependant - c'est la commande "python roottest.py" que j'ai référencée ci
Affable Geek
roottest.py n'est pas sur votre chemin. Voyez-vous le fichier dans le répertoire de l'espace de travail ou est-il également supprimé automatiquement? Lorsque vous exécutez git pull, vous devez être dans la copie locale du référentiel cloné, je crois, il devrait ensuite insérer toutes les nouvelles modifications dans le référentiel local. Il est difficile de vous aider lorsque je ne vois aucune commande réellement exécutée.
Avez-vous suivi ces instructions pour le plugin github wiki.jenkins-ci.org/display/JENKINS/Git+Plugin#GitPlugin- ? Avez-vous défini la variable d'environnement GIT_HOME, etc.?
Oh! Une raison de plus de détester les fenêtres. Merci - je pense que cela peut être le problème
Affable Geek

Réponses:

5

Pour ma build (sur un hôte Linux), je fais quelque chose comme ça (comme une étape de build dans Jenkins) pour exécuter un script de build à partir de l'espace de travail fraîchement extrait:

Exécuter la commande shell:

 sh -x $WORKSPACE/build/myproject.build

Je suppose que cela fonctionnerait de la même manière sous Windows, sauf bien sûr que vous utiliseriez \ plutôt que / et vous utilisez python plutôt que sh pour exécuter votre script.

eric.green
la source
2

Vous pouvez écrire deux lignes dans votre build:

chmod 777 ./my_script.sh
./my_script.sh
Andrs Zam
la source
1
Les autorisations d'écriture dans le monde ne sont peut-être pas la meilleure idée! Pourquoi pas 755 (le propriétaire écrit, tout le monde lit / exécute.
kmarsh
777 n'est en effet pas la meilleure idée, mais cette réponse m'a réellement aidé.
Robin Dijkhof
0

Vous pouvez stocker un script dans Git, par exemple test.sh:

#!/bin/bash
_test_func(){ 
 echo 'test'
}

Ensuite, dans l'entrée "Execute shell", placez l'importation de ce script et appelez "_test_func":

source test.sh
_test_func

Résultat:

 + source test.sh
 + _test_func
 test
Raf
la source