UnsupportedOperationException: необходимо указать $ class с реализацией интерфейса java.util.List - PullRequest
0 голосов
/ 17 октября 2018

Запуск теста Jenkinsfile и возвращение следующего этапа UnsupportedOperationException: must specify $class with an implementation of interface java.util.List

stage('Checkout') {
    steps {
        checkout([$class: 'GitSCM', 
            branches: [name: '*/master'], 
            doGenerateSubmoduleConfigurations: false, 
            extensions: [[$class: 'CleanBeforeCheckout'], 
                [$class: 'RelativeTargetDirectory', relativeTargetDir: 'targetDir']], 
            submoduleCfg: [], 
            userRemoteConfigs: [[credentialsId: 'jenkinsserviceaccount',
                url: 'https://bitbucket.company.net/scm/moak/myTestRepo.git']]])
    }
}

Я изменил некоторые имена после факта публикации здесь, но вышеприведенное было создано с использованием генератора фрагментов Jenkins.Любая идея о том, что может быть не так с оформлением заказа?

Вот еще одно исключение, которое я вижу в консоли Jenkins.

java.lang.UnsupportedOperationException: must specify $class with an implementation of interface java.util.List
    at org.jenkinsci.plugins.structs.describable.DescribableModel.resolveClass(DescribableModel.java:503)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:402)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.buildArguments(DescribableModel.java:341)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:282)
Caused: java.lang.IllegalArgumentException: Could not instantiate 
    {extensions=[{$class=CleanBeforeCheckout}, {$class=RelativeTargetDirectory, relativeTargetDir=stateStore}], 
    submoduleCfg=[], 
    userRemoteConfigs=[{credentialsId=jenkinsserviceaccount, url=https://bitbucket.hylandqa.net/scm/moak/hyland-statestore.git}], 
    doGenerateSubmoduleConfigurations=false, 
    branches={name=*/master}} 
for GitSCM(userRemoteConfigs: UserRemoteConfig(url: String, name: String, refspec: String, credentialsId: String)[], 
    branches: BranchSpec(name: String)[], 
    doGenerateSubmoduleConfigurations: boolean, 
    submoduleCfg: org.kohsuke.stapler.NoStaplerConstructorException: There's no @DataBoundConstructor on any constructor of class hudson.plugins.git.SubmoduleConfig[], 
    browser: GitRepositoryBrowser{AssemblaWeb(repoUrl: String) | BitbucketWeb(repoUrl: String) | CGit(repoUrl: String) | FisheyeGitRepositoryBrowser(repoUrl: String) | 
        GitBlitRepositoryBrowser(repoUrl: String, projectName: String) | GitLab(repoUrl: String, version: String) | GitList(repoUrl: String) | GitWeb(repoUrl: String) | 
        GithubWeb(repoUrl: String) | Gitiles(repoUrl: String) | GitoriousWeb(repoUrl: String) | GogsGit(repoUrl: String) | KilnGit(repoUrl: String) | 
        Phabricator(repoUrl: String, repo: String) | RedmineWeb(repoUrl: String) | RhodeCode(repoUrl: String) | Stash(repoUrl: String) | 
        TFS2013GitRepositoryBrowser(repoUrl: String) | ViewGitWeb(repoUrl: String, projectName: String)}, 
        gitTool: String, extensions: GitSCMExtension{AuthorInChangelog() | 
        BuildChooserSetting(buildChooser: BuildChooser{AncestryBuildChooser(maximumAgeInDays: int, ancestorCommitSha1: String) | 
        DefaultBuildChooser() | InverseBuildChooser()}) | ChangelogToBranch(options: ChangelogToBranchOptions(compareRemote: String, compareTarget: String)) | 
        CheckoutOption(timeout: int) | CleanBeforeCheckout() | CleanCheckout() | 
        CloneOption(shallow: boolean, noTags: boolean, reference: String, timeout: int, depth?: int, honorRefspec?: boolean) | 
        DisableRemotePoll() | GitLFSPull() | IgnoreNotifyCommit() | LocalBranch(localBranch: String) | MessageExclusion(excludedMessage: String) | 
        PathRestriction(includedRegions: String, excludedRegions: String) | PerBuildTag() | 
        PreBuildMerge(options: UserMergeOptions(mergeTarget: String, fastForwardMode?: GitPluginFastForwardMode[FF, FF_ONLY, NO_FF], mergeRemote?: String, mergeStrategy?: Strategy[DEFAULT, RESOLVE, RECURSIVE, OCTOPUS, OURS, SUBTREE, RECURSIVE_THEIRS])) | 
        PruneStaleBranch() | RelativeTargetDirectory(relativeTargetDir: String) | ScmName(name: String) | 
        SparseCheckoutPaths(sparseCheckoutPaths: SparseCheckoutPath(path: String)[]) | 
        SubmoduleOption(disableSubmodules: boolean, recursiveSubmodules: boolean, trackingSubmodules: boolean, reference: String, timeout: int, parentCredentials: boolean) | 
        UserExclusion(excludedUsers: String) | UserIdentity(name: String, email: String) | WipeWorkspace()}[])

1 Ответ

0 голосов
/ 17 октября 2018

Вы видите эту ошибку, потому что ключ branches должен содержать карту, вложенную в список.Так должно быть:

branches: [[name: '*/master']]

вместо

branches: [name: '*/master']

Источник: https://jenkins.io/doc/pipeline/steps/workflow-scm-step/#code-checkout-code-general-scm

Полная сцена выглядит так:

stage('Checkout') {
    steps {
        checkout([$class: 'GitSCM', 
            branches: [[name: '*/master']], 
            doGenerateSubmoduleConfigurations: false, 
            extensions: [[$class: 'CleanBeforeCheckout'], 
                [$class: 'RelativeTargetDirectory', relativeTargetDir: 'targetDir']], 
            submoduleCfg: [], 
            userRemoteConfigs: [[credentialsId: 'jenkinsserviceaccount',
                url: 'https://bitbucket.company.net/scm/moak/myTestRepo.git']]])
    }
}

Что касается ошибки, которую вы видите - плагин рабочего процесса использует способность Groovy для приведения Map к другому типу.Это работает, если все ключи карты отображаются на поля класса правильно, например, они должны хранить один и тот же тип.Когда branches хранит Map вместо List<Map>, всю карту нельзя преобразовать в объект, представляющий конфигурацию SCM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...