2015-06-02 12 views
16

moim zadaniem jest zbieranie szczegółów węzła i wyświetlanie ich w formacie certyfikatu. Muszę zapisać dane w pliku i zapisać go jako plik csv i dołączyć go jako artefakty. ale nie jestem w stanie utworzyć plik przy użyciu skryptów odjechane w Jenkinsa z wykorzystaniem wtyczki „Wykonanie systemu Groovy” jako build krokuW pracy jenkins, utwórz plik za pomocą systemu groovy w bieżącym obszarze roboczym

import jenkins.model.Jenkins 
import hudson.model.User 
import hudson.security.Permission 
import hudson.EnvVars 

EnvVars envVars = build.getEnvironment(listener); 

filename = envVars.get('WORKSPACE') + "\\node_details.txt"; 
//filename = "${manager.build.workspace.remote}" + "\\node_details.txt" 
targetFile = new File(filename); 
println "attempting to create file: $targetFile" 

if (targetFile.createNewFile()) { 
    println "Successfully created file $targetFile" 
} else { 
    println "Failed to create file $targetFile" 
} 
print "Deleting ${targetFile.getAbsolutePath()} : " 
println targetFile.delete() 

wyjściowe uzyskane

attempting to create file: /home/jenkins/server-name/workspace/GET_NODE_DETAILS\node_details.txt 
FATAL: No such file or directory 
java.io.IOException: No such file or directory 
    at java.io.UnixFileSystem.createFileExclusively(Native Method) 
    at java.io.File.createNewFile(File.java:947) 
    at java_io_File$createNewFile.call(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112) 
    at Script1.run(Script1.groovy:13) 
    at groovy.lang.GroovyShell.evaluate(GroovyShell.java:682) 
    at groovy.lang.GroovyShell.evaluate(GroovyShell.java:666) 
    at hudson.plugins.groovy.SystemGroovy.perform(SystemGroovy.java:81) 
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20) 
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:772) 
    at hudson.model.Build$BuildExecution.build(Build.java:199) 
    at hudson.model.Build$BuildExecution.doRun(Build.java:160) 
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:535) 
    at hudson.model.Run.execute(Run.java:1732) 
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43) 
    at hudson.model.ResourceController.execute(ResourceController.java:88) 
    at hudson.model.Executor.run(Executor.java:234) 

Jakiś czas widzę ludzi używa „menedżera "obiekt, jak mogę uzyskać do niego dostęp? Alos wszelkie pomysły, jak wykonać zadanie?

Odpowiedz

31

Problem skrypt System Groovy jest zawsze uruchamiane w węźle nadrzędnym Jenkins, podczas gdy obszar roboczy jest ścieżka do pliku w jenkins węzła podrzędnego, który nie istnieje w swojego mistrza węzeł.

można sprawdzić kodem

theDir = new File(envVars.get('WORKSPACE')) 
println theDir.exists() 

Powróci false

Jeśli nie używać węzeł podrzędny, zwróci true

rozwiązanie jak nie możemy użyj normalnego File, musimy użyć FilePathhttp://javadoc.jenkins-ci.org/hudson/FilePath.html

if(build.workspace.isRemote()) 
{ 
    channel = build.workspace.channel; 
    fp = new FilePath(channel, build.workspace.toString() + "/node_details.txt") 
} else { 
    fp = new FilePath(new File(build.workspace.toString() + "/node_details.txt")) 
} 

if(fp != null) 
{ 
    fp.write("test data", null); //writing to file 
} 

Następnie działa w obu przypadkach.

+4

Prostsza wersja tworzenia obiektu 'fp':' fp = new FilePath (build.workspace, 'node_details.txt') '. Sprawdzenie warunkowe jest zbędne, ponieważ spowoduje również usunięcie mistrza. – ceilfors

0

Podejrzewam, że błąd został spowodowany przez format ścieżki, można spróbować poniżej:

zmiana

filename = envVars.get('WORKSPACE') + "\\node_details.txt"; 

do

filename = envVars.get('WORKSPACE') + "/node_details.txt"; 

Bo kiedy próbowałem w moim serwerze lokalne Jenkins Zrobiłem to pomyślnie.

enter image description here

enter image description here

+0

próbowałem różnych formatów ukośnymi ja wciąż dostać java.io.IOException: nie ma takiego pliku lub wytycznej tory – bicepjai

+0

Mogę uruchomić z katalogu domowego Jenkinsa, ale nie obszaru roboczego pracy, używam systemu groovy opcji. Może to dlatego ? Jak mogę uruchomić w obszarze roboczym pracy przy użyciu opcji Groovy systemu? to wygląda na coś, co wymaga naprawy. – bicepjai

0

Odpowiedz przez @Larry Cai obejmuje jedną część, aby napisać plik do węzła slave z System Groovy Script (jak działa na Master Node).

Częścią, na którą odpowiadam, jest "Jakiś czas, kiedy widzę, że ludzie używają obiektu" menedżera ", w jaki sposób mogę uzyskać do niego dostęp" Jest to obiekt już dostępny w Post Build Groovy Script do uzyskiwania dostępu do wielu rzeczy, takich jak środowisko zmienne, Stan budowy Budowanie Wyświetlana nazwa itp

cytat z https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Postbuild+Plugin.

„Groovy skrypt można użyć zmiennej menedżera, który przewiduje różne sposoby dekorowania buduje metody te można podzielić na białej liście metody i metody, które nie są dodawane do białej listy."

Aby uzyskać do niego dostęp, możemy nazwać to bezpośrednio na stanowisku budować groovy skrypt. Np

manager.build.setDescription (" opis zwyczaj ") manager.addShortText (" dodaj swoją wiadomość tutaj ") ..

Wszystkie metody dostępne na obiektach menedżera są udokumentowane tutaj

https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Postbuild+Plugin#GroovyPostbuildPlugin-Whitelistedmethods

Powiązane problemy