How to write a yaml configuration for certificate with JCasC plugin?

447 views
Skip to first unread message

Oxygen

unread,
Jun 9, 2019, 11:32:24 PM6/9/19
to Jenkins Users
HI

I am using JCasC plugin to backup configurations of our team's Jenkins server, the configuration contains some certificates in credential configuration, I added those certificates in the yaml file as follows:
credentials:
  system
:
    domainCredentials
:
   
- credentials:
     
- certificate:
          id
: "09cee6c2-8a39-41c0-982d-d61142881f51"
          keyStoreSource
:
            fileOnMaster
:
              keyStoreFile
: "/var/lib/jenkins/.kube/xxxx.pfx"
          password
: "{AQAAABAAAAAQQFDGeGfdsasdfajaGHAVcrBgCnZudsafdsPEWgYADaZ1mg=}"
          scope
: GLOBAL

But it failed to apply this configuration on another jenkins server, it threw the following errors:


No com.cloudbees.plugins.credentials.impl.CertificateCredentialsImpl$KeyStoreSource implementation found for fileOnMaster
java.lang.IllegalArgumentException: No com.cloudbees.plugins.credentials.impl.CertificateCredentialsImpl$KeyStoreSource implementation found for fileOnMaster
        at io
.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.lambda$lookupDescriptor$11(HeteroDescribableConfigurator.java:153)
        at io
.vavr.control.Option.orElse(Option.java:302)
        at io
.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.lookupDescriptor(HeteroDescribableConfigurator.java:152)
        at io
.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.lambda$configure$3(HeteroDescribableConfigurator.java:80)
        at io
.vavr.Tuple2.apply(Tuple2.java:239)
        at io
.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.configure(HeteroDescribableConfigurator.java:79)
        at io
.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.configure(HeteroDescribableConfigurator.java:51)
        at io
.jenkins.plugins.casc.impl.configurators.DataBoundConfigurator.tryConstructor(DataBoundConfigurator.java:131)
        at io
.jenkins.plugins.casc.impl.configurators.DataBoundConfigurator.instance(DataBoundConfigurator.java:74)
        at io
.jenkins.plugins.casc.BaseConfigurator.configure(BaseConfigurator.java:268)
        at io
.jenkins.plugins.casc.impl.configurators.DataBoundConfigurator.configure(DataBoundConfigurator.java:80)
        at io
.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.lambda$doConfigure$16668e2$1(HeteroDescribableConfigurator.java:219)
        at io
.vavr.CheckedFunction0.lambda$unchecked$52349c75$1(CheckedFunction0.java:201)
        at io
.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.doConfigure(HeteroDescribableConfigurator.java:219)
        at io
.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.lambda$null$2(HeteroDescribableConfigurator.java:82)
        at io
.vavr.control.Option.map(Option.java:373)
        at io
.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.lambda$configure$3(HeteroDescribableConfigurator.java:82)
        at io
.vavr.Tuple2.apply(Tuple2.java:239)
        at io
.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.configure(HeteroDescribableConfigurator.java:79)
        at io
.jenkins.plugins.casc.impl.configurators.HeteroDescribableConfigurator.configure(HeteroDescribableConfigurator.java:51)
        at io
.jenkins.plugins.casc.impl.configurators.DataBoundConfigurator.tryConstructor(DataBoundConfigurator.java:123)
        at io
.jenkins.plugins.casc.impl.configurators.DataBoundConfigurator.instance(DataBoundConfigurator.java:74)
        at io
.jenkins.plugins.casc.BaseConfigurator.configure(BaseConfigurator.java:268)
        at io
.jenkins.plugins.casc.impl.configurators.DataBoundConfigurator.check(DataBoundConfigurator.java:98)
        at io
.jenkins.plugins.casc.BaseConfigurator.configure(BaseConfigurator.java:345)
        at io
.jenkins.plugins.casc.BaseConfigurator.check(BaseConfigurator.java:288)
        at io
.jenkins.plugins.casc.BaseConfigurator.configure(BaseConfigurator.java:353)
        at io
.jenkins.plugins.casc.BaseConfigurator.check(BaseConfigurator.java:288)
        at io
.jenkins.plugins.casc.ConfigurationAsCode.lambda$checkWith$6(ConfigurationAsCode.java:672)
        at io
.jenkins.plugins.casc.ConfigurationAsCode.invokeWith(ConfigurationAsCode.java:634)
        at io
.jenkins.plugins.casc.ConfigurationAsCode.checkWith(ConfigurationAsCode.java:672)
        at io
.jenkins.plugins.casc.ConfigurationAsCode.checkWith(ConfigurationAsCode.java:567)
       
..
it seems that the fileOnMaster syntax is not supported with the current plugin version, the installed plugins have the following version number:

I checked the demos in JCasC's repository and didn't find a example for certificate, does anyone know how to add a configuration for certificate with the plugin version I have installed?




Message has been deleted

Andreas Magnusson

unread,
Jun 11, 2019, 8:43:18 AM6/11/19
to Jenkins Users
Hi, this matches my config which looks like this:
          - certificate:
              id: "our-keystore"
              description: "certificate-alias"
              keyStoreSource:
                fileOnMaster:
                  keyStoreFile: "/var/jenkins_conf/secrets/ComodoCodeSigning2018.p12"
              password: "password..."
              scope: "GLOBAL"
This worked on 1.15, haven't had time to update to latest version since.
But note that I found out that I had to put the alias in the description. I think I had to read the code for the plugin to understand that little nugget...

/Andreas

Andreas Magnusson

unread,
Jun 11, 2019, 9:12:24 AM6/11/19
to Jenkins Users
Upgraded to 1.20 and I got the same error. 
Sigh, wish they could actually get the syntax set once and for all. 

davide.cavestro

unread,
Feb 22, 2022, 12:48:51 PM2/22/22
to Jenkins Users
Did you eventually find a solution?
Davide

Reply all
Reply to author
Forward
0 new messages