Skip to content

Commit 07a364c

Browse files
tomzoketan
authored andcommitted
gocd#50 support installation from custom repository or package file
Refactored adding apt or rpm repository to separate recipe intead of repeating code in agent and server recipe Added possible installation from remote_file. Default install method is still thoughtworks repository Updated and fixed readme
1 parent eea6198 commit 07a364c

File tree

5 files changed

+152
-62
lines changed

5 files changed

+152
-62
lines changed

README.md

+40-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,44 @@
11
# Go Cookbook
22

33
Hello friend! This cookbook is here to help you setup Go servers and agents
4-
in an automated way.
4+
in an automated way.
55

66
It's primarily tested on newer versions of Ubuntu, but should work on both Debian and Red Hat based distributions. There is also basic support for agents on Windows (enhancements appreciated!).
77

8+
## Install method
9+
10+
### Repository
11+
12+
By default installation source is done from apt or yum repositories from official sources at http://www.go.cd/download/.
13+
14+
The **apt** repository can be overriden by changing any these attributes:
15+
```ruby
16+
default['gocd']['repository']['apt']['uri'] = 'http://download.go.cd/gocd-deb/'
17+
default['gocd']['repository']['apt']['components'] = [ '/' ]
18+
default['gocd']['repository']['apt']['package_options'] = '--force-yes'
19+
default['gocd']['repository']['apt']['keyserver'] = 'pgp.mit.edu'
20+
default['gocd']['repository']['apt']['key'] = '0x9149B0A6173454C7'
21+
```
22+
The **yum** repository can be overriden by changing any these attributes:
23+
```ruby
24+
default['gocd']['repository']['yum']['baseurl'] = 'http://download.go.cd/gocd-rpm'
25+
default['gocd']['repository']['yum']['gpgcheck'] = false
26+
```
27+
28+
### From remote file
29+
30+
Cookbook can skip adding repository and install Go server or agent by downloading a remote file and install it directly via `dpkg` or `rpm`.
31+
32+
Change install method to 'package_file':
33+
```ruby
34+
node['gocd']['install_method'] = 'remote_file'
35+
```
36+
37+
And assign base url where packages are available for download
38+
```ruby
39+
node['gocd']['package_file']['baseurl'] = 'http://my/custom/url'
40+
```
41+
The final download URL of file is built based on platform and `node['gocd']['version']`. E.g. `http://my/custom/url/go-agent-15.2.0-2520.deb`
842

943
## Ideas
1044

@@ -33,10 +67,11 @@ You can use Vagrant and your own chef bootstrapped virtual box base image and va
3367
go recipe will install and configure a Windows Go agent on a Windows os, and associate it with an existing Go server. Does not automatically register agent.
3468

3569
Overrides available for go::agent_windows
36-
[:gocd][:agent][:server_host] - hostname or ip of Go server
37-
[:gocd][:agent][:install_path] - installation path for Go agent
38-
[:gocd][:agent][:java_home] - java home path if using existing java installation
39-
[:gocd][:agent][:download_url] - msi for agent install, if left empty will build download url using [:gocd][:version]
70+
* `node[:gocd][:agent][:server_host]` - hostname or ip of Go server
71+
* `node[:gocd][:agent][:install_path]` - installation path for Go agent
72+
* `node[:gocd][:agent][:java_home]` - java home path if using existing java installation
73+
* `node[:gocd][:agent][:download_url]` - msi for agent install, if left empty will build download url using `node[:gocd][:version]`
74+
4075

4176
# Authors
4277
Author:: Chris Kozak (<ckozak@gmail.com>)

attributes/default.rb

+32
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,35 @@
2121
end
2222

