Jak sprawić, aby Jenkins wykonał skrypt pobrany z Git?

12

Używam Jenkinsa do uruchamiania i zarządzania serią zadań importowania. Chcę umieścić mój skrypt importu w Github, a kiedy Jenkins buduje zadanie, powinien (a) wyciągnąć skrypt Github z kontrolą wersji i (b) uruchomić skrypt.

Problem, na który napotykam, polega na tym, że nie wiem, jak odwoływać się do nazwy skryptu, który ma zostać uruchomiony w zadaniu. Zakładam, że kod źródłowy jest wciągany do katalogu obszaru roboczego. Czy to założenie jest prawidłowe? (Gdyby tylko była dokumentacja!)

Oto co dotychczas zrobiłem:

  1. Zainstalowałem Jenkinsa (oczywiście) na moim systemie Windows Server (nie, nie miałem wyboru)
  2. Utworzyłem repozytorium na moim koncie github i umieściłem w nim mój kod
    • Jest publiczny na https://github.com/mcholl/SARS-Import/
    • Zobaczysz, że mam dwa skrypty: roottest.py i omniture-video \ test.py. Kod tam jest opatentowany przez Apple, jestem pewien :)
    • Chodzi o to, że chciałbym uruchomić roottest.py
  3. Zainstalowano wtyczkę Github
  4. Utworzono zadanie w następujący sposób:
  5. Wykonaj ręcznie zadanie

Dostaję jednak komunikat o błędzie, że pliku nie można zlokalizować. Jest to dziwne, ponieważ zakładam, że przepływ pracy „pociągnąłby lokalną kopię źródła do katalogu ... (Job) / workspace /, a następnie uruchom polecenie wsadowe w kontekście katalogu obszaru roboczego.

Oto pełne wyjście konsoli:

Rozpoczęty przez użytkownika anonimowy Budowanie w obszarze roboczym C: \ Program Files (x86) \ Jenkins \ jobs \ Testing Github Integration \ workspace [workspace] $ cmd / c call C: \ Windows \ TEMP \ hudson1966342425043540895.bat

C: \ Program Files (x86) \ Jenkins \ jobs \ Testing Github Integration \ workspace> python roottest.py python: nie można otworzyć pliku „roottest.py”: [Errno 2] Brak takiego pliku lub katalogu

C: \ Program Files (x86) \ Jenkins \ jobs \ Testing Github Integration \ workspace> exit 2 Krok kompilacji „Wykonaj polecenie wsadowe systemu Windows” oznaczono kompilację jako niepowodzenie Zakończone: AWARIA

Oczywiście spodziewałem się zobaczyć wyniki mojej instrukcji drukowania w konsoli.

Co zepsułem? I dlaczego mojego skryptu już nie ma?

Affable Geek
źródło
Pozwala zobaczyć kod z C: \ Windows \ TEMP \ hudson1966342425043540895.bat używasz git pull?
Jenkins automatycznie tworzy, a następnie usuwa. Możesz zobaczyć pełną zawartość w wynikach konsoli - jest to jednak polecenie „python roottest.py”, o którym wspomniałem powyżej
Affable Geek
roottest.py nie znajduje się na twojej ścieżce. Czy widzisz ten plik w katalogu obszaru roboczego, czy też jest on automatycznie usuwany? Kiedy uruchamiasz git pull, musisz znajdować się w lokalnej kopii sklonowanego repozytorium, wierzę, że powinien on wtedy wyciągać wszelkie nowe zmiany w lokalnym repozytorium. Trudno jest ci pomóc, gdy nie widzę żadnych uruchomionych poleceń.
Czy postępujesz zgodnie z tymi instrukcjami dla wtyczki github wiki.jenkins-ci.org/display/JENKINS/Git+Plugin#GitPlugin- ? Czy ustawiłeś zmienną środowiskową GIT_HOME itp.?
Nie! Jeszcze jeden powód do nienawiści okien. Dziękuję - myślę, że może to być problem
Affable Geek

Odpowiedzi:

5

W przypadku mojej kompilacji (na hoście Linux) robię coś takiego (jako krok kompilacji w Jenkins), aby wykonać skrypt kompilacji ze świeżo sprawdzonego obszaru roboczego:

Wykonaj polecenie powłoki:

 sh -x $WORKSPACE/build/myproject.build

Zakładam, że działałoby to podobnie w systemie Windows, z tym wyjątkiem, że użyłbyś \ zamiast / i używasz Pythona zamiast sh do wykonania skryptu.

eric.green
źródło
2

Możesz napisać dwa wiersze w swojej kompilacji:

chmod 777 ./my_script.sh
./my_script.sh
Andrs Zam
źródło
1
Światowe uprawnienia do zapisu mogą nie być najlepszym pomysłem! Dlaczego nie 755 (właściciel pisze, wszyscy inni czytają / wykonują.
kmarsh
777 rzeczywiście nie jest najlepszym pomysłem, ale ta odpowiedź naprawdę mi pomogła.
Robin Dijkhof,
0

Możesz zapisać jakiś skrypt w Git, np. Test.sh:

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

Następnie w danych wejściowych „Wykonaj powłokę” umieść import tego skryptu i wywołaj „_test_func”:

source test.sh
_test_func

Wynik:

 + source test.sh
 + _test_func
 test
Raf
źródło