gocd / go-cookbook

Cookbook that installs and configures the open-source ThoughtWorks Studios GoCD product
http://www.gocd.org/
Apache License 2.0
45 stars 66 forks source link
cookbooks gocd-agent gocd-server

GoCD Cookbook

This cookbook is no longer maintained. Please log a GitHub issue if you're looking to maintain it.

This cookbook is here to help you setup GoCD servers and agents in an automated way.

Scope

Requirements

Certain resource properties are broken in Chef 13. Check the deprecations in the changelog for more details.

Dependencies

Supported Platforms

This cookbook has been tested on the following platforms:

Usage

  1. Add this cookbook to your Chef Server, either by installing with knife or by adding it to your Berksfile: cookbook 'gocd', '~>1.3.2'

  2. Change the default configuration [attributes](# Go Server attributes) by overriding the node attributes:

    • via a role, or
    • by declaring it in another cookbook at a higher precedence levels
  3. Run the recipes on the specific nodes as:

    • chef-client --runlist 'recipe[gocd]' - This will install the GoCD server and agent on the same machine
    • chef-client --runlist 'recipe[gocd::server]' - This will install the GoCD server with specified configuration
    • chef-client --runlist 'recipe[gocd::agent]' - This will install the GoCD agent with specified configuration.

    OR

    Associate the recipes with the desired roles. Here's an example role with default recipes:

    name 'demo'
    description 'Sample role for using the go-cookbook'
    
    default_attributes(
    'gocd' => {
      'version' => '17.3.0-4669',
      'use_experimental' => true
    }
    )
    
    run_list %w(
    recipe[gocd]
    )

1.0 release notes

This cookbook has undergone a major rewrite and has little to do with pre-1.0 versions. If you have been using go-cookbook previously then please note that:

Java

Please note that java 8 is recommended to run Go server and agents. This cookbook sets node['java']['jdk_version'] at force_default level but it may not work properly when you include java in node run_list before gocd cookbook. The safest approach is to set java version in node attributes (in a role or environment).

Install method

Repository

By default installation source is done from apt or yum repositories from official sources at https://www.gocd.org/download/.

The apt repository can be overridden by changing any these attributes:

The yum repository can be overridden by changing any these attributes:

Experimental channel

By default the GoCD cookbook installs latest stable version. You can install gocd from the experimental channel by setting the node['gocd']['use_experimental'] attribute to true

From remote file

The cookbook can skip adding a package repository and instead install a GoCD server or agent by downloading a remote file and installing it directly via dpkg or rpm. To use this method, set node['gocd']['install_method'] to 'package_file' and set node['gocd']['package_file']['baseurl'] to point to the remote file (e.g. 'http://my/custom/url')

The final download URL of file is built based on platform and node['gocd']['version'] (e.g. using the example baseurl above, http://my/custom/url/go-agent-15.2.0-2520.deb)

GoCD Server

gocd::server will install and start a GoCD server.

Go Server attributes

The cookbook provides the following attributes to configure the GoCD server:

Chef cookbook waits for the server to become responsive after restarting the service. These attributes can be used to tune it:

GoCD Agent

gocd::agent will install and start a GoCD agent. You can change the number of agents in node['gocd']['agent']['count']. The first agent is called go-agent, next ones are go-agent-#.

gocd::agent recipe uses the GoCD agent LWRP internally.

Go Agent attributes

The cookbook provides the following attributes to configure the GoCD agent:

Custom Resources

  1. gocd_agent

    • Actions:

    • :create

    • :delete

    • Attributes:

Attribute Name Default Description
agent_name create Name of the resource to be created or deleted.
service_action enable, start The GoCD agent service supports :status, :enable, :start, :restart, :stop
user go The user that can start and configure the GoCD agents.
group go The group of users that can configure the GoCD agents.
go_server_url nil The url of the GoCD server that the agent has to connect to. It should begin with https, should connect to the GO_SERVER_SSL_PORT, and end with /go. If this isn't set, then the go server ip is detected (provided go server is also installed using chef). The fallback option is https://localhost:8154/go
daemon true Whether to start the GoCD agent as a daemon process.
autoregister_key nil The autoregister key can be used to directly register the agent with the GoCD server without manual intervention.
autoregister_hostname nil The name by which the agent will be known to the GoCD server
autoregister_environments nil The GoCD environments to which the agent must belong to.
environments nil The GoCD environments to which the agent must belong to. This is DEPRECATED.
autoregister_resources nil The resources available on the gocd agent node which can be used with specific pipeline(s).
resources nil The resources available on the gocd agent node which can be used with specific pipeline(s). This is DEPRECATED.
elastic_agent_id nil The elastic agent id used to set the autoregister property agent.auto.register.elasticAgent.agentId.
elastic_agent_plugin_id nil The elastic agent plugin id. This is used to set the autoregister property agent.auto.register.elasticAgent.pluginId

Note: All of the above attributes are optional.

  1. gocd_agent_autoregister_file

This resource will create a file called autoregister.properties in the gocd agent's config directory. This is done so that the agent can directly register with the gocd server without manual intervention.

Attribute Name Default Description
owner go owner of the autoregister.properties file
group go group for the autoregister.properties file
autoregister_key nil The autogregister key from the go server config that can be used to register the agent
autoregister_hostname nil The name by which the agent will be known to the GoCD server
autoregister_environments nil The GoCD environments to which the agent must belong to.
environments nil The GoCD environments to which the agent must belong to. This is DEPRECATED.
autoregister_resources nil The resources available on the gocd agent node which can be used with specific pipeline(s).
resources nil The resources available on the gocd agent node which can be used with specific pipeline(s). This is DEPRECATED.
elastic_agent_id nil The elastic agent id used to set the autoregister property agent.auto.register.elasticAgent.agentId.
elastic_agent_plugin_id nil The elastic agent plugin id. This is used to set the autoregister property agent.auto.register.elasticAgent.pluginId
  1. gocd_plugin
Attribute Name Default Required Description
plugin_name nil true Name of the plugin
plugin_uri nil true Location of the plugin jar on the workstation.
server_work_dir /var/lib/go-server false The working directory of the go server to where the plguin jar needs to be copied to.

Beta

Attributes for elastic agents:

Deprecated

Please use node['gocd']['agent']['go_server_url'] instead of the following deprecated attributes:

GoCD Agent LWRP (currently only works on linux)

If the agent recipe + attributes is not flexible enough or if you prefer chef resources then you can add go-agent services with the gocd_agent LWRP.

Example agents

All resource attributes fall back to node attributes so agent can be defined in just one line:

gocd_agent 'my-agent'

It would create my-agent service and if all node values are correct then it would also autoregister.

A custom agent may look like this:

gocd_agent 'my-go-agent' do
  go_server_host 'go.example.com'
  go_server_port 80
  daemon true
  vnc    true
  autoregister_key 'bla-key'
  autoregister_hostname 'my-lwrp-agent'
  autoregister_environments 'production'
  autoregister_resources     ['java-8','ruby-2.2']
  workspace     '/mnt/big_drive'
end

GoCD autoregister file resource

If you want to set up agents your-way then this resource is helpful to only generate a valid autoregister.properties file:

Example use:

gocd_agent_autoregister_file '/var/mygo/autoregister.properties' do
  autoregister_key 'bla-key'
  autoregister_hostname 'mygo-agent'
  autoregister_environments 'stage'
  autoregister_resources     ['java-8','ruby']
end

Can be used to prepare elastic agents too:

gocd_agent_autoregister_file '/var/elastic/autoregister.properties' do
  autoregister_key 'some-key'
  autoregister_hostname 'elastic-agent'
  autoregister_environments 'testing'
  autoregister_resources     ['java-8']
  elastic_agent_id 'agent-id'
  elastic_agent_plugin_id 'elastic-agent-plugin-id'
end

GoCD plugin LWRP

You can install Go server plugins with the gocd_plugin LWRP like this

include_recipe 'gocd::server'

gocd_plugin 'github-pr-status' do
  plugin_uri 'https://github.com/gocd-contrib/gocd-build-status-notifier/releases/download/1.1/github-pr-status-1.1.jar'
end

Server Specification

When using the cookbook please refer to the server specification section of the GoCD documentation.

License

Apache License, Version 2.0