Wie kann ich Jenkins dazu bringen, ein Skript auszuführen, das von Git abgerufen wurde?


12

Ich verwende Jenkins, um eine Reihe von Importaufträgen auszulösen und zu verwalten. Ich möchte mein Importskript in Github ablegen, und wenn Jenkins den Job erstellt, sollte es (a) dieses versionierte Skript aus Github ziehen und (b) das Skript ausführen.

Das Problem, auf das ich stoße, ist, dass ich nicht weiß, wie ich auf den Namen des Skripts verweisen soll, das innerhalb des Jobs ausgeführt werden soll. Ich gehe davon aus, dass der Quellcode in das Arbeitsbereichsverzeichnis gezogen wird. Ist diese Annahme richtig? (Wenn es nur Dokumentation gäbe!)

Folgendes habe ich bisher getan:

  1. Installierte Jenkins (offensichtlich) auf meinem Windows Server (nein, ich hatte keine Wahl)
  2. Erstellt ein Repository in meinem Github-Konto und fügt meinen Code ein
    • Es ist öffentlich unter https://github.com/mcholl/SARS-Import/
    • Sie werden sehen, dass ich zwei Skripte habe, roottest.py und omniture-video \ test.py. Der Code dort ist von Apple patentiert, da bin ich mir sicher :)
    • Die Idee ist, dass ich roottest.py ausführen möchte
  3. Installierte das Github-Plugin
  4. Erstellt einen Job wie folgt:
  5. Führen Sie den Job manuell aus

Was ich jedoch erhalte, ist eine Fehlermeldung, dass die Datei nicht gefunden werden kann. Dies ist seltsam, da ich davon ausgehe, dass der Workflow "eine lokale Kopie der Quelle in das Verzeichnis ... (Job) / workspace / ziehen und dann den Stapelbefehl im Kontext des Arbeitsbereichsverzeichnisses ausführen würde.

Hier ist die vollständige Konsolenausgabe:

Vom anonymen Benutzer gestartet Erstellen im Arbeitsbereich C: \ Programme (x86) \ Jenkins \ jobs \ Testen der Github-Integration \ Arbeitsbereich [Arbeitsbereich] $ cmd / c Rufen Sie C: \ Windows \ TEMP \ hudson1966342425043540895.bat auf

C: \ Programme (x86) \ Jenkins \ jobs \ Testen der Github-Integration \ Arbeitsbereich> Python roottest.py Python: Datei 'roottest.py' kann nicht geöffnet werden: [Errno 2] Keine solche Datei oder kein solches Verzeichnis

C: \ Programme (x86) \ Jenkins \ jobs \ Testen der Github-Integration \ Arbeitsbereich> Beenden 2 Erstellungsschritt 'Windows-Batch-Befehl ausführen' markiert Build als Fehler Abgeschlossen: FEHLER

Offensichtlich hatte ich erwartet, nur die Ergebnisse meiner Druckanweisung in der Konsole zu sehen.

Was habe ich vermasselt? Und warum ist mein Skript nicht schon da?


Sehen wir uns den Code von C: \ Windows \ TEMP \ hudson1966342425043540895.bat an. Verwenden Sie Git Pull?

Jenkins erstellt es automatisch und löscht es dann. Sie können jedoch den vollständigen Inhalt in der Konsolenausgabe sehen - es ist der Befehl "python roottest.py", auf den ich oben
verwiesen habe

roottest.py ist nicht in deinem Weg. Sehen Sie die Datei im Arbeitsbereichsverzeichnis oder wird sie auch automatisch gelöscht? Wenn Sie git pull ausführen, müssen Sie sich in der lokalen Kopie des geklonten Repositorys befinden. Ich glaube, es sollte dann alle neuen Änderungen in das lokale Repo ziehen. Es ist schwer, Ihnen zu helfen, wenn ich keinen der tatsächlich ausgeführten Befehle sehen kann.

Haben Sie diese Anweisungen für das Github-Plugin wiki.jenkins-ci.org/display/JENKINS/Git+Plugin#GitPlugin- befolgt ? Haben Sie die Umgebungsvariable GIT_HOME usw. festgelegt?

D'oh! Ein Grund mehr, Fenster zu hassen. Vielen Dank - ich denke, das könnte das Problem sein
Affable Geek

Antworten:


5

Für meinen Build (auf einem Linux-Host) führe ich Folgendes aus (als Build-Schritt in Jenkins), um ein Build-Skript aus dem frisch ausgecheckten Arbeitsbereich heraus auszuführen:

Shell-Befehl ausführen:

 sh -x $WORKSPACE/build/myproject.build

Ich gehe davon aus, dass es unter Windows ähnlich funktionieren würde, außer natürlich, dass Sie \ anstelle von / verwenden und Python anstelle von sh verwenden, um Ihr Skript auszuführen.


2

Sie können zwei Zeilen in Ihren Build schreiben:

chmod 777 ./my_script.sh
./my_script.sh

1
Weltschreibberechtigungen sind möglicherweise nicht die beste Idee! Warum nicht 755 (Besitzer schreiben, alle anderen lesen / ausführen.
kmarsh

777 ist zwar nicht die beste Idee, aber diese Antwort hat mir tatsächlich geholfen.
Robin Dijkhof

0

Sie könnten ein Skript in Git speichern, z. B. test.sh:

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

Fügen Sie dann in der Eingabe "Shell ausführen" den Import dieses Skripts ein und rufen Sie "_test_func" auf:

source test.sh
_test_func

Ergebnis:

 + source test.sh
 + _test_func
 test
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.