Adoptable Cookbooks List

Looking for a cookbook to adopt? You can now see a list of cookbooks available for adoption!
List of Adoptable Cookbooks

Supermarket Belongs to the Community

Supermarket belongs to the community. While Chef has the responsibility to keep it running and be stewards of its functionality, what it does and how it works is driven by the community. The chef/supermarket repository will continue to be where development of the Supermarket application takes place. Come be part of shaping the direction of Supermarket by opening issues and pull requests or by joining us on the Chef Mailing List.

Select Badges

Select Supported Platforms

Select Status

RSS

jenkins (86) Versions 2.3.0

Installs and configures Jenkins CI master & slaves

Policyfile
Berkshelf
Knife
cookbook 'jenkins', '= 2.3.0', :supermarket
cookbook 'jenkins', '= 2.3.0'
knife supermarket install jenkins
knife supermarket download jenkins
README
Dependencies
Changelog
Quality 0%

jenkins Cookbook

Build Status

Installs and configures Jenkins CI master & node slaves. Resource providers to support automation via jenkins-cli, including job create/update.

This project is managed by the CHEF Release Engineering team. For more information on the Release Engineering team's contribution, triage, and release process, please consult the CHEF Release Engineering OSS Management Guide.

Requirements

  • Chef 11 or higher
  • Ruby 1.9.3 or higher

Attributes

In order to keep the README managable and in sync with the attributes, this cookbook documents attributes inline. The usage instructions and default values for attributes can be found in the individual attribute files.

Examples

Documentation and examples are provided inline using YARD. The tests and fixture cookbooks in tests and tests/fixtures are intended to be a further source of examples.

Recipes

master

The master recipe will create the required directory structure and install jenkins. There are two installation methods, controlled by the node['jenkins']['master']['install_method'] attribute:

  • package - Install Jenkins from the official jenkins-ci.org packages
  • war - Download the latest version of the WAR file and configure it with Runit

java

By default, this cookbook does not install, manage, or manipulate a JDK, as that is outside of the scope of Jenkins. The package installation method will automatically pull in a valid Java if one does not exist, by the nature of package installers. However, the war installation method will require you to install a valid Java runtime. This very simple recipe installs OpenJDK 7 on the target system. If you need a more complex Java setup, you should use the community cookbook or write your own. For more information and warnings, please see the inline documentation in the jenkins::java recipe.

This pattern is not unique. RHEL Jenkins packages do not depend on a Java, since there are so many derivatives to choose from.

Resource/Provider

jenkins_command

This resource executes arbitrary commands against the Jenkins CLI, supporting the following actions:

:execute
jenkins_command 'safe-restart'

To reload the configuration from disk:

jenkins_command 'reload-configuration'

To prevent Jenkins from starting any new builds (in preparation for a shutdown):

jenkins_command 'quiet-down'

NOTE You must add your own not_if/only_if guards to the jenkins_command to prevent duplicate commands from executing. Just like Chef's core execute resource, the jenkins_command resource has no way of being idempotent.

jenkins_script

This resource executes arbitrary Java or Groovy commands against the Jenkins master. By the nature of this command, it is not idempotent.

jenkins_script 'println("This is Groovy code!")'
jenkins_script 'add_authentication' do
  command <<-EOH.gsub(/^ {4}/, '')
    import jenkins.model.*
    import hudson.security.*
    import org.jenkinsci.plugins.*

    def instance = Jenkins.getInstance()

    def githubRealm = new GithubSecurityRealm(
      'https://github.com',
      'https://api.github.com',
      'API_KEY',
      'API_SECRET'
    )
    instance.setSecurityRealm(githubRealm)

    def strategy = new FullControlOnceLoggedInAuthorizationStrategy()
    instance.setAuthorizationStrategy(strategy)

    instance.save()
  EOH
end

jenkins_credentials

NOTE The use of the Jenkins credentials resource requries the Jenkins credentials plugin. This plugin began shipping with Jenkins 1.536. On older Jenkins installations, you will need to install the credentials plugin at version 1.6 or higher to utilize this resource. On newer versions of Jenkins, this resource should work correctly.

