Чтение файла из рабочего пространства в 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"
Ответ 3
Если вы пытаетесь прочитать файл из рабочей области во время этапа построения конвейера, есть способ для этого:
readFile('name-of-file.groovy')
Для справки см. Https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#readfile-read-file-from-workspace.
Ответ 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
}