Поскольку конвейер сериализует все переменные (включая локальную переменную внутри функции) в качестве поведения по умолчанию, но java.util.regex.Matcher
не сериализуем, поэтому вы получаете ошибку.
Опция 1) сразу после завершения использования освободите не сериализуемую переменную.
def log_parser(String filename){
def result_list = []
def match_f, match_s
def lines = readFile(filename).readLines()
for( line in lines ) {
match_f = (line =~ /(?<=Failures: )[^ ]+/ )
match_s = (line =~ /(?<=Skips: )[^ ]+/ )
if( match_f ) {
result_list[1] = (match_f[0]).replace(",", "")
match_f = null
}
if( match_s ) {
result_list[2] = (match_s[0]).replace(",", "")
match_s = null
}
}
return result_list
}
Вариант 2) переместите не сериализуемые переменные в функцию с аннотацией: @NonCPS
, внутри функции @NonCPS,мы не можем назвать какой-либо другой шаг конвейера , поэтому вы должны переместиться readFile
из log_pareser()
log_parser(readFile(<log file path>))
@NonCPS
def log_parser(String fileContent){
def result_list = []
def match_f, match_s
def lines = fileContent.readLines()
for( line in lines ) {
match_f = (line =~ /(?<=Failures: )[^ ]+/ )
match_s = (line =~ /(?<=Skips: )[^ ]+/ )
if( match_f ) {
result_list[1] = (match_f[0]).replace(",", "") }
if( match_s ) {
result_list[2] = (match_s[0]).replace(",", "") }
}
return result_list
}