Each credential can be referenced in job by its unique ID.
You can set this ID when creating credential, and set the same ID in job configuration.
To generate a unique ID, you can use linux command uuidgen.

This resource manages Jenkins credentials, supporting the following actions:

:create, :delete

The following type of credentials are supported:

  • Password - Basic username + password credentials.
  • Private Key - Credentials that use a username + private key (optionally protected with a passphrase).

The jenkins_credentials resource is actually the base resource for several resources that map directly back to a credentials type:

  • jenkins_password_credentials
  • jenkins_private_key_credentials

This uses the Jenkins Groovy API to create/delete credentials. It also supports whyrun mode.

The :create action idempotently creates a set of Jenkins credentials on the current node. The username attribute (also the name attribute) corresponds to the username of the credentials on the target node. You may also specify a description which is useful in credential identification.

# Create password credentials
jenkins_password_credentials 'wcoyote' do
  id 'f2361e6b-b8e0-4b2b-890b-82e85bc1a59f'
  description 'Wile E Coyote'
  password    'beepbeep'
end

# Create private key credentials
jenkins_private_key_credentials 'wcoyote' do
  id 'fa3aab48-4edc-446d-b1e2-1d89d86f4458'
  description 'Wile E Coyote'
  private_key "-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQ..."
end

# Private keys with a passphrase will also work
jenkins_private_key_credentials 'wcoyote' do
  description 'Eile E Coyote'
  private_key "-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQ..."
  passphrase  'beepbeep'
end

The :delete action idempotently removes a set of Jenkins credentials from the system. You can use the base jenkins_credentials resource or any of its children to perform the deletion.

jenkins_credentials 'wcoyote' do
  action :delete
end

jenkins_private_key_credentials 'wcoyote' do
  action :delete
end

NOTE Credentials in Jenkins can be created with 2 different "scopes" which determines where the credentials can be used:

  • GLOBAL - This credential is available to the object on which the credential is associated and all objects that are children of that object. Typically you would use global-scoped credentials for things that are needed by jobs.
  • SYSTEM - This credential is only available to the object on which the credential is associated. Typically you would use system-scoped credentials for things like email auth, slave connection, etc, i.e. where the Jenkins instance itself is using the credential. Unlike the global scope, this significantly restricts where the credential can be used, thereby providing a higher degree of confidentiality to the credential.

The credentials created with the jenkins_credentials are assigned a GLOBAL scope.

jenkins_job

This resource manages Jenkins jobs, supporting the following actions:

:create, :delete, :disable, :enable

The resource is fully idempotent and convergent. It also supports whyrun mode.

The :create action requires a Jenkins job config.xml. This config file must exist on the target node and contain a valid Jenkins job configuration file. Because the Jenkins CLI actually reads and generates its own copy of this file, do NOT write this configuration inside of the Jenkins job. We recommend putting them in Chef's file cache path:

xml = File.join(Chef::Config[:file_cache_path], 'bacon-config.xml')

# You could also use a `cookbook_file` or pure `file` resource to generate
# content at this path.
template xml do
  source 'custom-config.xml.erb'
end

# Create a jenkins job (default action is `:create`)
jenkins_job 'bacon' do
  config xml
end
jenkins_job 'bacon' do
  action :delete
end

You can disable a Jenkins job by specifying the :disable option. This will disable an existing job, if and only if that job exists and is enabled. If the job does not exist, an exception is raised.

jenkins_job 'bacon' do
  action :disable
end

You can enable a Jenkins job by specifying the :enable option. This will enable an existing job, if and only if that job exists and is disabled. If the job does not exist, an exception is raised.

jenkins_job 'bacon' do
  action :enable
end

jenkins_plugin

This resource manages Jenkins plugins, supporting the following actions:

:install, :uninstall, :enable, :disable

This uses the Jenkins CLI to install plugins. By default, it does a cold deploy, meaning the plugin is installed while Jenkins is still running. Some plugins may require you restart the Jenkins instance for their changed to take affect.

  • A plugin's dependencies are also installed by default, this behavior can be disabled by setting the install_deps attribute to false.
  • This resource does not install plugin dependencies from a a given hpi/jpi URL - you must specify all plugin dependencies or Jenkins may not startup correctly!

