jenkinsci / configuration-as-code-plugin

Jenkins Configuration as Code Plugin
https://plugins.jenkins.io/configuration-as-code
MIT License
2.69k stars 718 forks source link

No configurator for the following root elements services #2376

Closed 839998664 closed 2 weeks ago

839998664 commented 1 year ago

Your checklist for this issue

🚨 Please review the Support Policy

Description

Please describe your issue here, and explain what you have already tried to resolve it. I am spinning up a new Jenkins instance using the docker image jenkins/jenkins:alpine. The list of plugins I have installed is as follows:

atlassian-jira-software-cloud:latest blueocean:latest build-timeout:latest cloudbees-folder:latest configuration-as-code:latest credentials-binding:latest ec2:latest email-ext:latest git-client:latest gradle:latest job-dsl:latest matrix-auth:latest pipeline-stage-view:latest saml:latest ssh-slaves:latest timestamper:latest workflow-aggregator:latest ws-cleanup:latest

I have a set of yaml files with the configuration as code. I am getting an error SEVERE jenkins.InitReactorRunner$1#onTaskFailed: Failed ConfigurationAsCode.init io.jenkins.plugins.casc.ConfiguratorException: No configurator for the following root elements services

The configuration was working fine until a week ago and I have not made any changes to it. It stopped working while I was trying to split the configuration for the ec2 plugin into multiple files a few days ago. I thought it was related to the way I split the Yaml but reassembling it in the way it was before did not fix the issue either. So, obviously something else is amiss. I noticed that a new version of the CASC plugin came out a couple of days ago though.

timja commented 1 year ago

Services is not a valid root element.

No configurator for the following root elements services
839998664 commented 1 year ago

Also, right before this error occurs I am getting a warning as below: WARNING i.j.p.casc.BaseConfigurator#createAttribute: Can't handle class org.jenkinsci.plugins.plaincredentials.impl.FileCredentialsImpl#file: type is abstract but not Describable.

839998664 commented 1 year ago

Another update, I think this is related to the way I have split the yaml for ec2 plugin... ec2.yaml looks like:

jenkins:
 clouds:
  - amazonEC2:
      name: "XXXX"
      ....
      templates:

AMI1.yaml

jenkins:
 clouds:
  - amazonEC2:
     name: "XXXX"
     templates:
     - ami: "ami-1"
       amiType:
        windowsType:
        .....

Similarly I have multiple templates yaml files, hoping that they will merge into a single one.

839998664 commented 1 year ago

Just tried again by merging everything back together into a single yaml file ... Still get the same error.

timja commented 1 year ago

Reduce it to a minimal error and post your full yaml.

the original error shows you nesting it under ‘services’ which is wrong

839998664 commented 1 year ago

There is nothing named services in any of the twelve YAML config files, so I cannot pinpoint the issue or narrow it down to a particular part of the configuration. -- Not entirely correct ... Turned out that, in a gist, I was copying everything in to the Jenkins_home including my compose.yaml file, which indeed had a services map right at the top ....

839998664 commented 1 year ago

So, I removed the compose.yaml file from the jenkins home. Now the error I get with the below templates of the ec2 configuration is: ec2.yaml

jenkins:
  clouds:
    - amazonEC2:
        name: "cloudname"
        instanceCapStr: "50"
        region: "region"
        sshKeysCredentialsId: "credentialsId"

ec2/ami-1.yaml

jenkins:
  clouds:
    - amazonEC2:
      templates:       
      - ami: "ami-000391b8832ffa6f0"
        amiType:
          windowsData:
            allowSelfSignedCertificate: true
            password: "password"
            specifyPassword: true
            useHTTPS: false
        associatePublicIp: false
        connectBySSHProcess: false
        connectionStrategy: PRIVATE_IP
        deleteRootOnTermination: false
        description: "ami-1"
        ebsEncryptRootVolume: ENCRYPTED
        ebsOptimized: true
        hostKeyVerificationStrategy: CHECK_NEW_SOFT
        idleTerminationMinutes: "30"
        initScript: ""
        instanceCapStr: "2"
        javaPath: "java"
        labelString: "label"
        maxTotalUses: -1
        metadataEndpointEnabled: true
        metadataHopsLimit: 1
        metadataSupported: true
        metadataTokensRequired: false
        minimumNumberOfInstances: 0
        minimumNumberOfSpareInstances: 0
        mode: EXCLUSIVE
        monitoring: false
        numExecutors: 2
        remoteAdmin: "Administrator"
        remoteFS: "/"
        securityGroups: ""
        stopOnTerminate: false
        subnetId: "subnet"
        t2Unlimited: false
        tenancy: Default
        tags:
        - name: "jenkins_server_url"
          value: "url"
        - name: "Name"
          value: "ami-1"
        - name: "AWS_Internal"
          value: "idleoff=2"
        type: T3Medium
        useEphemeralDevices: false
      useInstanceProfileForCredentials: false