2323
default['gocd']['server']['install_path'] = 'C:\Program Files (x86)\Go Server'
24+
25+
default['gocd']['install_method'] = 'repository'
26+
27+
default['gocd']['repository']['apt']['uri'] = 'http://download.go.cd/gocd-deb/'
28+
default['gocd']['repository']['apt']['components'] = [ '/' ]
29+
default['gocd']['repository']['apt']['package_options'] = '--force-yes'
30+
default['gocd']['repository']['apt']['keyserver'] = 'pgp.mit.edu'
31+
default['gocd']['repository']['apt']['key'] = '0x9149B0A6173454C7'
32+
33+
default['gocd']['repository']['yum']['baseurl'] = 'http://download.go.cd/gocd-rpm'
34+
default['gocd']['repository']['yum']['gpgcheck'] = false
35+
36+
version = node['gocd']['version']
37+
case node['platform_family']
38+
when 'debian'
39+
default['gocd']['server']['package_file']['filename'] = "go-server-#{version}.deb"
40+
default['gocd']['agent']['package_file']['filename'] = "go-agent-#{version}.deb"
41+
default['gocd']['package_file']['baseurl'] = 'http://download.go.cd/gocd-deb/'
42+
when 'rhel','fedora'
43+
default['gocd']['server']['package_file']['filename'] = "go-server-#{version}.noarch.rpm"
44+
default['gocd']['agent']['package_file']['filename'] = "go-agent-#{version}.noarch.rpm"
45+
default['gocd']['package_file']['baseurl'] = 'http://download.go.cd/gocd-rpm/'
46+
end
47+
48+
default['gocd']['server']['package_file']['path'] =
49+
File.join(Chef::Config[:file_cache_path], node['gocd']['server']['package_file']['filename'])
50+
default['gocd']['server']['package_file']['url'] =
51+
"#{node['gocd']['package_file']['baseurl']}/#{node['gocd']['server']['package_file']['filename']}"
52+
default['gocd']['agent']['package_file']['path'] =
53+
File.join(Chef::Config[:file_cache_path], node['gocd']['agent']['package_file']['filename'])
54+
default['gocd']['agent']['package_file']['url'] =
55+
"#{node['gocd']['package_file']['baseurl']}/#{node['gocd']['agent']['package_file']['filename']}"

recipes/agent_linux.rb

+32-30
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,40 @@
11
# Cookbook Name:: go
22
# Recipe:: agent_linux
33

4-
case node['platform_family']
5-
when 'debian'
6-
include_recipe 'apt'
7-
8-
apt_repository 'thoughtworks' do
9-
uri 'http://dl.bintray.com/gocd/gocd-deb/'
10-
keyserver "pgp.mit.edu"
11-
key "0x9149B0A6173454C7"
12-
components ['/']
13-
end
14-
15-
package_options = '--force-yes'
16-
when 'rhel','fedora'
17-
include_recipe 'yum'
18-
19-
yum_repository 'thoughtworks' do
20-
baseurl 'http://dl.bintray.com/gocd/gocd-rpm/'
21-
gpgcheck false
22-
end
23-
end
4+
include_recipe 'go::repository'
245

256
include_recipe 'java'
267

27-
package_url = node['gocd']['agent']['package_url']
28-
package_checksum = node['gocd']['agent']['package_checksum']
298
go_server_autoregister = node['gocd']['agent']['auto_register']
309
autoregister_key = node['gocd']['agent']['auto_register_key']
3110
server_search_query = node['gocd']['agent']['server_search_query']
3211

33-
package "go-agent" do
34-
version node['gocd']['version']
35-
options package_options
12+
case node['gocd']['install_method']
13+
when 'repository'
14+
include_recipe 'go::repository'
15+
package_options = node['gocd']['repository']['apt']['package_options'] if node['platform_family'] == 'debian'
16+
package "go-agent" do
17+
version node['gocd']['version']
18+
options package_options
19+
end
20+
when 'package_file'
21+
remote_file node['gocd']['agent']['package_file']['filename'] do
22+
path node['gocd']['agent']['package_file']['path']
23+
source node['gocd']['agent']['package_file']['url']
24+
mode 0644
25+
end
26+
case node['platform_family']
27+
when 'debian'
28+
dpkg_package 'go-agent' do
29+
source node['gocd']['agent']['package_file']['path']
30+
end
31+
when 'rhel','fedora'
32+
rpm_package 'go-agent' do
33+
source node['gocd']['agent']['package_file']['path']
34+
end
35+
end
36+
else
37+
fail "Unknown install method - '#{node['gocd']['install_method']}'"
3638
end
3739

