我想使用 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"
}
我意识到这个问题是关于创建一个插件,但由于新的 Jenkins 2 Pipeline 构建使用 Groovy,我发现自己在这里尝试弄清楚如何从 Pipeline 构建中的工作区读取文件。所以也许我将来可以帮助像我这样的人。
事实证明这很简单,有一个readfile步骤,我应该有rtfm:
env.WORKSPACE = pwd()
def version = readFile "${env.WORKSPACE}/version.txt"
如果您尝试在管道构建步骤期间从工作区读取文件,有一个方法可以实现:
readFile('name-of-file.groovy')
有关参考,请参阅 https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#readfile-read-file-from-workspace。
根据您的评论,您最好使用 Text-finder 插件。
它允许搜索文件以及控制台中的正则表达式,然后设置构建
unstable
或 failed
(如果找到)。
对于 Groovy,您可以使用以下命令来访问
${WORKSPACE}
环境变量:def workspace = manager.build.getEnvVars()["WORKSPACE"]
请注意,在“执行系统 Groovy 脚本”步骤中,您可以直接使用
build.getEnvVars()
(也在沙盒脚本中)。例如:
def workspace = build.getEnvVars()["WORKSPACE"]
def myFilePath = "my-logs/script-output.log"
def myFile = new File("${workspace}/${myFilePath}")
def newContent = "<h2>Script log</h2> <pre>${myFile.text}</pre>"
def existingDescription = build.getDescription() ?: ""
build.setDescription(existingDescription + newContent)
build
变量应该可用,无需在系统 Groovy 脚本中进行任何导入。
如果有人有相同的要求,这可能会对他们有所帮助。
这将读取包含 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.vert}"),
string(name: 'environment', value: "${params.env}"),
string(name: 'branch', value: "${params.branch}"),
string(name: 'project', value: "${params.project}")
]
)
}
}
}
}
}
}
虽然这个问题仅与查找目录路径($WORKSPACE)有关,但我需要从工作区读取文件并将其解析为JSON对象以读取声纳问题(忽略次要/注释问题)
可能对某人有帮助,我就是这样做的- 来自 readFile
jsonParse(readFile('xyz.json'))
和jsonParse方法-
@NonCPS
def jsonParse(text) {
return new groovy.json.JsonSlurperClassic().parseText(text);
}
这还需要在 ManageJenkins-> 进程内脚本批准中进行脚本批准
如果您已经安装了 Groovy(Postbuild)插件,我认为使用(通用)Groovy 而不是安装(专用)插件来完成此任务是合理的愿望。
也就是说,您可以使用
manager.build.workspace.getRemote()
获取工作空间。不要忘记在路径和文件名之间添加 File.separator
。
正如另一篇文章中提到的从 Jenkins 中的工作区 groovy 脚本读取 .txt 文件我正在努力使其适用于工作区中文件的 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
}