ec2/ami-2.yaml

jenkins:
  clouds:
    - amazonEC2:
      templates:       
      - ami: "ami-000391b8832ffa6f0"
        amiType:
          windowsData:
            allowSelfSignedCertificate: true
            password: "password"
            specifyPassword: true
            useHTTPS: false
        associatePublicIp: false
        connectBySSHProcess: false
        connectionStrategy: PRIVATE_IP
        deleteRootOnTermination: false
        description: "ami-2"
        ebsEncryptRootVolume: ENCRYPTED
        ebsOptimized: true
        hostKeyVerificationStrategy: CHECK_NEW_SOFT
        idleTerminationMinutes: "30"
        initScript: ""
        instanceCapStr: "2"
        javaPath: "java"
        labelString: "label"
        maxTotalUses: -1
        metadataEndpointEnabled: true
        metadataHopsLimit: 1
        metadataSupported: true
        metadataTokensRequired: false
        minimumNumberOfInstances: 0
        minimumNumberOfSpareInstances: 0
        mode: EXCLUSIVE
        monitoring: false
        numExecutors: 2
        remoteAdmin: "Administrator"
        remoteFS: "/"
        securityGroups: ""
        stopOnTerminate: false
        subnetId: "subnet"
        t2Unlimited: false
        tenancy: Default
        tags:
        - name: "jenkins_server_url"
          value: "url"
        - name: "Name"
          value: "ami-2"
        - name: "AWS_Internal"
          value: "idleoff=2"
        type: T3Medium
        useEphemeralDevices: false
      useInstanceProfileForCredentials: false
2023-10-01 17:20:27.667+0000 [id=33]    WARNING i.j.p.casc.BaseConfigurator#createAttribute: Can't handle class org.jenkinsci.plugins.plaincredentials.impl.FileCredentialsImpl#file: type is abstract but not Describable.
2023-10-01 17:20:27.834+0000 [id=33]    SEVERE  jenkins.InitReactorRunner$1#onTaskFailed: Failed ConfigurationAsCode.init
java.lang.IllegalArgumentException: No hudson.slaves.Cloud implementation found for templates
        at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.lambda$lookupDescriptor$11(HeteroDescribableConfigurator.java:226)
        at io.vavr.control.Option.orElse(Option.java:321)
        at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.lookupDescriptor(HeteroDescribableConfigurator.java:224)
        at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.lambda$configure$3(HeteroDescribableConfigurator.java:84)
        at io.vavr.Tuple2.apply(Tuple2.java:238)
        at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.configure(HeteroDescribableConfigurator.java:84)
        at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.check(HeteroDescribableConfigurator.java:92)
        at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.check(HeteroDescribableConfigurator.java:55)
        at io.jenkins.plugins.casc.BaseConfigurator.configure(BaseConfigurator.java:355)
        at io.jenkins.plugins.casc.BaseConfigurator.check(BaseConfigurator.java:293)
        at io.jenkins.plugins.casc.ConfigurationAsCode.lambda$checkWith$9(ConfigurationAsCode.java:803)
        at io.jenkins.plugins.casc.ConfigurationAsCode.invokeWith(ConfigurationAsCode.java:737)
        at io.jenkins.plugins.casc.ConfigurationAsCode.checkWith(ConfigurationAsCode.java:803)
        at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:789)
        at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:658)
        at io.jenkins.plugins.casc.ConfigurationAsCode.configure(ConfigurationAsCode.java:315)
        at io.jenkins.plugins.casc.ConfigurationAsCode.init(ConfigurationAsCode.java:307)
Caused: java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:109)
Caused: java.lang.Error
        at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:115)
        at hudson.init.TaskMethodFinder$TaskImpl.run(TaskMethodFinder.java:185)
        at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:305)
        at jenkins.model.Jenkins$5.runTask(Jenkins.java:1170)
        at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:221)
        at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:120)
        at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:68)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)
2023-10-01 17:20:27.843+0000 [id=24]    SEVERE  hudson.util.BootFailure#publish: Failed to initialize Jenkins
java.lang.IllegalArgumentException: No hudson.slaves.Cloud implementation found for templates
        at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.lambda$lookupDescriptor$11(HeteroDescribableConfigurator.java:226)
        at io.vavr.control.Option.orElse(Option.java:321)
        at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.lookupDescriptor(HeteroDescribableConfigurator.java:224)
        at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.lambda$configure$3(HeteroDescribableConfigurator.java:84)
        at io.vavr.Tuple2.apply(Tuple2.java:238)
        at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.configure(HeteroDescribableConfigurator.java:84)
        at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.check(HeteroDescribableConfigurator.java:92)
        at io.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.check(HeteroDescribableConfigurator.java:55)
        at io.jenkins.plugins.casc.BaseConfigurator.configure(BaseConfigurator.java:355)
        at io.jenkins.plugins.casc.BaseConfigurator.check(BaseConfigurator.java:293)
        at io.jenkins.plugins.casc.ConfigurationAsCode.lambda$checkWith$9(ConfigurationAsCode.java:803)
        at io.jenkins.plugins.casc.ConfigurationAsCode.invokeWith(ConfigurationAsCode.java:737)
        at io.jenkins.plugins.casc.ConfigurationAsCode.checkWith(ConfigurationAsCode.java:803)
        at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:789)
        at io.jenkins.plugins.casc.ConfigurationAsCode.configureWith(ConfigurationAsCode.java:658)
        at io.jenkins.plugins.casc.ConfigurationAsCode.configure(ConfigurationAsCode.java:315)
        at io.jenkins.plugins.casc.ConfigurationAsCode.init(ConfigurationAsCode.java:307)
