我想使用Groovy插件添加一个Build步骤来读取文件,并根据文件内容触发构建失败。
如何在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"
}
答案 0 :(得分:41)
我意识到这个问题是关于创建一个插件,但是由于新的Jenkins 2 Pipeline构建使用Groovy,我发现自己在尝试弄清楚如何从Pipeline构建中的工作空间读取文件。所以也许我可以在将来帮助像我这样的人。
事实证明这很简单,有一个readfile步骤,我应该有rtfm:
env.WORKSPACE = pwd()
def version = readFile "${env.WORKSPACE}/version.txt"
答案 1 :(得分:10)
如果您在管道构建步骤期间尝试从工作区读取文件,则有一种方法:
readFile('name-of-file.groovy')
供参考,请参阅https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#readfile-read-file-from-workspace。
答案 2 :(得分:6)
根据您的评论,您最好使用 Text-finder 插件。
它允许搜索正则表达式的文件和控制台,然后设置构建unstable
或failed
(如果找到)。
对于Groovy,您可以使用以下方法访问${WORKSPACE}
环境变量:
def workspace = manager.build.getEnvVars()["WORKSPACE"]
答案 3 :(得分:1)
尽管此问题仅与查找目录路径($ WORKSPACE)有关,但是我需要从工作空间读取文件并将其解析为JSON对象,以读取声纳问题(忽略次要/注释)问题)
可能会帮助某人,这就是我的做法- 来自readFile
jsonParse(readFile('xyz.json'))
和jsonParse方法-
@NonCPS
def jsonParse(text) {
return new groovy.json.JsonSlurperClassic().parseText(text);
}
这还需要ManageJenkins->进程内脚本批准中的脚本批准
答案 4 :(得分:0)
如果您已经安装了Groovy(Postbuild)插件,我认为通过(通用)Groovy完成此操作而不是安装(专用)插件是一种有效的愿望。
也就是说,您可以使用manager.build.workspace.getRemote()
获取工作区。不要忘记在路径和文件名之间添加File.separator
。
答案 5 :(得分:0)
如另一篇Read .txt file from workspace groovy script in 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
}
答案 6 :(得分:0)
如果某人有相同的要求,可能会对他们有帮助。
这将读取一个包含Jenkins作业名称的文件,并从一个作业中迭代地运行它们。
请在您的Jenkins中相应地更改以下代码。
pipeline {
agent any
stages {
stage('Hello') {
steps {
script{
git branch: 'Your Branch name', credentialsId: 'Your crendiatails', url: ' Your BitBucket Repo URL '
##To read file from workspace which will contain the Jenkins Job Name ###
def filePath = readFile "${WORKSPACE}/ Your File Location"
##To read file line by line ###
def lines = filePath.readLines()
##To iterate and run Jenkins Jobs one by one ####
for (line in lines) {
build(job: "$line/branchName",
parameters:
[string(name: 'vertical', value: "${params.vertical}"),
string(name: 'environment', value: "${params.environment}"),
string(name: 'branch', value: "${params.aerdevops_branch}"),
string(name: 'project', value: "${params.host_project}")
]
)
}
}
}
}
}
}