Чтение файла из рабочего пространства в Jenkins с помощью Groovy script

Я хочу добавить шаг сборки с плагином Groovy, чтобы прочитать файл и вызвать сбой сборки в зависимости от содержимого файла.

Как я могу вставить путь к файлу рабочей области в плагин 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"
}

Ответ 1

Основываясь на ваших комментариях, вам будет лучше с плагином Text-finder.

Он позволяет искать файлы (и), а также консоль, для регулярного выражения, а затем устанавливать сборку как unstable и failed если она найдена.

Что касается Groovy, вы можете использовать следующее для доступа к переменной окружения ${WORKSPACE}:
def workspace = manager.build.getEnvVars()["WORKSPACE"]

Ответ 2

Я понимаю, что этот вопрос касался создания плагина, но поскольку новый Jenkins 2 Pipeline builds использует Groovy, я нашел себя здесь, пытаясь понять, как читать файл из рабочей области в сборке Pipeline. Поэтому, возможно, я смогу помочь кому-то вроде меня в будущем.

Оказывается очень легко, существует readfile, и мне нужно иметь rtfm:

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

Ответ 4

Если у вас уже установлен плагин Groovy (Postbuild), я думаю, что это действительное желание сделать это с помощью (generic) Groovy вместо установки (специализированного) плагина.

Тем не менее, вы можете получить рабочую область, используя manager.build.workspace.getRemote(). Не забудьте добавить File.separator между именем пути и файлом.

Ответ 5

Как упоминалось в другом сообщении Read.txt файла из рабочего файла groovy script в Jenkins, я изо всех сил пытался заставить его работать для модулей pom для файла в рабочей области в расширенном параметре выбора. Вот мое решение с 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
}