Caused: java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:109)
Caused: java.lang.Error
        at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:115)
        at hudson.init.TaskMethodFinder$TaskImpl.run(TaskMethodFinder.java:185)
        at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:305)
        at jenkins.model.Jenkins$5.runTask(Jenkins.java:1170)
        at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:221)
        at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:120)
        at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:68)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)
Caused: org.jvnet.hudson.reactor.ReactorException
        at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:290)
        at jenkins.InitReactorRunner.run(InitReactorRunner.java:49)
        at jenkins.model.Jenkins.executeReactor(Jenkins.java:1205)
        at jenkins.model.Jenkins.<init>(Jenkins.java:992)
        at hudson.model.Hudson.<init>(Hudson.java:86)
        at hudson.model.Hudson.<init>(Hudson.java:82)
        at hudson.WebAppMain$3.run(WebAppMain.java:247)
Caused: hudson.util.HudsonFailedToLoad
        at hudson.WebAppMain$3.run(WebAppMain.java:264)
2023-10-01 17:20:27.892+0000 [id=24]    INFO    hudson.lifecycle.Lifecycle#onStatusUpdate: Stopping Jenkins
2023-10-01 17:20:27.946+0000 [id=24]    INFO    jenkins.model.Jenkins$16#onAttained: Started termination
2023-10-01 17:20:27.971+0000 [id=24]    INFO    h.p.b.global.Lifecycle#shutdown: Shutdown complete - Global TimeOut ScheduledExecutorService had 0 tasks pending
2023-10-01 17:20:28.021+0000 [id=24]    INFO    jenkins.model.Jenkins$16#onAttained: Completed termination
2023-10-01 17:20:28.022+0000 [id=24]    INFO    jenkins.model.Jenkins#_cleanUpDisconnectComputers: Starting node disconnection
2023-10-01 17:20:28.036+0000 [id=24]    INFO    jenkins.model.Jenkins#_cleanUpShutdownPluginManager: Stopping plugin manager
2023-10-01 17:20:28.076+0000 [id=24]    INFO    jenkins.model.Jenkins#_cleanUpPersistQueue: Persisting build queue
2023-10-01 17:20:28.084+0000 [id=24]    INFO    jenkins.model.Jenkins#_cleanUpAwaitDisconnects: Waiting for node disconnection completion
2023-10-01 17:20:28.086+0000 [id=24]    SEVERE  jenkins.model.Jenkins#_cleanUpPluginServletFilters: Failed to stop filters
java.lang.ClassNotFoundException: org.jenkinsci.plugins.ssegateway.SubscriptionConfigQueue$SubscriptionConfig
        at java.base/java.net.URLClassLoader.findClass(Unknown Source)
        at jenkins.util.URLClassLoader2.findClass(URLClassLoader2.java:35)
        at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
        at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
Caused: java.lang.NoClassDefFoundError: org/jenkinsci/plugins/ssegateway/SubscriptionConfigQueue$SubscriptionConfig
        at org.jenkinsci.plugins.ssegateway.SubscriptionConfigQueue.stop(SubscriptionConfigQueue.java:106)
        at org.jenkinsci.plugins.ssegateway.Endpoint$SSEListenChannelFilter.destroy(Endpoint.java:253)
        at hudson.util.PluginServletFilter.cleanUp(PluginServletFilter.java:191)
        at jenkins.model.Jenkins._cleanUpPluginServletFilters(Jenkins.java:3985)
        at jenkins.model.Jenkins.cleanUp(Jenkins.java:3682)
        at hudson.WebAppMain$3.run(WebAppMain.java:268)
2023-10-01 17:20:28.087+0000 [id=24]    INFO    hudson.lifecycle.Lifecycle#onStatusUpdate: Jenkins stopped
timja commented 1 year ago

see https://github.com/jenkinsci/configuration-as-code-plugin/tree/master/demos/ec2

under amazonEc2 templates needs to be indented

Ximaz commented 2 weeks ago

Any update here ? I'm getting the same error with an almost empty JCasC.yml file when instanciating Jenkins in a Docker...

timja commented 2 weeks ago

please report a new issue from scratch, your whole environment and jcasc file you're using