Skip to content

Commit c547a43

Browse files
committed
gocd#50 installing go server from downloaded package
1 parent 835d333 commit c547a43

File tree

7 files changed

+197
-21
lines changed

7 files changed

+197
-21
lines changed

README.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,42 @@ sets `node['java']['jdk_version']` at `force_default` level but it may not work
1919
when you include `java` in node run_list before `gocd` cookbook. The safest approach
2020
is to set java version in node attributes (in a role or environment).
2121

22+
## Install method
23+
24+
### Repository
25+
26+
By default installation source is done from apt or yum repositories from official sources at http://www.go.cd/download/.
27+
28+
The **apt** repository can be overriden by changing any these attributes:
29+
```ruby
30+
default['gocd']['repository']['apt']['uri'] = 'http://download.go.cd/gocd-deb/'
31+
default['gocd']['repository']['apt']['components'] = [ '/' ]
32+
default['gocd']['repository']['apt']['package_options'] = '--force-yes'
33+
default['gocd']['repository']['apt']['keyserver'] = 'pgp.mit.edu'
34+
default['gocd']['repository']['apt']['key'] = '0x9149B0A6173454C7'
35+
```
36+
The **yum** repository can be overriden by changing any these attributes:
37+
```ruby
38+
default['gocd']['repository']['yum']['baseurl'] = 'http://download.go.cd/gocd-rpm'
39+
default['gocd']['repository']['yum']['gpgcheck'] = false
40+
```
41+
42+
### From remote file
43+
44+
Cookbook can skip adding repository and install Go server or agent by downloading a remote file and install it directly via `dpkg` or `rpm`.
45+
46+
Change install method to 'package_file':
47+
```ruby
48+
node['gocd']['install_method'] = 'package_file'
49+
```
50+
51+
And assign base url where packages are available for download
52+
```ruby
53+
node['gocd']['package_file']['baseurl'] = 'http://my/custom/url'
54+
```
55+
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`
56+
57+
2258
# GoCD Server
2359

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

attributes/repository.rb

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
default['gocd']['install_method'] = 'repository'
2+
3+
default['gocd']['repository']['apt']['uri'] = 'http://dl.bintray.com/gocd/gocd-deb/'
4+
default['gocd']['repository']['apt']['components'] = [ '/' ]
5+
default['gocd']['repository']['apt']['package_options'] = '--force-yes'
6+
default['gocd']['repository']['apt']['keyserver'] = 'pgp.mit.edu'
7+
default['gocd']['repository']['apt']['key'] = '0x9149B0A6173454C7'
8+
9+
default['gocd']['repository']['yum']['baseurl'] = 'http://dl.bintray.com/gocd/gocd-rpm/'
10+
default['gocd']['repository']['yum']['gpgcheck'] = false
11+
12+
case node['gocd']['install_method']
13+
when 'repository'
14+
# version = nil so just pick latest available
15+
else
16+
default['gocd']['version'] = '15.2.0-2248'
17+
end
18+
19+
version = node['gocd']['version']
20+
case node['platform_family']
21+
when 'debian'
22+
default['gocd']['server']['package_file']['filename'] = "go-server-#{version}.deb"
23+
default['gocd']['agent']['package_file']['filename'] = "go-agent-#{version}.deb"
24+
default['gocd']['package_file']['baseurl'] = 'http://download.go.cd/gocd-deb'
25+
when 'rhel','fedora'
26+
default['gocd']['server']['package_file']['filename'] = "go-server-#{version}.noarch.rpm"
27+
default['gocd']['agent']['package_file']['filename'] = "go-agent-#{version}.noarch.rpm"
28+
default['gocd']['package_file']['baseurl'] = 'http://download.go.cd/gocd-rpm'
29+
end
30+
31+
default['gocd']['server']['package_file']['path'] =
32+
File.join(Chef::Config[:file_cache_path], node['gocd']['server']['package_file']['filename'])
33+
default['gocd']['server']['package_file']['url'] =
34+
"#{node['gocd']['package_file']['baseurl']}/#{node['gocd']['server']['package_file']['filename']}"
35+
default['gocd']['agent']['package_file']['path'] =
36+
File.join(Chef::Config[:file_cache_path], node['gocd']['agent']['package_file']['filename'])
37+
default['gocd']['agent']['package_file']['url'] =
38+
"#{node['gocd']['package_file']['baseurl']}/#{node['gocd']['agent']['package_file']['filename']}"

recipes/agent_linux.rb

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,40 @@
1-
include_recipe 'gocd::repository'
21
include_recipe "gocd::java"
32

4-
package "go-agent" do
5-
notifies :reload, 'ohai[reload_passwd_for_go_user]', :immediately
6-
end
7-
83
ohai 'reload_passwd_for_go_user' do
94
name 'reload_passwd'
105
action :nothing
116
plugin 'etc'
127
end
138

9+
case node['gocd']['install_method']
10+
when 'repository'
11+
include_recipe 'gocd::repository'
12+
package_options = node['gocd']['repository']['apt']['package_options'] if node['platform_family'] == 'debian'
13+
package "go-agent" do
14+
notifies :reload, 'ohai[reload_passwd_for_go_user]', :immediately
15+
version node['gocd']['version']
16+
end
17+
when 'package_file'
18+
remote_file node['gocd']['agent']['package_file']['filename'] do
19+
path node['gocd']['agent']['package_file']['path']
20+
source node['gocd']['agent']['package_file']['url']
21+
mode 0644
22+
end
23+
case node['platform_family']
24+
when 'debian'
25+
dpkg_package 'go-agent' do
26+
source node['gocd']['agent']['package_file']['path']
27+
notifies :reload, 'ohai[reload_passwd_for_go_user]', :immediately
28+
end
29+
when 'rhel','fedora'
30+
rpm_package 'go-agent' do
31+
source node['gocd']['agent']['package_file']['path']
32+
end
33+
end
34+
else
35+
fail "Unknown install method - '#{node['gocd']['install_method']}'"
36+
end
37+
1438
directory '/var/lib/go-agent/config' do
1539
mode "0700"
1640
owner "go"

recipes/repository.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@
33
include_recipe 'apt'
44

55
apt_repository 'gocd' do
6-
uri 'http://dl.bintray.com/gocd/gocd-deb/'
7-
keyserver "pgp.mit.edu"
8-
key "0x9149B0A6173454C7"
9-
components ['/']
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']
1010
end
1111

1212
when 'rhel', 'fedora'
1313
include_recipe 'yum'
1414

1515
yum_repository 'gocd' do
16-
baseurl 'http://dl.bintray.com/gocd/gocd-rpm/'
17-
gpgcheck false
16+
baseurl node['gocd']['repository']['yum']['baseurl']
17+
gpgcheck node['gocd']['repository']['yum']['gpgcheck']
1818
end
1919
end

recipes/server_linux.rb

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,44 @@
1-
include_recipe 'gocd::repository'
21
include_recipe "gocd::java"
32

4-
package "go-server" do
5-
notifies :reload, 'ohai[reload_passwd_for_go_user]', :immediately
6-
end
7-
83
ohai 'reload_passwd_for_go_user' do
94
name 'reload_passwd'
105
action :nothing
116
plugin 'etc'
127
end
138

9+
package 'unzip'
10+
11+
case node['gocd']['install_method']
12+
when 'repository'
13+
include_recipe 'gocd::repository'
14+
package_options = node['gocd']['repository']['apt']['package_options'] if node['platform_family'] == 'debian'
15+
package "go-server" do
16+
version node['gocd']['version']
17+
options package_options
18+
notifies :reload, 'ohai[reload_passwd_for_go_user]', :immediately
19+
end
20+
when 'package_file'
21+
remote_file node['gocd']['server']['package_file']['filename'] do
22+
path node['gocd']['server']['package_file']['path']
23+
source node['gocd']['server']['package_file']['url']
24+
mode 0644
25+
end
26+
case node['platform_family']
27+
when 'debian'
28+
dpkg_package 'go-server' do
29+
source node['gocd']['server']['package_file']['path']
30+
notifies :reload, 'ohai[reload_passwd_for_go_user]', :immediately
31+
end
32+
when 'rhel','fedora'
33+
rpm_package 'go-server' do
34+
source node['gocd']['server']['package_file']['path']
35+
notifies :reload, 'ohai[reload_passwd_for_go_user]', :immediately
36+
end
37+
end
38+
else
39+
fail "Unknown install method - '#{node['gocd']['install_method']}'"
40+
end
41+
1442
template "/etc/default/go-server" do
1543
source "go-server-default.erb"
1644
mode "0644"

spec/go_server_spec.rb

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@
55
it 'includes java recipe' do
66
expect(chef_run).to include_recipe('java::default')
77
end
8-
it 'installs go-server package' do
9-
expect(chef_run).to install_package('go-server')
10-
end
118
it 'creates go server configuration in /etc/default/go-server' do
129
expect(chef_run).to render_file('/etc/default/go-server').with_content { |content|
1310
expect(content).to_not include('java-6')
@@ -31,6 +28,9 @@
3128
end
3229
it_behaves_like :server_recipe
3330
it_behaves_like :apt_repository_recipe
31+
it 'installs go-server package' do
32+
expect(chef_run).to install_package('go-server')
33+
end
3434
end
3535
context 'When all attributes are default and platform is centos' do
3636
let(:chef_run) do
@@ -43,6 +43,49 @@
4343
end
4444
it_behaves_like :server_recipe
4545
it_behaves_like :yum_repository_recipe
46+
it 'installs go-server package' do
47+
expect(chef_run).to install_package('go-server')
48+
end
4649
end
4750
#TODO: server on windows
51+
52+
context 'When installing from package_file and platform is debian' do
53+
let(:chef_run) do
54+
run = ChefSpec::SoloRunner.new do |node|
55+
node.automatic['lsb']['id'] = 'Debian'
56+
node.automatic['platform_family'] = 'debian'
57+
node.automatic['platform'] = 'debian'
58+
node.automatic['os'] = 'linux'
59+
node.normal['gocd']['install_method'] = 'package_file'
60+
end
61+
run.converge(described_recipe)
62+
end
63+
it_behaves_like :server_recipe
64+
it 'downloads go-server .deb from remote URL' do
65+
expect(chef_run).to create_remote_file('go-server-15.2.0-2248.deb').with(
66+
source: 'http://download.go.cd/gocd-deb/go-server-15.2.0-2248.deb')
67+
end
68+
it 'installs go-server package from file' do
69+
expect(chef_run).to install_dpkg_package('go-server')
70+
end
71+
end
72+
context 'When installing from package file and platform is centos' do
73+
let(:chef_run) do
74+
run = ChefSpec::SoloRunner.new do |node|
75+
node.automatic['platform_family'] = 'rhel'
76+
node.automatic['platform'] = 'centos'
77+
node.automatic['os'] = 'linux'
78+
node.normal['gocd']['install_method'] = 'package_file'
79+
end
80+
run.converge(described_recipe)
81+
end
82+
it_behaves_like :server_recipe
83+
it 'downloads go-server .rpm from remote URL' do
84+
expect(chef_run).to create_remote_file('go-server-15.2.0-2248.noarch.rpm').with(
85+
source: 'http://download.go.cd/gocd-rpm/go-server-15.2.0-2248.noarch.rpm')
86+
end
87+
it 'installs go-server package from file' do
88+
expect(chef_run).to install_rpm_package('go-server')
89+
end
90+
end
4891
end

spec/shared_examples.rb

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,21 @@
33
expect(chef_run).to include_recipe('apt')
44
end
55
it 'adds gocd apt repository' do
6-
expect(chef_run).to add_apt_repository('gocd')
6+
expect(chef_run).to add_apt_repository('gocd').with(
7+
uri: 'http://dl.bintray.com/gocd/gocd-deb/',
8+
keyserver: "pgp.mit.edu",
9+
key: "0x9149B0A6173454C7",
10+
components: ['/'])
711
end
812
end
913
shared_examples_for :yum_repository_recipe do
1014
it 'includes yum recipe' do
1115
expect(chef_run).to include_recipe('yum')
1216
end
1317
it 'adds gocd yum repository' do
14-
expect(chef_run).to create_yum_repository('gocd')
18+
expect(chef_run).to create_yum_repository('gocd').with(
19+
baseurl: 'http://dl.bintray.com/gocd/gocd-rpm/',
20+
gpgcheck: false
21+
)
1522
end
1623
end

0 commit comments

Comments
 (0)