я пытаюсь понять строку ниже, почему нам нужно вызывать этап с помощью .call()
def call(String jsonString) {
node("unix") {
try {
def slurper = new JsonSlurperClassic().parseText(jsonString)
buildStage(slurper).call()
deployStage()
}catch(error) {
println ex.toString()
}finally{
sendEmail()
}
}
}
def buildStage(slurper){
stage ('Build') {
}
}
def deployStage(slurper){
stage ('Deploy') {
}
}
из общей библиотеки. Это вызывается из файла jenkins с использованием общей библиотеки в папке var (глобальная функция), скажем, приведенный выше код находится в файле в каталоге var alltech.groovy в файле Jenkins, вызывающем эту функцию alltech() @Library ("prov-shared-library") _ alltech( '''{ "nodeLabel" : "unix", "deployEnv" : "devl" }"")
В приведенном выше примере buildStage(slurper).call()
не нужен, так как его можно назвать как buildStage(slurper)
,
methondName.call() необходим, если у метода есть блок закрытия, который необходимо выполнить при вызове, см. мой пример ниже
myPipeline.groovy
import groovy.json.JsonSlurperClassic
def call(String jsonString) {
node() {
try {
def slurper = new JsonSlurperClassic().parseText(jsonString)
buildStage(slurper)
println deployStage(slurper).call()
}catch(Exception ex ) {
throw ex;
}finally{
// do nothing
}
}
}
def buildStage(slurper){
stage ('Build') {
return {
println slurper
def r = 5 + 5
println r
}.call()
}
}
def deployStage(slurper){
stage ('Deploy') {
return {
return "The name is "+ slurper.name
}
}
}
Дженкинсфайл
def myJSON = '''
{ "name" : "XYZ"}
'''
myPipeline(myJSON)
Это контент, который вы получили из Jenkinsfile или из общей библиотеки Jenkins? groovy closure говорит, что вызывать groovy closure с помощью метода call() необязательно. Метод call() выполняется сам по себе при использовании замыкания.