Wilcox Development Solutions Blog

Jenkins, Groovy init scripts and custom Tools

May 18, 2018

I’ve been working with Jenkins quite a bit lately.

When I set up a system I want it to be as reproducable as possible: you can never trust hardware, especially when it’s virtual.

I found Accenture’s Jenkins Docker configuration . It’s super good, especially as a basis of sample code. Based on this code I was able to install and configure plugins (ie I set up a Node.js Jenkins tool, etc etc).

My Jenkins installation also uses the CustomTool Plugin extensively, to provide CLI tools to my Jenkins pipelines. So I wanted to add my custom tool configuration to my Jenkins init scripts.

There’s plenty of documentation on installing tools based on plugins (even a section of my learning notes!) but the custom tools plugin seems to be left out of this flurry of documentation. No longer!

Installing custom tools is a bit different from installing tools that come explicitly as part of a plugin, and here is some code that worked for me:

import jenkins.model.* import com.cloudbees.jenkins.plugins.customtools.CustomTool; import com.synopsys.arc.jenkinsci.plugins.customtools.versions.ToolVersionConfig;

Jenkins.instance.getExtensionList(com.cloudbees.jenkins.plugins.customtools.CustomTool.DescriptorImpl.class)[0];

def installs = a.getInstallations() 
def found = installs.find { it.name == "gcc" }

if ( found ) { 
    println "gcc is already installed"
} else { 
    println "installing gcc tool"
    def newI = new CustomTool("gcc", "/usr/local/gcc/", null, "bin", null, ToolVersionConfig.DEFAULT, null) 
    installs += newI a.setInstallations( (com.cloudbees.jenkins.plugins.customtools.CustomTool[]) installs );
    a.save()
}

Enjoy!