The :install action idempotently installs a Jenkins plugin on the current node. The name attribute corresponds to the name of the plugin on the Jenkins Update Center. You can also specify a particular version of the plugin to install. Finally, you can specify a full source URL or local path (on the node) to a plugin.

# Install the latest version of the greenballs plugin
jenkins_plugin 'greenballs'

# Install version 1.3 of the greenballs plugin
jenkins_plugin 'greenballs' do
  version '1.3'
end

# Install a plugin from a given hpi (or jpi)
jenkins_plugin 'greenballs' do
  source 'http://updates.jenkins-ci.org/download/plugins/greenballs/1.10/greenballs.hpi'
end

# Don't install a plugins dependencies
jenkins_plugin 'github-oauth' do
  install_deps false
end

Depending on the plugin, you may need to restart the Jenkins instance for the plugin to take affect:

Package installation method:
ruby
jenkins_plugin 'a_complicated_plugin' do
notifies :restart, 'service[jenkins]', :immediately
end

War installation method:
ruby
jenkins_plugin 'a_complicated_plugin' do
notifies :restart, 'runit_service[jenkins]', :immediately
end

For advanced users, this resource exposes an options attribute that will be passed to the installation command. For more information on the possible values of these options, pleaes consult the documentation for your Jenkins installation.

jenkins_plugin 'a_really_complicated_plugin' do
  options '-deploy -cold'
end

The :uninstall action removes (uninstalls) a Jenkins plugin idempotently on the current node.

jenkins_plugin 'greenballs' do
  action :uninstall
end

The :enable action enables a plugin. If the plugin is not installed, an exception is raised. If the plugin is already enabled, no action is taken.

jenkins_plugin 'greenballs' do
  action :enable
end

The :disable action disables a plugin. If the plugin is not installed, an exception is raised. If the plugin is already disabled, no action is taken.

jenkins_plugin 'greenballs' do
  action :disable
end

NOTE You may need to restart Jenkins after changing a plugin. Because this varies on a case-by-case basis (and because everyone chooses to manage their Jenkins infrastructure differently) this LWRP does NOT restart Jenkins for you.

jenkins_slave

This resource manages Jenkins slaves, supporting the following actions:

:create, :delete, :connect, :disconnect, :online, :offline

The following slave launch methods are supported:

  • JNLP/Java Web Start - Starts a slave by launching an agent program through JNLP. The launch in this case is initiated by the slave, thus slaves need not be IP reachable from the master (e.g. behind the firewall). This launch method is supported on *nix and Windows platforms.
  • SSH - Jenkins has a built-in SSH client implementation that it can use to talk to remote sshd daemon and start a slave agent. This is the most convenient and preferred method for Unix slaves, which normally has sshd out-of-the-box.

The jenkins_slave resource is actually the base resource for several resources that map directly back to a launch method:

  • jenkins_jnlp_slave - As JNLP Slave connections are slave initiated, this resource should be part of a slave's run list.
  • jenkins_ssh_slave - As SSH Slave connections are master initiated, this resource should be part of a master's run list.

The :create action idempotently creates a Jenkins slave on the master. The name attribute corresponds to the name of the slave (which is also used to uniquely identify the slave).

# Create a basic JNLP slave
jenkins_jnlp_slave 'builder' do
  description 'A generic slave builder'
  remote_fs   '/home/jenkins'
  labels      ['builder', 'linux']
end

# Create a slave launched via SSH
jenkins_ssh_slave 'executor' do
  description 'Run test suites'
  remote_fs   '/share/executor'
  labels      ['executor', 'freebsd', 'jail']

  # SSH specific attributes
  host        '172.11.12.53' # or 'slave.example.org'
  user        'jenkins'
  credentials 'wcoyote'
end

# A slave's executors, usage mode and availability can also be configured
jenkins_jnlp_slave 'smoke' do
  description     'Runs a series of high-level smoke tests'
  remote_fs       '/home/jenkins'
  executors       5
  usage_mode      'exclusive'
  availability    'demand'
  in_demand_delay 1
  idle_delay      3
  labels          ['runner', 'fast']
