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!