ma tâche est de collecter les détails des nœuds et de les lister au format certail. J'ai besoin d'écrire des données dans un fichier et de l'enregistrer en tant que fichier csv et de le joindre sous forme d'artefacts . Mais je ne suis pas en mesure de créer un fichier à l'aide de scripts groovy dans les jenkins à l'aide du plug-in "Execute System Groovy" comme étape de construction
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()
Sortie obtenue
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)
Quelque temps je vois des gens utiliser un objet "manager", comment puis-je y avoir accès? Avez-vous des idées sur la manière d'accomplir cette tâche?
Problème Le script système Groovy est toujours exécuté dans le nœud maître jenkins, tandis que l'espace de travail correspond au chemin d'accès au fichier dans votre nœud esclave jenkins, qui n'existe pas dans votre nœud maître.
Vous pouvez vérifier par le code
theDir = new File(envVars.get('WORKSPACE'))
println theDir.exists()
Il retournera false
Si vous n'utilisez pas de noeud esclave, il retournera true
Solution Comme nous ne pouvons pas utiliser File
normal, nous devons utiliser FilePath
http://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
}
Ensuite, cela fonctionne dans les deux cas.
Réponse de @Larry Cai couvre une partie pour écrire un fichier sur le nœud esclave à partir de System Groovy Script (car il s'exécute sur le nœud principal).
La partie à laquelle je réponds est "Certaines fois, je vois des gens utiliser un objet" manager ". Comment puis-je y accéder" .__ Etat de la construction, nom d'affichage de la construction, etc.
Cité de https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Postbuild+Plugin :
"Le script groovy peut utiliser le gestionnaire de variables, qui fournit diverses méthodes pour décorer vos constructions Ces méthodes peuvent être classées en méthodes de liste blanche et en méthodes non de liste blanche."
Pour y accéder, on peut l'appeler directement dans le script groovy post-build. par exemple
manager.build.setDescription ("description personnalisée") manager.addShortText ("ajoutez votre message ici")
Toutes les méthodes disponibles sur les objets de gestionnaire sont documentées ici.
L'objet de gestionnaire n'est pas disponible selon la façon dont le groovy est appelé. par exemple. dans "exécuter le script groovy du système".
Vous pouvez trouver la classe BadgeManager dans l'API du plugin jenkins GroovyPostBuild à l'adresse suivante: https://javadoc.jenkins.io/plugin/groovy-postbuild/org/jvnet/hudson/plugins/groovypostbuild/GroovyPostbuildBroge_Recorder .lang.String-
REPONSE: Importez le plugin GroovyPostBuild et créez un nouvel objet manager. par exemple. Ici, un travail avec "Execute System Groovy Script" crée un objet manager et appelle la méthode addShortText:
// Java.lang.Object
// org.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildRecorder.BadgeManager
// Constructor and Description
// BadgeManager(hudson.model.Run<?,?> build, hudson.model.TaskListener listener, hudson.model.Result scriptFailureResult)
import hudson.model.*
import org.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildAction
def build = Thread.currentThread().executable
manager = new org.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildRecorder.BadgeManager(build, null, null)
manager.addShortText("MANAGER TEST", "black", "limegreen", "0px", "white")
Cette question donne un indice: Voir ici pour une réponse presque opérationnelle: Dans le travail jenkins, créer un fichier en utilisant le système groovy dans l’espace de travail actuelorg.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildAction
et build.getActions().add(GroovyPostbuildAction.createShortText(text, "black", "limegreen", "0px", "white"));
Je soupçonne que l'erreur a été causée par le format du chemin, pourriez-vous essayer ci-dessous:
changement
filename = envVars.get('WORKSPACE') + "\\node_details.txt";
à
filename = envVars.get('WORKSPACE') + "/node_details.txt";
Parce que quand j'ai essayé sur mon serveur local Jenkins, je le fais exécuter avec succès.