end

# Create a slave with a full environment
jenkins_jnlp_slave 'integration' do
  description 'Runs the high-level integration suite'
  remote_fs   '/home/jenkins'
  labels      ['integration', 'rails', 'ruby']
  environment(
    RAILS_ENV: 'test',
    GCC:       '1_000_000_000',
  )
end

# Windows JNLP slave
jenkins_windows_slave 'mywinslave' do
  remote_fs 'C:/jenkins'
  user       '.\Administrator'
  password   'MyPassword'
end

The :delete action idempotently removes a slave from the cluster. Any services used to manage the underlying slave process will also be disabled.

jenkins_jnlp_slave 'builder' do
  action :delete
end

jenkins_ssh_slave 'executor' do
  action :delete
end

The :connect action idempotently forces the master to reconnect to the specified slave. You can use the base jenkins_slave resource or any of its children to perform the connection.

jenkins_slave 'builder' do
  action :connect
end

jenkins_ssh_slave 'executor' do
  action :connect
end

The :disconnect action idempotently forces the master to disconnect the specified slave. You can use the base jenkins_slave resource or any of its children to perform the connection.

jenkins_slave 'builder' do
  action :disconnect
end

jenkins_ssh_slave 'executor' do
  action :disconnect
end

The :online action idempotently brings a slave back online. You can use the base jenkins_slave resource or any of its children to bring the slave online.

jenkins_slave 'builder' do
  action :online
end

jenkins_ssh_slave 'executor' do
  action :online
end

The :offline action idempotently takes a slave temporarily offline. An optional reason for going offline can be provided with the offline_reason attribute. You can use the base jenkins_slave resource or any of its children to take a slave offline.

jenkins_slave 'builder' do
  action :offline
end

jenkins_ssh_slave 'executor' do
  offline_reason 'ran out of energon'
  action :offline
end

NOTE It's worth noting the somewhat confusing differences between disconnecting and off-lining a slave:

  • Disconnect - Instantly closes the channel of communication between the master and slave. Currently executing jobs will be terminated immediately. If a slave is configured with an availability of always the master will attempt to reconnect to the slave.
  • Offline - Keeps the channel of communication between the master and slave open. Currently executing jobs will be allowed to finish, but no new jobs will be scheduled on the slave.

jenkins_user

This resource manages Jenkins users, supporting the following actions:

:create, :delete

This uses the Jenkins groovy API to create users.

The :create action idempotently creates a Jenkins user on the current node. The id attribute corresponds to the username of the id of the user on the target node. You may also specify a name, email, and list of SSH keys.

# Create a Jenkins user
jenkins_user 'grumpy'

# Create a Jenkins user with specific attributes
jenkins_user 'grumpy' do
  full_name    'Grumpy Dwarf'
  email        'grumpy@example.com'
  public_keys  ['ssh-rsa AAAAB3NzaC1y...']
end

The :delete action removes a Jenkins user from the system.

jenkins_user 'grumpy' do
  action :delete
end

Caveats

Authentication

If you use or plan to use authentication for your Jenkins cluster (which we highly recommend), you will need to set a special value in the run_context:

node.run_state[:jenkins_private_key]

The underlying executor class (which all HWRPs use) intelligently adds authentication information to the Jenkins CLI commands if this value is set. The method used to generate and populate this key-pair is left to the user:

# Using search
master = search(:node, 'fqdn:master.ci.example.com').first
node.run_state[:jenkins_private_key] = master['jenkins']['private_key']

# Using encrypted data bags and chef-sugar
private_key = encrypted_data_bag_item('jenkins', 'keys')['private_key']
node.run_state[:jenkins_private_key] = private_key

The associated public key must be set on a Jenkins user. You can use the jenkins_user resource to create this pairing. Here's an example that loads a keypair and assigns it appropiately:

jenkins_keys = encrypted_data_bag_item('jenkins', 'keys')

require 'openssl'
require 'net/ssh'

key = OpenSSL::PKey::RSA.new(jenkins_keys['private_key'])
private_key = key.to_pem
public_key = "#{key.ssh_type} #{[key.to_blob].pack('m0')}"

