First refactor: Split out Java
We want to manage Jenkins controllers and Jenkins agent nodes. We won't cover agent profiles in detail, but the first issue we encountered is that they also need Java.
We could copy and paste the Java class declaration; it's small, so keeping multiple copies up-to-date might not be too burdensome. But instead, we decided to break Java out into a separate profile. This way we can manage it one time, then include the Java profile in both the agent and controller profiles.
First, decide how configurable Java needs to be on Jenkins machines. After looking at our past usage, we realized that we use only two options: either we install Oracle's Java 8 distribution, or we default to OpenJDK 7, which the Jenkins module manages. This means we can:
- Make our new Java profile really simple: hardcode Java 8 and take no configuration.
- Replace the two Java parameters from
profile::jenkins::controller
with one Boolean parameter (whether to let Jenkins handle Java).
class profile::jenkins::controller ( String $jenkins_port = '9091', Boolean $install_jenkins_java = true, ) { # ...
And here's how we choose which Java to use:
class { 'jenkins': configure_firewall => true, install_java => $install_jenkins_java, # <--- here port => $jenkins_port, config_hash => { 'HTTP_PORT' => { 'value' => $jenkins_port }, 'JENKINS_PORT' => { 'value' => $jenkins_port }, }, } # When not using the jenkins module's java version, install java8. unless $install_jenkins_java { include profile::jenkins::usage::java8 }
And our new Java profile:
::jenkins::usage::java8 # Sets up java8 for Jenkins on Debian # class profile::jenkins::usage::java8 { motd::register { 'Java usage profile (profile::jenkins::usage::java8)': } # OpenJDK 7 is already managed by the Jenkins module. # ::jenkins::install_java or ::jenkins::agent::install_java should be false to use this profile # this can be set through the class parameter $install_jenkins_java case $::osfamily { 'debian': { class { 'java': distribution => 'oracle-jdk8', version => '8u92', } package { 'tzdata-java': ensure => latest, } } default: { notify { "profile::jenkins::usage::java8 cannot set up JDK on ${::osfamily}": }
Diff of first refactor
@@ -1,13 +1,12 @@ # /etc/puppetlabs/code/environments/production/site/profile/manifests/jenkins/controller.pp class profile::jenkins::controller ( - String $jenkins_port = '9091', - String $java_dist = 'jdk', - String $java_version = 'latest', + String $jenkins_port = '9091', + Boolean $install_jenkins_java = true, ) { class { 'jenkins': configure_firewall => true, - install_java => false, + install_java => $install_jenkins_java, port => $jenkins_port, config_hash => { 'HTTP_PORT' => { 'value' => $jenkins_port }, @@ -15,9 +14,6 @@ class profile::jenkins::controller ( }, } - class { 'java': - distribution => $java_dist, - version => $java_version, - before => Class['jenkins'], - } + # When not using the jenkins module's java version, install java8. + unless $install_jenkins_java { include profile::jenkins::usage::java8 } }