Break init scripts up in to re-usable classes

45 views
Skip to first unread message

Edd Grant

unread,
Mar 12, 2018, 5:57:42 PM3/12/18
to Jenkins Users
Hi folks,

I'm using the init hook script mechanism ($JENKINS_HOME/init.groovy.d) to programmatically configure Jenkins. I'm building up quite a library of code and want to split it out in to re-usable classes, to keep things maintainable and make it easier to write well focused tests etc. I have tried the following with no luck:

1: Trying to split classes out in to separate scripts and using Groovy's 'evaluate' function to load the classes from each script (basically trying to re-implement some sort of importing behaviour). This doesn't work at all due to the way Groovy manipulates scripts.

2: Putting my classes in a jar file and adding this to WEB-INF/lib in the Jenkins war. This approach leads to classloader errors, presumably because the jar classloader that my code belongs to doesn't have access to Jenkins' PluginManager 'uberClassLoader'?  

3: Same as [2] but adding the jar to the JVM's classpath rather than adding it to the jar. Same result as [2].

Has anyone tried doing anything similar to this before? I'm really keen to be able to do things like organise my code in packages and keep it in small maintainable units. Grateful for any suggestions.

Cheers,

Edd

Edd Grant

unread,
Mar 12, 2018, 6:24:42 PM3/12/18
to Jenkins Users
Gah, spotted a typo. Just to avoid confusion [3] should say "rather than adding it to the war", not the jar.

Cheers,

Edd

R. Tyler Croy

unread,
Mar 12, 2018, 10:15:06 PM3/12/18
to Edd Grant, Jenkins Users
(replies inline)
I have nothing to suggest that will help you refactor those Groovy scripts. As
one who has wielded plenty of init.groovy.d scripts in my day, I can tell you
I'm going to refactor mine by just deleting them in favor of:
https://github.com/jenkinsci/configuration-as-code-plugin#jenkins-configuration-as-code-plugin


I doubt that helps though :)

- R. Tyler Croy

------------------------------------------------------
Code: <https://github.com/rtyler>
Chatter: <https://twitter.com/agentdero>
xmpp: rty...@jabber.org

% gpg --keyserver keys.gnupg.net --recv-key 1426C7DC3F51E16F
------------------------------------------------------
signature.asc

Edd Grant

unread,
Mar 13, 2018, 5:00:52 AM3/13/18
to Jenkins Users
Thanks for the response R Tyler Croy, I'm suddenly kicking myself for not finding that plugin when I looked for stuff like this!

I notice the plugin is currently at 0.1 alpha, do (or do other folks here) have any experience using it? It it fairly reliable doing the things it mentions in the docs (LDAP config etc)? I'm torn as we have additional requirements such as loading up trust stores etc and I'd rather not have 2 separate mechanisms to configure different bits of Jenkins.

Cheers,

Edd 

On Monday, 12 March 2018 21:57:42 UTC, Edd Grant wrote:

Ewelina Wilkosz

unread,
Mar 13, 2018, 12:58:59 PM3/13/18
to Jenkins Users
you're right, it is only alpha so far and I wouldn't say it's production ready, but should be pretty soon - I hope to have next, more reliable release in April
but I'm part of the team working on the plugin, not using it yet :) so maybe someone here is actually happy enough with current version 

as for LDAP I know there are some issues: https://github.com/jenkinsci/configuration-as-code-plugin/issues/138 and I was not able to solve it, yet
keep an eye on the plugin though, contributors are very active and we really believe it will be THE configuration as code solution for Jenkins

Cesar Canassa

unread,
May 30, 2018, 5:40:47 PM5/30/18
to Jenkins Users
Did you find any solution for this? I am currently struggling with the same issue :(

I am currently using something similar to this:


It works, but I wish I could just import the classes instead of doing the evaluate trick

Ewelina Wilkosz

unread,
Jun 7, 2018, 8:31:15 AM6/7/18
to Jenkins Users
Hi Cesar,

not yet, but I guess at some point a PR with fix for ldap plugin will happen
will let you know when it happens (or you can have a look at https://github.com/jenkinsci/configuration-as-code-plugin/blob/master/PLUGINS.md and prepare a PR on your own :) )
Reply all
Reply to author
Forward
0 new messages