it-swarm.com.de

Datei aus Workspace in Jenkins mit Groovy-Skript lesen

Ich möchte einen Build-Schritt mit dem Groovy-Plugin hinzufügen, um eine Datei zu lesen und einen Build-Fehler auszulösen, abhängig vom Inhalt der Datei.

Wie kann ich den Workspace-Dateipfad in das groovige Plugin einfügen?

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

Basierend auf Ihren Kommentaren sind Sie mit dem Text-Finder Plugin besser dran.

Es erlaubt, Dateien und Konsolen nach regulären Ausdrücken zu durchsuchen und dann den Build entweder auf unstable oder failed zu setzen, falls er gefunden wird.

Beim Groovy können Sie auf die Umgebungsvariable ${WORKSPACE} Folgendermaßen zugreifen:
def workspace = manager.build.getEnvVars()["WORKSPACE"]

7
Slav

Mir ist klar, dass es sich bei dieser Frage um das Erstellen eines Plugins handelte, aber da die neuen Jenkins 2 Pipeline-Builds Groovy verwenden, befand ich mich hier und versuchte herauszufinden, wie eine Datei aus einem Arbeitsbereich in einem Pipeline-Build gelesen wird. Vielleicht kann ich in Zukunft jemandem wie mir helfen.

Es stellt sich heraus, dass es sehr einfach ist, es gibt einen readfile -Pfad, und ich sollte rtfm haben:

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

Wenn Sie versuchen, während eines Pipeline-Buildschritts eine Datei aus dem Arbeitsbereich zu lesen, gibt es dafür eine Methode:

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

Weitere Informationen finden Sie unter https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#readfile-read-file-from-workspace .

8
birdamongmen

Wenn Sie bereits das Groovy (Postbuild) -Plugin installiert haben, ist es meiner Meinung nach ein berechtigter Wunsch, dies mit (generischem) Groovy zu erledigen, anstatt ein (spezialisiertes) Plugin zu installieren.

Sie können den Arbeitsbereich jedoch mit manager.build.workspace.getRemote() abrufen. Vergessen Sie nicht, File.separator zwischen Pfad und Dateiname hinzuzufügen.

0
sschuberth

Wie in einem anderen Post Read .txt-Datei aus dem groovigen Workspace-Skript in Jenkins erwähnt Ich hatte Mühe, es für die Pom-Module für eine Datei im Arbeitsbereich im Extended-Parameter. Hier ist meine Lösung mit den 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