# Create the Jenkins user with the public key
jenkins_user 'chef' do
  public_keys [public_key]
end

# Set the private key on the Jenkins executor
node.run_state[:jenkins_private_key] = private_key

Please note that older versions of Jenkins (< 1.555) permitted login via CLI for a user defined in Jenkins configuration with an SSH public key but not present in the actual SecurityRealm, and this is no longer permitted. If an operation requires any special permission at all, you must authenticate as a real user. This means that if you have LDAP or GitHub OAuth based authn/authz enabled the user you are using for configuraiton tasks must have an associated account in the external services. Please see JENKINS-22346 for more details.

If (and only if) you have your Jenkins instance configured to use the PAM (Unix user/group database) security realm you can set the
username and password the CLI uses via these two run_context values:

node.run_state[:jenkins_username]
node.run_state[:jenkins_password]

Proxies

If you need to pass through a proxy to communicate between your masters and slaves, you will need to set a special node attribute:

node['jenkins']['executor']['proxy']

The underlying executor class (which all HWRPs use) intelligently passes proxy information to the Jenkins CLI commands if this attribute is set. It should be set in the form HOST:PORT:

node.set['jenkins']['executor']['proxy'] = '1.2.3.4:5678'

Development

Please see the [Contributing](CONTRIBUTING.md) and [Issue Reporting](ISSUES.md) Guidelines.

License & Authors

Copyright 2010 VMware, Inc.
Copyright 2011 Fletcher Nichol
Copyright 2013-2014 Chef Software, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Dependent cookbooks

apt ~> 2.0
runit ~> 1.5
yum ~> 3.0

Contingent cookbooks

boilerplate Applicable Versions
boilerplate_php Applicable Versions
chef_jenkins Applicable Versions
jenkins-php Applicable Versions
jenkins-server Applicable Versions
jenkins-tools Applicable Versions
jenkins_build Applicable Versions
jenkins_config Applicable Versions
jenkins_drupal Applicable Versions
jenkins_jnlp_slave Applicable Versions
jenkins_plugins Applicable Versions
jenkins_test_utils Applicable Versions
jenkins_utils Applicable Versions
jenkinsstack Applicable Versions
jjb_bootstrap Applicable Versions
kitchen-jenkins Applicable Versions
met-jenkins Applicable Versions
pennyworth Applicable Versions
pipeline Applicable Versions
sdlc_structure Applicable Versions
sdlc_structure 0.1.12
sdlc_structure 0.2.1
sdlc_structure 0.3.1
sdlc_structure 0.4.1
sdlc_structure 0.5.1
sdlc_structure 0.6.1
sdlc_structure 0.7.1
sdlc_structure 0.8.1
sdlc_structure 0.9.1
sdlc_structure 0.10.1
sdlc_structure 0.11.1
sdlc_structure 0.12.1
sdlc_structure 0.13.1
sdlc_structure 0.14.2
sdlc_structure 0.15.1
sdlc_structure 0.16.1
sdlc_structure 0.17.1
sdlc_structure 0.18.1
sdlc_structure 0.19.1
sdlc_structure 0.20.1
sdlc_structure 0.21.1
sdlc_structure 0.22.1
sdlc_structure 0.23.1
sdlc_structure 0.24.1
sdlc_structure 0.25.1
sdlc_structure 0.26.1
sdlc_structure 0.27.1
sdlc_structure 0.28.1
sdlc_structure 0.29.1
sdlc_structure 0.30.1
sdlc_structure 0.31.1
sdlc_structure 0.32.1
sdlc_structure 0.33.1
sdlc_structure 0.34.1
sdlc_structure 0.35.1
sdlc_structure 0.36.1
sdlc_structure 0.37.1
sdlc_structure 0.38.1
sdlc_structure 0.39.1
sdlc_structure 0.40.1
sdlc_structure 0.41.1
sdlc_structure 0.42.1
sdlc_structure 0.43.1
sdlc_structure 0.44.1
sdlc_structure 0.45.1
sdlc_structure 0.46.1
sdlc_structure 0.47.1
sdlc_structure 0.48.1
sdlc_structure 0.49.1
sdlc_structure 0.50.1
sdlc_structure 0.51.1
sdlc_structure 0.52.1
sdlc_structure 0.53.1
sdlc_structure 0.54.1
sdlc_structure 0.55.1
sdlc_structure 0.56.1
sdlc_structure 0.57.1
sdlc_structure 0.58.1
sdlc_structure 0.59.1
sdlc_structure 0.60.1
sdlc_structure 0.61.1
sdlc_structure 0.62.1
sdlc_structure 0.63.1
sdlc_structure 0.64.1
sdlc_structure 0.65.1
sdlc_structure 0.66.1
sdlc_structure 0.67.1
sdlc_structure 0.68.1
sdlc_structure 0.69.1
sdlc_structure 0.70.1
sdlc_structure 0.71.1
sdlc_structure 0.72.1
sdlc_structure 0.73.1
sdlc_structure 0.74.1
sdlc_structure 0.75.1
sdlc_structure 0.76.1
sdlc_structure 0.77.1
sdlc_structure 0.78.1
sdlc_structure 0.79.1
sdlc_structure 0.80.1
sdlc_structure 0.81.1
sdlc_structure 0.82.1
sdlc_structure 0.83.1
sdlc_structure 0.84.1
sdlc_structure 0.85.1
sdlc_structure 0.86.1
sdlc_structure 0.87.1
sdlc_structure 0.88.1
sdlc_structure 0.89.1
sdlc_structure 0.90.1
sdlc_structure 0.91.1
sdlc_structure 0.92.1
sdlc_structure 0.93.1
sdlc_structure 0.94.1
sdlc_structure 0.95.1
sdlc_structure 0.96.1
sdlc_structure 0.97.1
sdlc_structure 0.98.1
sdlc_structure 0.99.1
sdlc_structure 0.100.1
sdlc_structure 0.101.1
sdlc_structure 0.102.1
sdlc_structure 0.103.1
sdlc_structure 0.104.1
sdlc_structure 0.105.1
sdlc_structure 0.106.1
sdlc_structure 0.107.1
sdlc_structure 0.108.1
sdlc_structure 0.109.1
sdlc_structure 0.110.1
sdlc_structure 0.111.1
sdlc_structure 0.112.1
sdlc_structure 0.113.1
sdlc_structure 0.114.1

