2014-05-13 9 views
6

Mam pytanie bardzo podobny do tego: Reading file from Workspace in Jenkins with Groovy scriptCzytaj plik Jenkins roboczej z systemem porywające skryptu

Jednak muszę odczytać pliku ze skryptu systemu Groovy więc rozwiązanie z użyciem Text-Finder lub Groovy PostBuild wtyczka nie działa.

Jak uzyskać ścieżkę obszaru roboczego ze skryptu groovy? Próbowałem następujące:

System.getenv('WORKSPACE') 
System.getProperty("WORKSPACE") 
build.buildVariableResolver.resolve("WORKSPACE") 

Dzięki!

Odpowiedz

8

Każda kompilacja ma obszar roboczy , więc musisz najpierw znaleźć żądany projekt. (Określenia „pracy” i „projekt” służą raczej wymienne w Jenkins. - również w API)

Po tym, można skrzyżować palce i po prostu zadzwoń getWorkspace(), która jest nieaktualna (patrz JavaDoc szczegóły) .

Albo można znaleźć konkretne build (na przykład ostatnią), co może dać Ci roboczy używany do tej konkretnej budowy metodą getWorkspace() jak to jest zdefiniowane w klasie AbstractBuild.

Przykładowy kod:

Jenkins.instance.getJob('<job-name>').lastBuild.workspace; 
7

Jeśli masz plik o nazwie „a.txt” w roboczej wraz ze skryptu o nazwie „sysgvy.groovy”, że chcesz wykonać jako system porywające scenariusz. Załóżmy, że twój skrypt "sysgvy.groovy" musi odczytać plik "a.txt".

Problem w tym temacie polega na tym, że jeśli twój skrypt czyta "a.txt" bezpośrednio, nie podając żadnej ścieżki, "sysgvy.groovy" wykona i wyświetli błąd mówiąc, że nie może znaleźć "a.txt".

Testowałem i stwierdziłem, że następująca metoda działa dobrze.

def build = Thread.currentThread().executable 

Następnie użyj

build.workspace.toString()+"\\a.txt" 

jako pełnej lokalizacji ciąg zastąpić "a.txt".

Ważne jest również, aby uruchomić na maszynie głównej Jenkins umieszczając "a.txt" i "sysgvy.groovy" na obszarze roboczym maszyny głównej Jenkins. Wykonywanie na komputerze slave nie działa.

Spróbuj, plik powinien zostać znaleziony i odczytany w skrypcie bez żadnego problemu.

Jeśli występuje problem ze zmienną Wątek, to tylko niektóre moduły muszą zostać zaimportowane. Więc dodaj te linie na początku kodu:

import jenkins.* 
import jenkins.model.* 
import hudson.* 
import hudson.model.* 
+0

filename = build.workspace.toString() + "/ a.txt"; myFile = new Plik (nazwa pliku); data = myFile.readLines(); dane println; – gaoithe

+0

groovy.lang.MissingPropertyException: Brak takiej właściwości: wykonywalny dla klasy: java.lang.Thread – saikosen