web-dev-qa-db-fra.com

Lecture de fichiers à partir de Workspace dans Jenkins avec script Groovy

Je souhaite ajouter une étape de construction avec le plug-in Groovy pour lire un fichier et déclencher un échec de la construction en fonction du contenu du fichier.

Comment puis-je injecter le chemin du fichier d'espace de travail dans le plugin groovy?

myFileDirectory = // Get workspace filepath here ???
myFileName = "output.log"
myFile = new File(myFileDirectory + myFileName)

lastLine = myFile.readLines().get(myFile.readLines().size().toInteger() - 1)
if (lastLine ==~ /.Fatal Error.*/ ){
    println "Fatal error found"
    System.exit(1)
} else{
   println "nothing to see here"
}
17
Sergio Couture

Je me suis rendu compte que cette question concernait la création d'un plug-in, mais comme les nouvelles versions du pipeline Jenkins 2 utilisent Groovy, je me suis retrouvé ici tout en essayant de comprendre comment lire un fichier à partir d'un espace de travail dans une version Pipeline. Alors peut-être que je peux aider quelqu'un comme moi dans le futur.

Il s'avère que c'est très facile, il y a un readfile step, et j'aurais dû rtfm:

env.WORKSPACE = pwd()
def version = readFile "${env.WORKSPACE}/version.txt"
36
thaddeusmt

Si vous essayez de lire un fichier à partir de l'espace de travail au cours d'une étape de création d'un pipeline, il existe une méthode pour cela:

readFile('name-of-file.groovy')

Pour référence, voir https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#readfile-read-file-from-workspace .

8
birdamongmen

Si vous avez déjà installé le plugin Groovy (Postbuild), je pense que votre souhait est valable de le faire avec Groovy (générique) au lieu d'installer un plugin (spécialisé).

Cela dit, vous pouvez obtenir l’espace de travail à l’aide de manager.build.workspace.getRemote(). N'oubliez pas d'ajouter File.separator entre le chemin et le nom du fichier.

0
sschuberth

Comme mentionné dans un autre article Lisez le fichier .txt à partir du script groovy de l’espace de travail dans Jenkins Je luttais pour le faire fonctionner pour les modules pom d’un fichier dans l’espace de travail, dans le paramètre Extended Choice. Voici ma solution avec les printlns:

import groovy.util.XmlSlurper
import Java.util.Map
import jenkins.*
import jenkins.model.*
import hudson.*
import hudson.model.*    

try{
//get Jenkins instance
    def jenkins = Jenkins.instance
//get job Item
    def item = jenkins.getItemByFullName("The_JOB_NAME")
    println item
// get workspacePath for the job Item
    def workspacePath = jenkins.getWorkspaceFor (item)
    println workspacePath

    def file = new File(workspacePath.toString()+"\\pom.xml")
    def pomFile = new XmlSlurper().parse(file)
    def pomModules = pomFile.modules.children().join(",")
    return pomModules
} catch (Exception ex){
    println ex.message
}
0
coz