jenkins Cookbook CHANGELOG

This file is used to list changes made in each version of the jenkins cookbook.

v2.3.0 (2015-05-14)

New Feature

  • Add stable source support for package installation
  • Add support for jvm_options on slave_ssh resource
  • Support executing commands prior to launching Jenkins Windows slave
  • Add username/password support to executor

Improvement

  • Remove EOL Ruby, update with current supported Rubies
  • Update .kitchen.yml
  • Use ChefDK for all Travis testing
  • Fix all Rubocop 0.28.0 style errors
  • Create system user and group for jnlp slave if use_system_account flag is set.
  • jenkins_plugin: Do a better job understanding "latest" version
  • Mark all credential resources as sensitive; Fixes #288
  • Password credentials ID does not need to be a UUID
  • Restart Windows service on failure; Fixes #334
  • Re-install the Windows service if the winsw XML changes
  • Properly restart the service if the slave jar is updated

Bug

  • Instantiate Windows-specific resource class; Fixes #336
  • Need to escape the \n when there are multiple public keys.

v2.2.2 (2015-01-15)

Bug

  • Gem::Version raising ArgumentError for weirdly versioned Jenkins plugins
  • Force UTF-8 encoding when parsing update center JSON
  • README grammar fixes

v2.2.1 (2014-12-02)

Bug

  • Ensure Win service install command respects alternate service names

v2.2.0 (2014-12-02)

Bug

  • Handle jobs that do not have a disabled attribute
  • Remove unneeded service restart in Windows slaves
  • Update Jenkins service check to use WIN32OLE
  • Properly quote executor file paths cause $WINDOWS
  • Properly escape backslashes in generated Groovy code
  • Jenkins timeout shouldn't rescue Net::HTTP timeout
  • Make sure Net::HTTP#use_ssl is turned on for https end-point
  • Wrap converted Groovy strings in single quotes
  • Recover from commands executed with unknown credentials. This should also fix some cases of JENKINS-22346.

