engineyard-hudson 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +15 -1
- data/History.md +13 -0
- data/README.md +19 -39
- data/bin/ey-hudson +1 -1
- data/engineyard-hudson.gemspec +2 -1
- data/features/{server.feature → install_server.feature} +3 -1
- data/lib/engineyard-hudson/cli.rb +58 -33
- data/lib/engineyard-hudson/cli/install_server/templates/cookbooks/hudson_master/recipes/default.rb +0 -2
- data/lib/engineyard-hudson/cli/install_server/templates/cookbooks/hudson_master/templates/default/init.sh.erb +5 -3
- data/lib/engineyard-hudson/version.rb +1 -1
- metadata +42 -26
data/Gemfile.lock
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
engineyard-hudson (0.3.
|
4
|
+
engineyard-hudson (0.3.1)
|
5
5
|
engineyard (~> 1.3.4)
|
6
|
+
hudson (~> 0.5.0)
|
6
7
|
ruby-debug
|
7
8
|
thor (~> 0.14.6)
|
8
9
|
|
@@ -12,6 +13,7 @@ GEM
|
|
12
13
|
awesome_print (0.2.1)
|
13
14
|
builder (2.1.2)
|
14
15
|
columnize (0.3.1)
|
16
|
+
crack (0.1.8)
|
15
17
|
cucumber (0.9.4)
|
16
18
|
builder (~> 2.1.2)
|
17
19
|
diff-lcs (~> 1.1.2)
|
@@ -35,6 +37,16 @@ GEM
|
|
35
37
|
json (~> 1.4.6)
|
36
38
|
term-ansicolor (~> 1.0.5)
|
37
39
|
highline (1.6.1)
|
40
|
+
hpricot (0.8.2)
|
41
|
+
httparty (0.6.1)
|
42
|
+
crack (= 0.1.8)
|
43
|
+
hudson (0.5.0)
|
44
|
+
builder (~> 2.1.2)
|
45
|
+
hpricot
|
46
|
+
httparty (~> 0.6.1)
|
47
|
+
term-ansicolor (>= 1.0.4)
|
48
|
+
thor (~> 0.14.2)
|
49
|
+
yajl-ruby (>= 0.7.6)
|
38
50
|
json (1.4.6)
|
39
51
|
json_pure (1.4.6)
|
40
52
|
linecache (0.43)
|
@@ -65,6 +77,7 @@ GEM
|
|
65
77
|
term-ansicolor (1.0.5)
|
66
78
|
thor (0.14.6)
|
67
79
|
tilt (1.1)
|
80
|
+
yajl-ruby (0.7.8)
|
68
81
|
|
69
82
|
PLATFORMS
|
70
83
|
ruby
|
@@ -75,6 +88,7 @@ DEPENDENCIES
|
|
75
88
|
engineyard (~> 1.3.4)
|
76
89
|
engineyard-hudson!
|
77
90
|
fakeweb (~> 1.3.0)
|
91
|
+
hudson (~> 0.5.0)
|
78
92
|
json (~> 1.4.0)
|
79
93
|
open4
|
80
94
|
rake (~> 0.8.7)
|
data/History.md
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
# History
|
2
2
|
|
3
|
+
## 0.3.1 - 2010-12-1
|
4
|
+
|
5
|
+
* install_server
|
6
|
+
* Updates the default host for `hudson` CLI to newly created server
|
7
|
+
* Explicitly set $HOME/$USER so Hudson/Java has access to .gitconfig
|
8
|
+
|
9
|
+
## 0.3.0 - 2010-11-24
|
10
|
+
|
11
|
+
* Renamed task 'server' => 'install_server'
|
12
|
+
* install_server does the complete job of setup/installation of Hudson into an environment on AppCloud
|
13
|
+
* install_server can take --environment/--account options OR auto-discover which environment to install Hudson into
|
14
|
+
|
15
|
+
|
3
16
|
## 0.2.0 - 2010-10-30
|
4
17
|
|
5
18
|
* Initial 'server' task implementation
|
data/README.md
CHANGED
@@ -16,62 +16,42 @@ And here's some logos:
|
|
16
16
|
|
17
17
|
gem install engineyard-hudson
|
18
18
|
|
19
|
-
|
19
|
+
This will also install the `hudson` CLI to interact with your Hudson CI from the command line.
|
20
20
|
|
21
|
-
|
21
|
+
## Hosting on Engine Yard AppCloud
|
22
22
|
|
23
|
-
|
23
|
+
Using Engine Yard AppCloud "Quick Start" wizard, create an application with Git Repo `git://github.com/engineyard/hudson_server.git`, and add your own SSH keys. This will create an environment called `hudson_server_production`. Boot the environment as a Single instance (or Custom cluster with a single instance).
|
24
24
|
|
25
|
-
|
25
|
+
Optionally, though it is quite pretty, deploy/ship the hudson_server application and visit the HTTP link to see the remaining "Almost there..." instructions.
|
26
26
|
|
27
|
-
|
27
|
+
Finally, install Hudson CI and rebuild the environment:
|
28
28
|
|
29
|
-
|
29
|
+
$ ey-hudson install_server
|
30
30
|
|
31
|
-
|
31
|
+
When this completes, visit the URL or refresh the "Almost there..." page to see your Hudson CI server.
|
32
32
|
|
33
|
-
|
34
|
-
* No mail server configured for Hudson CI build failure notifications.
|
35
|
-
|
36
|
-
## Hosting Hudson CI
|
37
|
-
|
38
|
-
Hosting Hudson CI on Engine Yard AppCloud is optional; yet delightfully simple. Hudson CI can be hosted anywhere.
|
39
|
-
|
40
|
-
### Hosting on Engine Yard AppCloud
|
41
|
-
|
42
|
-
Using Engine Yard AppCloud "Quick Start" wizard, create an application with Git Repo `git://github.com/drnic/ci_demo_app.git` (any arbitrary rails/rack application), and add your own SSH keys. Name the environment `hudson` (or similar) and boot it as a Single instance (or Custom cluster with a single instance).
|
43
|
-
|
44
|
-
Just a few steps and you will have your own Hudson CI:
|
45
|
-
|
46
|
-
$ mkdir hudson_server
|
47
|
-
$ cd hudson_server
|
48
|
-
$ ey-hudson server . --plugins 'googleanalytics,chucknorris'
|
49
|
-
$ ey recipes upload -e hudson
|
50
|
-
$ ey recipes apply -e hudson
|
33
|
+
Using the `hudson list` CLI task you can also test there is a working server with no jobs:
|
51
34
|
|
52
35
|
*For the Hudson slaves' configuration, you'll need:*
|
53
36
|
|
54
|
-
The `
|
55
|
-
|
56
|
-
$ ey ssh -e hudson
|
57
|
-
$ cat /home/deploy/.ssh/id_rsa.pub
|
58
|
-
|
59
|
-
The `hudson` instance URI:
|
60
|
-
|
61
|
-
$ sudo ruby -rubygems -e "require 'json'; puts JSON.parse(File.read('/etc/chef/dna.json'))['engineyard']['environment']['instances'].first['public_hostname']"
|
37
|
+
The `hudson_server_production` instance public key:
|
62
38
|
|
39
|
+
$ ey ssh -e hudson_server_production
|
40
|
+
# cat /home/deploy/.ssh/id_rsa.pub
|
63
41
|
|
64
42
|
Do those steps, copy down the configuration and you're done! Now, you either visit your Hudson CI site or use `hudson list` to see the status of your projects being tested.
|
65
43
|
|
66
|
-
|
44
|
+
## Hosting elsewhere
|
45
|
+
|
46
|
+
Hosting Hudson CI on Engine Yard AppCloud is optional; yet delightfully simple. Hudson CI can be hosted anywhere.
|
67
47
|
|
68
|
-
|
48
|
+
If you host your Hudson CI elsewhere then you need the following information about your Hudson CI environment to be able to add EngineYard AppCloud instances as Hudson nodes/slaves:
|
69
49
|
|
70
50
|
* Hudson CI public host & port
|
71
51
|
* Hudson CI's user's public key (probably at `/home/deploy/.ssh/id_rsa.pub`)
|
72
52
|
* Hudson CI's user's private key path (probably `/home/deploy/.ssh/id_rsa`)
|
73
53
|
|
74
|
-
## Running your tests
|
54
|
+
## Running your CI tests on Engine Yard AppCloud
|
75
55
|
|
76
56
|
This is the exciting part - ensuring that your CI tests are being run in the same environment as your production applications. In this case, on Engine Yard AppCloud.
|
77
57
|
|
@@ -97,10 +77,10 @@ Boot your `ci_demo_app_ci` environment, visit your Hudson CI and WOW! jobs have
|
|
97
77
|
|
98
78
|
At any time from the command line you can use `hudson list` to see the status of your jobs
|
99
79
|
|
100
|
-
|
80
|
+
## Conventions/Requirements
|
101
81
|
|
102
82
|
* Do not use your production environment as your Hudson CI slave. There are no guarantees what will happen. I expect bad things.
|
103
|
-
* You must name your CI
|
83
|
+
* You must name your CI environments with a suffix of `_ci` or `_hudson_slave`.
|
104
84
|
* You should not name any other environments with a suffix of `_ci` or `_hudson_slave`; lest they offer themselves to your Hudson CI as slave nodes.
|
105
85
|
* Keep your production and CI environments exactly the same. Use the same Ruby implementation/version, same database, and include the same RubyGems and Unix packages. Why? This is the entire point of the exercise: to run your CI tests in the same environment as your production application runs.
|
106
86
|
|
@@ -108,7 +88,7 @@ For example, note the naming convention of the two CI environments below (one en
|
|
108
88
|
|
109
89
|
<img src="http://img.skitch.com/20101031-dxnk7hbn32yce9rum1ctwjwt1w.png" style="width: 100%">
|
110
90
|
|
111
|
-
|
91
|
+
## What happens?
|
112
92
|
|
113
93
|
When you boot your Engine Yard AppCloud CI environments, each resulting EC2 instance executes a special "hudson_slave" recipe (see `cookbooks/hudson_slave/recipes/default.rb` in your project). This does three things:
|
114
94
|
|
data/bin/ey-hudson
CHANGED
data/engineyard-hudson.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "engineyard-hudson"
|
5
|
-
s.version = '0.3.
|
5
|
+
s.version = '0.3.1'
|
6
6
|
s.platform = Gem::Platform::RUBY
|
7
7
|
s.authors = ["Dr Nic Williams"]
|
8
8
|
s.email = ["drnicwilliams@gmail.com"]
|
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
|
20
20
|
s.add_dependency("thor", ["~> 0.14.6"])
|
21
21
|
s.add_dependency("engineyard", ["~> 1.3.4"])
|
22
|
+
s.add_dependency("hudson", ["~> 0.5.0"])
|
22
23
|
|
23
24
|
s.add_development_dependency("rake", ["~> 0.8.7"])
|
24
25
|
s.add_development_dependency("cucumber", ["~> 0.9.4"])
|
@@ -28,9 +28,11 @@ Feature: Managing ey hudson server
|
|
28
28
|
Environment is rebuilding...
|
29
29
|
..
|
30
30
|
Hudson is starting...
|
31
|
-
|
31
|
+
.
|
32
32
|
Done! Hudson CI hosted at http://app-master-hostname.compute-1.amazonaws.com
|
33
33
|
"""
|
34
|
+
When I run executable "hudson" with arguments "default_host"
|
35
|
+
Then I should see "http://app-master-hostname.compute-1.amazonaws.com"
|
34
36
|
|
35
37
|
@wip
|
36
38
|
Scenario: Install Hudson CI server with additional Hudson plugins
|
@@ -9,69 +9,60 @@ module Engineyard
|
|
9
9
|
desc "install PROJECT_PATH", "Install Hudson node/slave recipes into your project."
|
10
10
|
def install(project_path)
|
11
11
|
require 'engineyard-hudson/cli/install'
|
12
|
-
Engineyard::Hudson::Install.start(
|
12
|
+
Engineyard::Hudson::Install.start(project_path)
|
13
13
|
end
|
14
14
|
|
15
15
|
desc "install_server [PROJECT_PATH]", "Install Hudson CI into an AppCloud environment."
|
16
16
|
method_option :verbose, :aliases => ["-V"], :desc => "Display more output"
|
17
17
|
method_option :environment, :aliases => ["-e"], :desc => "Environment in which to deploy this application", :type => :string
|
18
18
|
method_option :account, :aliases => ["-c"], :desc => "Name of the account you want to deploy in"
|
19
|
+
# Generates a chef recipe cookbook, uploads it to AppCloud, and waits until Hudson CI has launched
|
19
20
|
def install_server(project_path=nil)
|
20
21
|
environments = Engineyard::Hudson::AppcloudEnv.new.find_environments(options)
|
21
22
|
if environments.size == 0
|
22
|
-
|
23
|
-
say "Either:"
|
24
|
-
say " * Create an AppCloud environment called hudson, hudson_server, hudson_production, hudson_server_production"
|
25
|
-
say " * Use --environment/--account flags to select AppCloud environment"
|
26
|
-
return
|
23
|
+
no_environments_discovered and return
|
27
24
|
elsif environments.size > 1
|
28
|
-
|
29
|
-
say ""
|
30
|
-
environments.each do |env_name, account_name, environment|
|
31
|
-
say " ey-hudson install_server --environment "; say "'#{env_name}' ", :yellow;
|
32
|
-
say "--account "; say "'#{account_name}'", :yellow
|
33
|
-
end
|
34
|
-
return
|
25
|
+
too_many_environments_discovered(environments) and return
|
35
26
|
end
|
36
27
|
|
37
28
|
env_name, account_name, environment = environments.first
|
38
|
-
|
29
|
+
if environment.instances.first
|
30
|
+
public_hostname = environment.instances.first.public_hostname
|
31
|
+
status = environment.instances.first.status
|
32
|
+
end
|
39
33
|
|
40
34
|
temp_project_path = File.expand_path(project_path || File.join(Dir.tmpdir, "temp_hudson_server"))
|
41
35
|
shell.say "Temp installation dir: #{temp_project_path}" if options[:verbose]
|
36
|
+
|
42
37
|
FileUtils.mkdir_p(temp_project_path)
|
43
38
|
FileUtils.chdir(FileUtils.mkdir_p(temp_project_path)) do
|
39
|
+
# 'install_server' generator
|
44
40
|
require 'engineyard-hudson/cli/install_server'
|
45
41
|
Engineyard::Hudson::InstallServer.start(ARGV.unshift(temp_project_path))
|
46
42
|
|
47
|
-
require 'engineyard/cli/recipes'
|
48
43
|
say ""
|
49
44
|
say "Uploading to "; say "'#{env_name}' ", :yellow; say "environment on "; say "'#{account_name}' ", :yellow; say "account..."
|
45
|
+
require 'engineyard/cli/recipes'
|
50
46
|
environment.upload_recipes
|
51
47
|
|
52
48
|
if status == "running"
|
53
|
-
environment.run_custom_recipes
|
54
49
|
say "Environment is rebuilding..."
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
Net::HTTP.start(public_hostname, 80) do |http|
|
59
|
-
waiting = (body = http.get("/").body) !~ /Please wait while Hudson is getting ready to work/
|
60
|
-
end
|
61
|
-
sleep 1; print '.'; $stdout.flush
|
62
|
-
rescue SocketError => e
|
63
|
-
sleep 1; print 'x'; $stdout.flush
|
64
|
-
rescue Exception
|
65
|
-
sleep 1; print '.'; $stdout.flush
|
66
|
-
end
|
50
|
+
environment.run_custom_recipes
|
51
|
+
watch_page_while public_hostname, 80, "/" do |req|
|
52
|
+
req.body !~ /Please wait while Hudson is getting ready to work/
|
67
53
|
end
|
54
|
+
|
68
55
|
say ""
|
69
56
|
say "Hudson is starting..."
|
70
|
-
|
71
|
-
|
72
|
-
sleep 1; print '.'; $stdout.flush
|
73
|
-
end
|
57
|
+
watch_page_while public_hostname, 80, "/" do |req|
|
58
|
+
req.body =~ /Please wait while Hudson is getting ready to work/
|
74
59
|
end
|
60
|
+
|
61
|
+
require 'hudson'
|
62
|
+
require 'hudson/config'
|
63
|
+
::Hudson::Config.config["base_uri"] = public_hostname
|
64
|
+
::Hudson::Config.store!
|
65
|
+
|
75
66
|
say ""
|
76
67
|
say "Done! Hudson CI hosted at "; say "http://#{public_hostname}", :green
|
77
68
|
else
|
@@ -104,6 +95,40 @@ module Engineyard
|
|
104
95
|
shell.say "ERROR: #{text}", :red
|
105
96
|
exit
|
106
97
|
end
|
98
|
+
|
99
|
+
def no_environments_discovered
|
100
|
+
say "No environments with name hudson, hudson_server, hudson_production, hudson_server_production.", :red
|
101
|
+
say "Either:"
|
102
|
+
say " * Create an AppCloud environment called hudson, hudson_server, hudson_production, hudson_server_production"
|
103
|
+
say " * Use --environment/--account flags to select AppCloud environment"
|
104
|
+
end
|
105
|
+
|
106
|
+
def too_many_environments_discovered(environments)
|
107
|
+
say "Multiple environments possible, please be more specific:", :red
|
108
|
+
say ""
|
109
|
+
environments.each do |env_name, account_name, environment|
|
110
|
+
say " ey-hudson install_server --environment "; say "'#{env_name}' ", :yellow;
|
111
|
+
say "--account "; say "'#{account_name}'", :yellow
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def watch_page_while(host, port, path)
|
116
|
+
waiting = true
|
117
|
+
while waiting
|
118
|
+
begin
|
119
|
+
Net::HTTP.start(host, port) do |http|
|
120
|
+
req = http.get(path)
|
121
|
+
waiting = yield req
|
122
|
+
end
|
123
|
+
sleep 1; print '.'; $stdout.flush
|
124
|
+
rescue SocketError => e
|
125
|
+
sleep 1; print 'x'; $stdout.flush
|
126
|
+
rescue Exception => e
|
127
|
+
puts e.message
|
128
|
+
sleep 1; print '.'; $stdout.flush
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
107
132
|
end
|
108
133
|
end
|
109
|
-
end
|
134
|
+
end
|
data/lib/engineyard-hudson/cli/install_server/templates/cookbooks/hudson_master/recipes/default.rb
CHANGED
@@ -57,7 +57,6 @@ if ['solo'].include?(node[:instance_role])
|
|
57
57
|
:home => hudson_home,
|
58
58
|
:pid => hudson_pid
|
59
59
|
)
|
60
|
-
not_if { FileTest.exists?("/etc/init.d/hudson") }
|
61
60
|
end
|
62
61
|
|
63
62
|
plugins.each do |plugin|
|
@@ -78,7 +77,6 @@ if ['solo'].include?(node[:instance_role])
|
|
78
77
|
variables(
|
79
78
|
:port => hudson_port
|
80
79
|
)
|
81
|
-
not_if { FileTest.exists?("/data/nginx/servers/hudson_reverse_proxy.conf") }
|
82
80
|
end
|
83
81
|
|
84
82
|
execute "ensure-hudson-is-running" do
|
@@ -3,15 +3,17 @@
|
|
3
3
|
# Start/stop script for hudson
|
4
4
|
|
5
5
|
PIDFILE=<%= @pid %>
|
6
|
-
HUDSON_HOME
|
6
|
+
HUDSON_HOME="<%= @home %>"
|
7
7
|
COMMAND=/usr/bin/java
|
8
8
|
ARGUMENTS="-Djava.io.tmpdir=${HUDSON_HOME}/tmp -jar ${HUDSON_HOME}/hudson.war --webroot=${HUDSON_HOME}/war --httpPort=<%= @port %> ajp13ListenAddress=127.0.0.1"
|
9
|
-
RUN_AS
|
9
|
+
RUN_AS="<%= @user %>"
|
10
10
|
NAME=Hudson-CI
|
11
11
|
|
12
12
|
start() {
|
13
13
|
ebegin "Starting $NAME"
|
14
|
-
export HUDSON_HOME
|
14
|
+
export HUDSON_HOME="${HUDSON_HOME}"
|
15
|
+
export HOME="/home/${RUN_AS}"
|
16
|
+
export USER="${RUN_AS}"
|
15
17
|
start-stop-daemon -b --start --make-pidfile --pidfile $PIDFILE --chuid $RUN_AS --exec $COMMAND -- $ARGUMENTS &>$HUDSON_HOME/logs/hudson_log
|
16
18
|
eend $?
|
17
19
|
}
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: engineyard-hudson
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 1
|
10
|
+
version: 0.3.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Dr Nic Williams
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-12-01 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -51,9 +51,25 @@ dependencies:
|
|
51
51
|
type: :runtime
|
52
52
|
version_requirements: *id002
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
|
-
name:
|
54
|
+
name: hudson
|
55
55
|
prerelease: false
|
56
56
|
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
hash: 11
|
62
|
+
segments:
|
63
|
+
- 0
|
64
|
+
- 5
|
65
|
+
- 0
|
66
|
+
version: 0.5.0
|
67
|
+
type: :runtime
|
68
|
+
version_requirements: *id003
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
prerelease: false
|
72
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
57
73
|
none: false
|
58
74
|
requirements:
|
59
75
|
- - ~>
|
@@ -65,11 +81,11 @@ dependencies:
|
|
65
81
|
- 7
|
66
82
|
version: 0.8.7
|
67
83
|
type: :development
|
68
|
-
version_requirements: *
|
84
|
+
version_requirements: *id004
|
69
85
|
- !ruby/object:Gem::Dependency
|
70
86
|
name: cucumber
|
71
87
|
prerelease: false
|
72
|
-
requirement: &
|
88
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
73
89
|
none: false
|
74
90
|
requirements:
|
75
91
|
- - ~>
|
@@ -81,11 +97,11 @@ dependencies:
|
|
81
97
|
- 4
|
82
98
|
version: 0.9.4
|
83
99
|
type: :development
|
84
|
-
version_requirements: *
|
100
|
+
version_requirements: *id005
|
85
101
|
- !ruby/object:Gem::Dependency
|
86
102
|
name: rspec
|
87
103
|
prerelease: false
|
88
|
-
requirement: &
|
104
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
89
105
|
none: false
|
90
106
|
requirements:
|
91
107
|
- - ~>
|
@@ -97,11 +113,11 @@ dependencies:
|
|
97
113
|
- 0
|
98
114
|
version: 2.1.0
|
99
115
|
type: :development
|
100
|
-
version_requirements: *
|
116
|
+
version_requirements: *id006
|
101
117
|
- !ruby/object:Gem::Dependency
|
102
118
|
name: json
|
103
119
|
prerelease: false
|
104
|
-
requirement: &
|
120
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
105
121
|
none: false
|
106
122
|
requirements:
|
107
123
|
- - ~>
|
@@ -113,11 +129,11 @@ dependencies:
|
|
113
129
|
- 0
|
114
130
|
version: 1.4.0
|
115
131
|
type: :development
|
116
|
-
version_requirements: *
|
132
|
+
version_requirements: *id007
|
117
133
|
- !ruby/object:Gem::Dependency
|
118
134
|
name: awesome_print
|
119
135
|
prerelease: false
|
120
|
-
requirement: &
|
136
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
121
137
|
none: false
|
122
138
|
requirements:
|
123
139
|
- - ">="
|
@@ -127,11 +143,11 @@ dependencies:
|
|
127
143
|
- 0
|
128
144
|
version: "0"
|
129
145
|
type: :development
|
130
|
-
version_requirements: *
|
146
|
+
version_requirements: *id008
|
131
147
|
- !ruby/object:Gem::Dependency
|
132
148
|
name: realweb
|
133
149
|
prerelease: false
|
134
|
-
requirement: &
|
150
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
135
151
|
none: false
|
136
152
|
requirements:
|
137
153
|
- - ~>
|
@@ -143,11 +159,11 @@ dependencies:
|
|
143
159
|
- 6
|
144
160
|
version: 0.1.6
|
145
161
|
type: :development
|
146
|
-
version_requirements: *
|
162
|
+
version_requirements: *id009
|
147
163
|
- !ruby/object:Gem::Dependency
|
148
164
|
name: open4
|
149
165
|
prerelease: false
|
150
|
-
requirement: &
|
166
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
151
167
|
none: false
|
152
168
|
requirements:
|
153
169
|
- - ">="
|
@@ -157,11 +173,11 @@ dependencies:
|
|
157
173
|
- 0
|
158
174
|
version: "0"
|
159
175
|
type: :development
|
160
|
-
version_requirements: *
|
176
|
+
version_requirements: *id010
|
161
177
|
- !ruby/object:Gem::Dependency
|
162
178
|
name: sinatra
|
163
179
|
prerelease: false
|
164
|
-
requirement: &
|
180
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
165
181
|
none: false
|
166
182
|
requirements:
|
167
183
|
- - ">="
|
@@ -171,11 +187,11 @@ dependencies:
|
|
171
187
|
- 0
|
172
188
|
version: "0"
|
173
189
|
type: :development
|
174
|
-
version_requirements: *
|
190
|
+
version_requirements: *id011
|
175
191
|
- !ruby/object:Gem::Dependency
|
176
192
|
name: fakeweb
|
177
193
|
prerelease: false
|
178
|
-
requirement: &
|
194
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
179
195
|
none: false
|
180
196
|
requirements:
|
181
197
|
- - ~>
|
@@ -187,11 +203,11 @@ dependencies:
|
|
187
203
|
- 0
|
188
204
|
version: 1.3.0
|
189
205
|
type: :development
|
190
|
-
version_requirements: *
|
206
|
+
version_requirements: *id012
|
191
207
|
- !ruby/object:Gem::Dependency
|
192
208
|
name: ruby-debug
|
193
209
|
prerelease: false
|
194
|
-
requirement: &
|
210
|
+
requirement: &id013 !ruby/object:Gem::Requirement
|
195
211
|
none: false
|
196
212
|
requirements:
|
197
213
|
- - ">="
|
@@ -201,7 +217,7 @@ dependencies:
|
|
201
217
|
- 0
|
202
218
|
version: "0"
|
203
219
|
type: :runtime
|
204
|
-
version_requirements: *
|
220
|
+
version_requirements: *id013
|
205
221
|
description: Run your continuous integration (CI) tests against your Engine Yard AppCloud environments - the exact same configuration you are using in production!
|
206
222
|
email:
|
207
223
|
- drnicwilliams@gmail.com
|
@@ -221,7 +237,7 @@ files:
|
|
221
237
|
- bin/ey-hudson
|
222
238
|
- engineyard-hudson.gemspec
|
223
239
|
- features/install.feature
|
224
|
-
- features/
|
240
|
+
- features/install_server.feature
|
225
241
|
- features/step_definitions/api_steps.rb
|
226
242
|
- features/step_definitions/common_steps.rb
|
227
243
|
- features/step_definitions/fixture_project_steps.rb
|
@@ -298,7 +314,7 @@ specification_version: 3
|
|
298
314
|
summary: Easier to do CI than not to. Use Hudson CI with Engine Yard AppCloud.
|
299
315
|
test_files:
|
300
316
|
- features/install.feature
|
301
|
-
- features/
|
317
|
+
- features/install_server.feature
|
302
318
|
- features/step_definitions/api_steps.rb
|
303
319
|
- features/step_definitions/common_steps.rb
|
304
320
|
- features/step_definitions/fixture_project_steps.rb
|