2015-06-02 16 views
16

il mio compito è raccogliere i dettagli del nodo ed elencarli in formato certail. Ho bisogno di scrivere dati su un file e salvarlo come file csv e collegarlo come artefatti. ma io non sono in grado di creare un file utilizzando script Groovy nei Jenkins che utilizzano plug-in "Esegui Sistema Groovy", come costruire passoNel lavoro jenkins, creare il file utilizzando il sistema groovy nello spazio di lavoro corrente

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() 

uscita ottenuto

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) 

Qualche tempo vedo la gente usa "manager "oggetto, come posso accedervi? Hai qualche idea su come eseguire l'attività?

risposta

31

Problema sceneggiatura sistema Groovy viene sempre eseguito in nodo Jenkins padrone, mentre l'area di lavoro è il percorso del file nel vostro Jenkins nodo slave, che non esiste nel tuo padrone nodo.

È possibile verificare dal codice

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

Si tornerà false

Se non si utilizza nodo slave, tornerà true

Soluzione Come non possiamo utilizzare normale File, dobbiamo usare 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 
} 

Quindi funziona in entrambi i casi.

+4

Una versione più semplice della creazione dell'oggetto 'fp':' fp = new FilePath (build.workspace, 'node_details.txt') '. Il controllo condizionale non è necessario in quanto estrae anche il master. – ceilfors

0

Ho il sospetto che l'errore è stato causato dal formato del percorso, si potrebbe provare a seguito:

cambiamento

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

a

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

Perché quando ho provato nel mio server Jenkins locali, L'ho eseguito con successo.

enter image description here

enter image description here

+0

ho provato diversi formati oblique ho ancora ottenere java.io.IOException: No such file or Direc tory – bicepjai

+0

posso correre da home directory di jenkins ma non lo spazio di lavoro del lavoro, sto usando l'opzione groovy di sistema. potrebbe essere questo il motivo? come posso correre nello spazio di lavoro del lavoro usando l'opzione groovy di sistema? sembra una cosa che necessita di correzione – bicepjai

0

Risposta da @Larry Cai copre una parte per scrivere un file sul nodo slave da System Groovy Script (come viene eseguito su Nodo master).

La parte sto rispondendo è "Qualche tempo vedo la gente usa 'manager' oggetto, come posso ottenere l'accesso ad esso" Questo è l'oggetto già disponibile in Post costruire Groovy script per l'accesso a un sacco di cose come l'ambiente variabili, Stato generazione, costruire Nome visualizzato ecc

Citato da https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Postbuild+Plugin:.

"lo script Groovy può utilizzare il gestore variabile, che offre vari metodi per decorare la vostra costruisce Tali metodi possono essere classificati in whitelist metodi e metodi non inseriti nella whitelist."

Per accedervi, possiamo chiamare direttamente nel post costruire lo script Groovy. Es

manager.build.setDescription (" descrizione personalizzata ") manager.addShortText (" aggiungi il tuo messaggio qui ") ..

tutti i metodi disponibili su oggetti Manager sono documentati qui

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

Problemi correlati