Improvement

  • Use atomic updates when downloading the slave JAR
  • Create the slave.jar in a slave’s JENKINS_HOME
  • Support a checksum attribute for winsw.exe download
  • Support setting the PATH on Windows slave
  • Add .NET 4.0 compat fix for winsw
  • Restart services when slave.jar is updated
  • Allow jenkins_slave to be used as a standalone resource
  • Add attribute for configuring Runit sv_timeout on masters installed from war
  • Add attribute for creating jenkins user as a system account
  • Allow Executor#execute! to pass options to underlying Shellout instance.
  • Set the senstive attribute for the jenkins cli private key file
  • Don’t backup plugins on uninstall
  • Properly allow installation of specific versions of a plugin. Previously this only worked when a source URL was provided.
  • Optionally ensure a plugin’s dependencies are installed before proceeding with it’s installation
  • Handle plugin downgrades correctly (requires an uninstall of existing, newer version).

v2.1.2 (2014-07-02)

  • Fix a bug where jenkins_windows_slave was being called as jenkins_jnlp_slave

v2.1.1 (2014-06-30)

  • Use the update-center to install plugins and their dependencies
  • Handle super calls correctly in load_current_resource
  • Backport Chef patches to temporary libraries
  • Default Slave#environment to nil instead of {}
  • Fix a bug where super was called in DSL methods

v2.1.0 (2014-06-26)

  • Change Jenkins command prefix to use the slave object
  • Escape data given to the executor
  • Always read plugin manifest files as UTF
  • Typo: Shelllwords -> Shellwords
  • Upgrade to Berkshelf 3
  • Add ChefSpec tests for recipes
  • Add Jenkins::Executor tests
  • Bug: Use ::File instead of File
  • Remove foodcritic
  • Fix Rubocop warnings
  • Only create user, group and directories on war installations
  • Only create supporting resources on JNLP slaves
  • Split jnlp and ssh slave fixtures
  • Document that SSH slaves should be created on the master
  • Ensure compiled attributes respect overrides
  • Ensure plugin installs respect global mirror setting
  • Add fallback to jenkins_slave matcher if authn is enabled
  • Update authn int tests to load private key from data bag item
  • Add integration test coverage for smoke tests
  • Add support for listening on a specific address
  • Allow user to specify the password
  • Use a temporary file to run groovy scripts
  • Use executor['timeout'] for timeout in ShellOut in executor.execute!
  • Give timeout a default value (60) in the executor
  • Ignore Errno::ENETUNREACH until timeout
  • Fix a bug in default windows domain name
  • Update winsw version to 1.16
  • Upgrade to ChefSpec 4 and fix CI
  • Use the run_state to store sensitive information
  • Switch to LWHRPS for everything
  • Handle nil values in credentials comparison
  • Add ChefSpec matchers for all LWRPs
  • Don't automatically restart after plugin installation
  • Add the ability to pass in a list of additional options in jenkins_plugin
  • Specify actions and default_action in inherited resources

v2.0.2 (2014-01-30)

  • Add support for prefix and suffix commands on SSH nodes
  • Don't commit documentation into git
  • Fix YARD-generated documentation
  • Fix plugin output parsing
  • Accept a 403 response, indicating the server is "ready"
  • Use a custom URI joining method
  • Document the need for the Jenkins credentials plugin
  • Fix a typo in the slave jar URL
  • Fix typos in README
  • Fix grammar in the Jenkins helper error
  • Update Rubocop

v2.0.0 (2014-01-14)

