Job-DSL 1.84 No signature of method: javaposse.jobdsl.dsl.jobs.MultibranchWorkflowJob.publishers()

Рейтинг: 0Ответов: 1Опубликовано: 13.07.2023

Упражняюсь с плагином JCasC + Job-DSL для Jenkins, нужно перевести две MultibranchPipeLine job CI и CD в декларативный *.groovy скрипт, при этом CI при успешном завершении запускает CD, и вот с этим я не могу разобраться. Описал downstream в CI, но при запуске Jenkins на него ругается с ошибкой:

groovy.lang.MissingMethodException: No signature of method: 
javaposse.jobdsl.dsl.jobs.MultibranchWorkflowJob.publishers() is applicable for argument types: 
(script$_run_closure2$_closure5) values: [script$_run_closure2$_closure5@766b8894]

Сам CI.groovy:

  
folder('builds') {
    description('<div style="border-radius:10px; text-align: center; font-size:120%; padding:15px; background-color: powderblue;">Simple app CI/CD</div>')
}

multibranchPipelineJob('builds/ci') {
    branchSources {
        branchSource {
            source {
                github {
                    repoOwner('owner')
                    repository('repo')
                    repositoryUrl('github_addr')
                    configuredByUrl(true)
                    credentialsId('GitHub_ID')
                    traits {
                        gitHubBranchDiscovery {
                            strategyId(3)
                        }
                        gitHubPullRequestDiscovery {
                            strategyId(1)
                        }
                        headWildcardFilter {
                            includes('master')
                            excludes('')
                        }
                    }
                }
            }
        }
    }

    factory {
    workflowBranchProjectFactory {
            scriptPath('Jenkinsfile-CI')
        }
    }
// Вот этот блок ломает скрипт
    publishers {
        downstream('builds/cd', 'SUCCESS')
    }

    properties {
        folderLibraries {
            libraries {
                libraryConfiguration {
                    name('general')
                    retriever {
                        modernSCM {
                            scm {
                                git {
                                    remote('github_addr')
                                    credentialsId('GitHub_ID')
                                }
                                libraryPath('libs/general')
                            }
                        }
                        allowVersionOverride(true)
                        defaultVersion('master')
                    }
                }
                libraryConfiguration {
                    name('build')
                    retriever {
                        modernSCM {
                            scm {
                                git {
                                    remote('github_addr')
                                    credentialsId('GitHub_ID')
                                }
                                libraryPath('libs/build')
                            }
                        }
                        allowVersionOverride(true)
                        defaultVersion('master')
                    }
                }
            }
        }
    }
}

Как мне исправить скрипт так, чтобы CI запускал CD?

Ответы

▲ 0

Решил проблему переносом блока вызова джобы CD из CI.groovy в Jenkinsfile-CI этой же джобы. Нужный блок кода:

    post {
        always {
            cleanWs()
        }
        success {
            build job: 'builds/cd', wait: false
        }
    }