Конвейер ограничивает все переменные сериализуемыми типами (см. Рекомендации по масштабируемому коду конвейера ).
Я предлагаю извлечь код, который подготавливает параметры сборки, в функцию, помеченную @NonCPS
(предотвратить преобразование CPS). Внутри этой функции вы не ограничены сериализуемыми переменными, но есть другое ограничение: вы не можете вызывать шаги конвейера и другие функции, у которых нет аннотации @NonCPS
, за исключением некоторых простых, таких как echo
(см. Метод конвейерной CPS не соответствует ).
Я думаю, что это также лучший стиль кода, чтобы иметь высокоуровневый код только внутри блока pipeline{}
(принцип единого уровня абстракции).
import java.net.URLEncoder
// Jenkins pipeline
pipeline {
agent any
stages {
stage('main') {
steps {
println '------------------ main-stage ------------------'
script {
build (
job: 'email_job',
parameters: [
string(name: 'param01', value: "11112222"),
string(name: 'cmd', value: prepareCmd()),
]
)
}
}
}
}
}
@NonCPS
String prepareCmd() {
def r_ptr = java.time.LocalDateTime.now()
def l_ptr = r_ptr.minusDays(14) as java.time.LocalDateTime
def fmt4time = 'yyyy-MM-dd HH:mm:ss'
def fmt2cnv = java.time.format.DateTimeFormatter.ofPattern(fmt4time) // formatter for conversion
def l_str4tz = l_ptr.format(fmt2cnv)
def r_str4tz = r_ptr.format(fmt2cnv)
l_str4tz = '2020-02-18 00:00:00'
r_str4tz = '2020-03-18 00:00:00'
//
def ip4django = '127.0.0.1'
def qry_info = []
def __qry = ''
__qry = URLEncoder.encode(l_str4tz, 'UTF-8').replace('+', '%20')
__qry = "start_time=${__qry}"
qry_info.push(__qry)
__qry = URLEncoder.encode(r_str4tz, 'UTF-8').replace('+', '%20')
__qry = "end_time=${__qry}"
qry_info.push(__qry)
def qry_opts = qry_info.join('&')
return "curl --get http://${ip4server}/dsb4bbu?" + qry_opts
}