This is a major refactor of the Jenkins cookbook and is not backwards-compatible.
- Updated to the latest gems
- Added a full Test Kitchen integration suite for every resource
- Added Rubocop + Foodcritic + Travis
- Updated contributing guidelines
- Updated issue reporting guidelines
- Refactored README format - attribute documentation is now inline. Please see the specific attribute file for documentation, rather than a verbose README
- Added a Rakefile for encapsulating commands
- Move testing instructions into contribution guidelines
- Remove old TODO file
- Refactor attributes into semantic groupings and namespaces
- jenkins.cli has been removed
- jenkins.java_home has been changed to jenkins.java and accepts the full path to the java binary, not the JAVA_HOME
- jenkins.iptables_allow has been removed
- jenkins.mirror -> jenkins.master.mirror
- jenkins.executor created
- jenkins.executor.timeout created
- jenkins.executor.private_key created
- jenkins.executor.proxy created
- jenkins.master created and only refers to the Jenkins master installation
- jenkins.master.source created to refer to the full URL of the war download
- jenkins.master.jvm_options created
- jenkins.master.jenkins_args added
- jenkins.master.url -> jenkins.master.endpoint
- jenkins.master.log_directory created
- jenkins.node attributes have all been removed
- jenkins.server attributes have all been removed
- Removed Chef MiniTest handler
- Created a new executor class for running commands through the CLI
- Create jenkins_command resource for executing arbitrary commands against the Jenkins CLI
- Create jenkins_script resource for executing arbitrary groovy scripts agains the Jenkins CLI
- Create jenkins_credentials resource for creating and managing Jenkins credentials
- Refactor jenkins_job resource for creating and managing jobs
- Refactor jenkins_plugin resource for creating and managing plugins
- Create jenkins_slave (and sub-resources) for managing Jenkins slaves (formerly called "nodes")
- Add jenkins_user resource for creating and managing users
- Remove dependencies on java, apache2, nginx, and iptables
- Remove jenkins_cli resource (it's been replaced by jenkins_command)
- Remove jenkins_execute resource (it's been replaced by jenkins_command)
- Remove the pesky "block_until_operational" Ruby block
- Remove jenkins_node resource (it's now a series of jenkins_slave resources)
- Don't pin plugins (users should explictly provide a version to ensure pinning)
- Upgrade apt and yum dependencies
- Allow full customization of the war file download URL
- Remove apache2 proxy, nginx proxy, and iptables support; they are outside the scope of this cookbook and add unnecessary complication
- Default recipe has been removed
- Iptables recipe has been removed
- Added a very basic Java recipe with caveats
- Added a Jenkins master recipe (formerly called "server")
- Removed "node" recipes - they have all been replaced by HWRPs
- Removed proxy recipes
- Updated Debian and RedHat templates to the latest version
- Added the ability to add authentication
- Added custom ServerSpec matchers
- "node" renamed to "slave"
- "server" renamed to "master"

v1.2.2

Bug

  • COOK-3742 - Remove trailing comma (restores compatability with Ruby 1.8)

v1.2.0

Improvement

  • COOK-3710 - Allow winsw url to be changed with a node attribute

Bug

  • COOK-3709 - Use correct attribute value for java_home
  • COOK-3701 - Fix a refactor bug where a template variable was removed that was used in a nested template
  • COOK-3594 - Fix MiniTest Chef Handler tests for directory permissions

v1.1.0

Bug

  • COOK-3683 - Fix plugin provider failures finding the current plugin version
  • COOK-3667 - Unbreak Travis-CI integration
  • COOK-3623 - Fix issue where plugins were never updated even if you bump the plugin version in attributes
  • COOK-3620 - Fix Jenkins _node_jnlp_test.rb assumptions
  • COOK-3517 - Various bug fixes for jenkins::windows
  • COOK-3516 - Fix Jenkins slaves that use JNLP when Jenkins has security enabled

New Feature

  • COOK-3619 - Support intermediate SSL certificates

Improvement

  • COOK-3587 - Adding minitest-handler to the runlist for the node suite in Jenkins cookbook

v1.0.0

  • Initial Chef Software release

v0.7.0

Foodcritic Metric
            

2.3.0 failed this metric

FC001: Use strings in preference to symbols to access node attributes: /tmp/cook/527fe32846eb24de88658185/jenkins/libraries/_helper.rb:294
FC001: Use strings in preference to symbols to access node attributes: /tmp/cook/527fe32846eb24de88658185/jenkins/libraries/_helper.rb:303