This cookbook installs a complete Jenkins server with plugins and is highly configurable with attributes in this cookbook. It depends on the Jenkins cookbook that is used as foundation. It also installs (but can be disabled) the Jenkins plugins, php-template job and required PHP tools as described on jenkins-php.org.
- CentOS >= 6.6
- RHEL >= 6.6
- Ubuntu >= 12.04
- Debian >= 7.0
These platforms are officially supported, but it will probably also work on other platforms.
default['jenkins-server']['admin']['username']
- Sets the username for the administrator user. Default "admin"default['jenkins-server']['security']['chef-vault']['data_bag']
- Name of the data bag for jenkins usersdefault['jenkins-server']['security']['chef-vault']['data_bag_item']
- ID of the data bag to use as administrator user. This data bag must contain a password, private_key and public_key property
default['jenkins-server']['nginx']['install']
- Defaulttrue
. Jenkins is proxied behind Nginx. If you want to disable this, set this attribute tofalse
anddefault['jenkins']['master']['listen_address']
to0.0.0.0
. Jenkins will then be reachable on port 8080.default['jenkins-server']['nginx']['server_name']
- Server name / hostname. Default "jenkins-server001.local"default['jenkins-server']['nginx']['server_default']
- If the Jenkins server block must be the default/catch all. Defaulttrue
default['jenkins-server']['nginx']['template_cookbook']
- The cookbook for the Nginx server template. Default "jenkins-server"default['jenkins-server']['nginx']['template_source']
- The source for the Nginx server template. Default "nginx/jenkins.conf.erb"default['jenkins-server']['nginx']['ssl']
- If a SSL connection must be used and forced. Defaultfalse
default['jenkins-server']['nginx']['ssl_cert_path']
- Path to the SSL certificate. Defaultnil
default['jenkins-server']['nginx']['ssl_key_path']
- Path to the SSL private key. Defaultnil
default['jenkins-server']['java']['install']
- Installs Java with the Java cookbookdefault['jenkins-server']['ant']['install']
- Installs Ant with the Ant cookbookdefault['jenkins-server']['git']['install']
- Installs Git with the Git cookbookdefault['jenkins-server']['composer']['install']
- Installs Composer with the Composer cookbook. Iftrue
, the composer_vendors recipe will install the required Jenkins-php.org vendors "squizlabs/php_codesniffer", "phploc/phploc", "pdepend/pdepend", "phpmd/phpmd", "sebastian/phpcpd" and "theseer/phpdox"default['jenkins-server']['composer']['template_cookbook']
- Template cookbook for composer.json. Default "jenkins-server"default['jenkins-server']['composer']['template_source']
- Template source for composer.json. Default "composer/composer.json.erb"
default['jenkins-server']['settings']['executors']
- Number of executors. Default the number of cores with a minimum of 2default['jenkins-server']['settings']['slave_agent_port']
- Port number, or 0 to indicate random available TCP port (default) or -1 to disable this servicedefault['jenkins-server']['settings']['system_email']
- System email addressdefault['jenkins-server']['settings']['mailer']['smtp_host']
- Mailer SMTP host. Default "localhost"default['jenkins-server']['settings']['mailer']['username']
- Mailer username. Default "mailer"default['jenkins-server']['settings']['mailer']['password']
- Mailer password. Default "mailer"default['jenkins-server']['settings']['mailer']['use_ssl']
- If the mailer must use SSL. Defaulttrue
default['jenkins-server']['settings']['mailer']['smtp_port']
- SMTP port. Default "25"default['jenkins-server']['settings']['mailer']['reply_to_address']
- Reply to address. Defaultnode['jenkins-server']['settings']['system_email']
default['jenkins-server']['settings']['mailer']['charset']
- Mail charset. Default "UTF-8"
These plugins are configured by default. See the attributes/default.rb for more details. Read for how to add a plugin the section "Adding plugins" further on.
- General: greenballs, locale, antisamy-markup-formatter, gravatar, ws-cleanup, ansicolor, build-monitor-plugin, git and ant
- Version control: bitbucket, bitbucket-pullrequest-builder
- Jenkins-php.org: checkstyle, cloverphp, crap4j, dry, htmlpublisher, jdepend, plot, pmd, violations, warnings and xunit
Jenkins jobs can be specified with attributes like:
default['jenkins-server']['jobs']['myjob'] = {
'cookbook' => 'mycookbook',
'source' => 'jobs/myjob.xml.erb'
}
By default the "php-template" job is installed from Jenkins-php.org.
default['jenkins-server']['slaves']['enable']
- If slaves must be enabled. Defaultfalse
default['jenkins-server']['slaves']['credential']['username']
- The Jenkins master will login as this user on slaves. Default "deployer"default['jenkins-server']['slaves']['credential']['description']
- Description. Default "Deployer"default['jenkins-server']['slaves']['search_query']
- The search query for finding slaves. Defaultjenkins-server_slave:* AND chef_environment:#{node.chef_environment} AND NOT fqdn:#{node['fqdn']}
Include or copy the jenkins_slave recipe to a cookbook that is in the run list of each server that you want to be a Jenkins slave.
If you are developing/testing your (wrapper) cookbook locally, chef-vault communication will be very difficult. If you set an attribute default['dev_mode']
to true
then these attributes
will be used to setup Jenkins security.
default['jenkins-server']['dev_mode']['security']['password']
- This password is used for the GUI login. Default "admin"default['jenkins-server']['dev_mode']['security']['public_key']
- This public key (paired with the private key) is used for Jenkins CLI authenticationdefault['jenkins-server']['dev_mode']['security']['private_key']
- This private key (paired with the public key) is used for Jenkins CLI authentication
Some attributes that overwrite the Jenkins cookbook attributes:
default['jenkins']['master']['version']
- Jenkins version. Default 1.619-1.1default['jenkins']['master']['jvm_options']
- JVM options. Default "-Xms256m -Xmx256m" which sets the memory usage to 256 MBdefault['jenkins']['master']['listen_address']
- Listen address. Default "127.0.0.1". So the Jenkins application is only reachable from localhost or through Nginx.
Some attributes that overwrite the Java cookbook attributes:
default['java']['jdk_version']
- Version. Default 7
You can add plugins to the default['jenkins-server']['plugins']
array.
Add a Jenkins plugin "myplugin" like below. You can specify a version. If you want to configure it, set configure to true
and specify a cookbook and recipe. Use the jenkins_script
resource to configure your plugin with a groovy script.
Take a look at the plugin recipes in this cookbook for examples.
default['jenkins-server']['plugins']['myplugin'] = {
'version' => '1.0',
'configure' => true,
'cookbook' => 'mycookbook',
'recipe' => 'myrecipe_plugin_example'
}
Plugins can be configured with groovy scripts. Test them at your Jenkins instance:
http://<host>:8080/script
With the doInspector method from javaworld.com you can figure out the properties and methods of your plugin. The Jenkins core API documentation can be found at http://javadoc.jenkins-ci.org.
def doInspector(obj) {
def inspector = new groovy.inspect.Inspector(obj)
def inspectorReport = new StringBuilder()
inspectorReport << "Object under inspection "
inspectorReport << (inspector.isGroovy() ? "IS" : "is NOT") << " Groovy!\n"
inspectorReport << "METHODS\n"
def methods = inspector.methods
methods.each {
inspectorReport << "\t" << it.toString() << "\n"
}
inspectorReport << "\nMETA METHODS\n"
def metaMethods = inspector.metaMethods
metaMethods.each {
inspectorReport << "\t" << it.toString() << "\n"
}
inspectorReport << "\nPROPERTY INFO\n"
def properties = inspector.propertyInfo
properties.each {
inspectorReport << "\t" << it.toString() << "\n"
}
println inspectorReport
}
Include jenkins-server
in your node's run_list
:
json
{
"run_list": [
"recipe[jenkins-server::default]"
]
}
The default recipe includes the following recipies:
if node['jenkins-server']['java']['install']
include_recipe 'java'
end
if node['jenkins-server']['ant']['install']
include_recipe 'ant'
end
if node['jenkins-server']['git']['install']
include_recipe 'git'
end
if node['jenkins-server']['nginx']['install']
include_recipe 'jenkins-server::nginx'
end
include_recipe 'jenkins-server::master'
include_recipe 'jenkins-server::security'
include_recipe 'jenkins-server::settings'
include_recipe 'jenkins-server::plugins'
include_recipe 'jenkins-server::jobs'
include_recipe 'jenkins-server::composer'
if node['jenkins-server']['slaves']['enable']
include_recipe 'jenkins-server::slaves_credentials'
include_recipe 'jenkins-server::slaves'
end
The MIT License (MIT)
Author:: Pieter Vogelaar ([email protected])