3840
# If running under solo or user specifed the server host, try and use that
@@ -91,7 +93,7 @@
9193
else
9294
suffix = "-#{i}"
9395
end
94-
96+
9597
template "/etc/init.d/go-agent#{suffix}" do
9698
# <%= @go_agent_instance -%>
9799
source 'go-agent-service.erb'
@@ -106,12 +108,12 @@
106108
mode '0644'
107109
owner 'go'
108110
group 'go'
109-
variables(:go_server_host => go_server_host,
110-
:go_server_port => '8153',
111+
variables(:go_server_host => go_server_host,
112+
:go_server_port => '8153',
111113
:java_home => node['java']['java_home'],
112114
:work_dir => "#{node['gocd']['agent']['work_dir_path']}/go-agent#{suffix}")
113115
end
114-
116+
115117
template "/usr/share/go-agent/agent#{suffix}.sh" do
116118
source 'go-agent-sh.erb'
117119
mode '0755'
@@ -139,7 +141,7 @@
139141
owner 'go'
140142
group 'go'
141143
end
142-
144+
143145
autoregister_resources = []
144146
node['gocd']['agent']['auto_register_resources'].each do |resource_key|
145147
autoregister_resources.push(resource_key)

recipes/repository.rb

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
case node['platform_family']
2+
when 'debian'
3+
include_recipe 'apt'
4+
5+
apt_repository 'thoughtworks' do
6+
uri node['gocd']['repository']['apt']['uri']
7+
keyserver node['gocd']['repository']['apt']['keyserver']
8+
key node['gocd']['repository']['apt']['key']
9+
components node['gocd']['repository']['apt']['components']
10+
end
11+
when 'rhel','fedora'
12+
include_recipe 'yum'
13+
yum_repository 'thoughtworks' do
14+
baseurl node['gocd']['repository']['yum']['baseurl']
15+
gpgcheck node['gocd']['repository']['yum']['gpgcheck']
16+
end
17+
end

recipes/server_linux.rb

+31-27
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,50 @@
1-
case node['platform_family']
2-
when 'debian'
3-
include_recipe 'apt'
4-
5-
apt_repository 'thoughtworks' do
6-
uri 'http://download.go.cd/gocd-deb/'
7-
components ['/']
8-
end
9-
10-
package_options = '--force-yes'
11-
when 'rhel','fedora'
12-
include_recipe 'yum'
13-
14-
yum_repository 'thoughtworks' do
15-
baseurl 'http://download.go.cd/gocd-rpm'
16-
gpgcheck false
17-
end
18-
end
19-
201
include_recipe 'java'
212

223
package 'unzip'
234

24-
package "go-server" do
25-
version node['gocd']['version']
26-
options package_options
27-
notifies :start, 'service[go-server]', :immediately
5+
case node['gocd']['install_method']
6+
when 'repository'
7+
include_recipe 'go::repository'
8+
package_options = node['gocd']['repository']['apt']['package_options'] if node['platform_family'] == 'debian'
9+
package "go-server" do
10+
version node['gocd']['version']
11+
options package_options
12+
notifies :start, 'service[go-server]', :immediately
13+
end
14+
when 'package_file'
15+
remote_file node['gocd']['server']['package_file']['filename'] do
16+
path node['gocd']['server']['package_file']['path']
17+
source node['gocd']['server']['package_file']['url']
18+
mode 0644
19+
end
20+
case node['platform_family']
21+
when 'debian'
22+
dpkg_package 'go-server' do
23+
source node['gocd']['server']['package_file']['path']
24+
end
25+
when 'rhel','fedora'
26+
rpm_package 'go-server' do
27+
source node['gocd']['server']['package_file']['path']
28+
end
29+
end
30+
else
31+
fail "Unknown install method - '#{node['gocd']['install_method']}'"
2832
end
2933

30-
# If we're upgrading an existing Go Server then leave the configuration and such intact.
34+
# If we're upgrading an existing Go Server then leave the configuration and such intact.
3135
# If it's a new node, and a SVN backup URL is specified then restore/overwrite any existing configuration.
3236

33-
# Detection isn't based on the <license> element as Go-Community edition has no license.
37+
# Detection isn't based on the <license> element as Go-Community edition has no license.
3438
# We look for at least one <pipelines> element, with the assumption that if you have a backup you have at least one pipeline.
3539

36-
if (::File.exists?('/etc/go/cruise-config.xml') and ::File.readlines('/etc/go/cruise-config.xml').grep(/<pipelines/).length > 0)
40+
if (::File.exists?('/etc/go/cruise-config.xml') and ::File.readlines('/etc/go/cruise-config.xml').grep(/<pipelines/).length > 0)
3741
skip_backup = true
3842
Chef::Log.warn("Existing configuration detected. Restore skipped.")
3943
else
4044
Chef::Log.warn("New install detected.")
4145
skip_backup = false
4246
restore_go_config = false
43-
if (node['gocd']['backup_path'] && !node['gocd']['backup_path'].strip.empty?)
47+
if (node['gocd']['backup_path'] && !node['gocd']['backup_path'].strip.empty?)
4448
Chef::Log.warn("Backup URL specified. Configuration will be restored.")
4549
restore_go_config = true
4650
end

0 commit comments

Comments
 (0)