engineyard-jenkins 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. data/.gitignore +5 -0
  2. data/Gemfile +4 -0
  3. data/Gemfile.lock +87 -0
  4. data/History.md +32 -0
  5. data/README.md +186 -0
  6. data/Rakefile +24 -0
  7. data/bin/ey-jenkins +7 -0
  8. data/engineyard-jenkins.gemspec +33 -0
  9. data/features/install.feature +53 -0
  10. data/features/install_server.feature +69 -0
  11. data/features/step_definitions/api_steps.rb +10 -0
  12. data/features/step_definitions/common_steps.rb +211 -0
  13. data/features/step_definitions/fixture_project_steps.rb +14 -0
  14. data/features/step_definitions/jenkins_steps.rb +9 -0
  15. data/features/support/common.rb +51 -0
  16. data/features/support/engineyard.rb +24 -0
  17. data/features/support/env.rb +14 -0
  18. data/features/support/matchers.rb +10 -0
  19. data/fixtures/cookbooks/main/recipes/default.rb +1 -0
  20. data/fixtures/cookbooks/redis/recipes/default.rb +0 -0
  21. data/fixtures/jenkins_boot_sequence/jenkins_booting.html +1 -0
  22. data/fixtures/jenkins_boot_sequence/jenkins_ready.html +1 -0
  23. data/fixtures/jenkins_boot_sequence/pre_jenkins_booting.html +1 -0
  24. data/fixtures/projects/rails/Gemfile +3 -0
  25. data/fixtures/projects/rails/Gemfile.lock +10 -0
  26. data/fixtures/projects/rails/Rakefile +4 -0
  27. data/lib/engineyard-jenkins.rb +4 -0
  28. data/lib/engineyard-jenkins/appcloud_env.rb +49 -0
  29. data/lib/engineyard-jenkins/cli.rb +134 -0
  30. data/lib/engineyard-jenkins/cli/install_generator.rb +55 -0
  31. data/lib/engineyard-jenkins/cli/install_generator/templates/attributes.rb.tt +17 -0
  32. data/lib/engineyard-jenkins/cli/install_generator/templates/cookbooks/main/attributes/recipe.rb +3 -0
  33. data/lib/engineyard-jenkins/cli/install_generator/templates/cookbooks/main/definitions/ey_cloud_report.rb +6 -0
  34. data/lib/engineyard-jenkins/cli/install_generator/templates/cookbooks/main/libraries/ruby_block.rb +40 -0
  35. data/lib/engineyard-jenkins/cli/install_generator/templates/cookbooks/main/libraries/run_for_app.rb +12 -0
  36. data/lib/engineyard-jenkins/cli/install_generator/templates/recipes.rb +95 -0
  37. data/lib/engineyard-jenkins/cli/install_server_generator.rb +25 -0
  38. data/lib/engineyard-jenkins/cli/install_server_generator/templates/attributes.rb.tt +3 -0
  39. data/lib/engineyard-jenkins/cli/install_server_generator/templates/cookbooks/jenkins_master/recipes/default.rb +95 -0
  40. data/lib/engineyard-jenkins/cli/install_server_generator/templates/cookbooks/jenkins_master/templates/default/init.sh.erb +26 -0
  41. data/lib/engineyard-jenkins/cli/install_server_generator/templates/cookbooks/jenkins_master/templates/default/proxy.conf.erb +20 -0
  42. data/lib/engineyard-jenkins/cli/install_server_generator/templates/cookbooks/main/attributes/recipe.rb +3 -0
  43. data/lib/engineyard-jenkins/cli/install_server_generator/templates/cookbooks/main/definitions/ey_cloud_report.rb +6 -0
  44. data/lib/engineyard-jenkins/cli/install_server_generator/templates/cookbooks/main/libraries/ruby_block.rb +40 -0
  45. data/lib/engineyard-jenkins/cli/install_server_generator/templates/cookbooks/main/libraries/run_for_app.rb +12 -0
  46. data/lib/engineyard-jenkins/cli/install_server_generator/templates/cookbooks/main/recipes/default.rb +1 -0
  47. data/lib/engineyard-jenkins/thor-ext/actions/directory.rb +33 -0
  48. data/lib/engineyard-jenkins/version.rb +5 -0
  49. data/spec/appcloud_env_spec.rb +75 -0
  50. data/spec/spec_helper.rb +4 -0
  51. metadata +254 -0
@@ -0,0 +1,26 @@
1
+ #!/sbin/runscript
2
+
3
+ # Start/stop script for jenkins
4
+
5
+ PIDFILE=<%= @pid %>
6
+ HUDSON_HOME="<%= @home %>"
7
+ COMMAND=/usr/bin/java
8
+ ARGUMENTS="-Djava.io.tmpdir=${HUDSON_HOME}/tmp -jar ${HUDSON_HOME}/jenkins.war --webroot=${HUDSON_HOME}/war --httpPort=<%= @port %> ajp13ListenAddress=127.0.0.1"
9
+ RUN_AS="<%= @user %>"
10
+ NAME=Jenkins-CI
11
+
12
+ start() {
13
+ ebegin "Starting $NAME"
14
+ export HUDSON_HOME="${HUDSON_HOME}"
15
+ export HOME="/home/${RUN_AS}"
16
+ export USER="${RUN_AS}"
17
+ start-stop-daemon -b --start --make-pidfile --pidfile $PIDFILE --chuid $RUN_AS --exec $COMMAND -- $ARGUMENTS &>$HUDSON_HOME/logs/jenkins_log
18
+ eend $?
19
+ }
20
+
21
+ stop() {
22
+ ebegin "Stopping $NAME"
23
+ start-stop-daemon --stop --quiet --pidfile $PIDFILE
24
+ rm -f $PIDFILE
25
+ eend $?
26
+ }
@@ -0,0 +1,20 @@
1
+ # Nginx config for Jenkins CI behind a virtual host
2
+ # TODO: Add SSL support as per http://gist.github.com/460906
3
+
4
+ upstream jenkins {
5
+ server localhost:<%= @port %>;
6
+ }
7
+
8
+ server {
9
+ listen 80 default;
10
+ server_name jenkins.example.com;
11
+
12
+ location / {
13
+ proxy_set_header X-Real-IP $remote_addr;
14
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
15
+ proxy_set_header X-Forwarded-Proto https;
16
+ proxy_set_header Host $http_host;
17
+ proxy_next_upstream error;
18
+ proxy_pass http://jenkins;
19
+ }
20
+ }
@@ -0,0 +1,3 @@
1
+ recipes('main')
2
+ owner_name(@attribute[:users].first[:username])
3
+ owner_pass(@attribute[:users].first[:password])
@@ -0,0 +1,6 @@
1
+ define :ey_cloud_report do
2
+ execute "reporting for #{params[:name]}" do
3
+ command "ey-enzyme --report '#{params[:message]}'"
4
+ epic_fail true
5
+ end
6
+ end
@@ -0,0 +1,40 @@
1
+
2
+ class Chef
3
+ class Resource
4
+ class RubyBlock < Chef::Resource
5
+ def initialize(name, collection=nil, node=nil)
6
+ super(name, collection, node)
7
+ @resource_name = :ruby_block
8
+ @action = :create
9
+ @allowed_actions.push(:create)
10
+ end
11
+
12
+ def block(&block)
13
+ if block
14
+ @block = block
15
+ else
16
+ @block
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+
24
+ class Chef
25
+ class Provider
26
+ class RubyBlock < Chef::Provider
27
+ def load_current_resource
28
+ Chef::Log.debug(@new_resource.inspect)
29
+ true
30
+ end
31
+
32
+ def action_create
33
+ @new_resource.block.call
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ Chef::Platform.platforms[:default].merge! :ruby_block => Chef::Provider::RubyBlock
40
+
@@ -0,0 +1,12 @@
1
+ class Chef
2
+ class Recipe
3
+ def run_for_app(*apps, &block)
4
+ apps.map! {|a| a.to_s }
5
+ node[:applications].map{|k,v| [k,v] }.sort_by {|a,b| a }.each do |name, app_data|
6
+ if apps.include?(name)
7
+ block.call(name, app_data)
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,33 @@
1
+ # Extension: Sorts the Dir[lookup] to ensure deterministic ordering of actions
2
+ # to allow test assertions
3
+
4
+ class Thor
5
+ module Actions
6
+ class Directory < EmptyDirectory #:nodoc:
7
+ protected
8
+
9
+ def execute!
10
+ lookup = config[:recursive] ? File.join(source, '**') : source
11
+ lookup = File.join(lookup, '{*,.[a-z]*}')
12
+
13
+ Dir[lookup].sort.each do |file_source|
14
+ next if File.directory?(file_source)
15
+ file_destination = File.join(given_destination, file_source.gsub(source, '.'))
16
+ file_destination.gsub!('/./', '/')
17
+
18
+ case file_source
19
+ when /\.empty_directory$/
20
+ dirname = File.dirname(file_destination).gsub(/\/\.$/, '')
21
+ next if dirname == given_destination
22
+ base.empty_directory(dirname, config)
23
+ when /\.tt$/
24
+ destination = base.template(file_source, file_destination[0..-4], config, &@block)
25
+ else
26
+ destination = base.copy_file(file_source, file_destination, config, &@block)
27
+ end
28
+ end
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,5 @@
1
+ module Engineyard
2
+ module Jenkins
3
+ VERSION = '0.4.0'
4
+ end
5
+ end
@@ -0,0 +1,75 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ require 'engineyard-jenkins/appcloud_env'
4
+
5
+ describe Engineyard::Jenkins::AppcloudEnv do
6
+ def appcloud_env
7
+ @appcloud_env ||= Engineyard::Jenkins::AppcloudEnv.new
8
+ end
9
+
10
+ def find_environments(options = {})
11
+ appcloud_env.find_environments(options)
12
+ end
13
+
14
+ before do
15
+ @tmp_root = File.dirname(__FILE__) + "/../tmp"
16
+ @home_path = File.expand_path(File.join(@tmp_root, "home"))
17
+ FileUtils.mkdir_p(@home_path)
18
+ ENV['EYRC'] = File.join(@home_path, ".eyrc")
19
+ appcloud_env.stub(:clean_host_name)
20
+ end
21
+ describe ".find_environments - no args" do
22
+ it "return [nil, nil] unless it has reason to return something else" do
23
+ appcloud_env.stub(:fetch_environment).and_raise(EY::NoEnvironmentError)
24
+ find_environments.should == []
25
+ end
26
+ it "returns [env_name, account_name] if finds one env 'jenkins' in any account" do
27
+ appcloud_env.should_receive(:fetch_environment).with("jenkins", nil).and_return(env = EY::Model::App.new(123, EY::Model::Account.new(789, 'mine')))
28
+ appcloud_env.should_receive(:fetch_environment).with("jenkins_server", nil).and_raise(EY::NoEnvironmentError)
29
+ appcloud_env.should_receive(:fetch_environment).with("jenkins_production", nil).and_raise(EY::NoEnvironmentError)
30
+ appcloud_env.should_receive(:fetch_environment).with("jenkins_server_production", nil).and_raise(EY::NoEnvironmentError)
31
+ find_environments.should == [['jenkins', 'mine', env]]
32
+ end
33
+ it "returns many result pairs" do
34
+ appcloud_env.should_receive(:fetch_environment).with("jenkins", nil).and_return(env = EY::Model::App.new(123, EY::Model::Account.new(789, 'mine')))
35
+ appcloud_env.should_receive(:fetch_environment).with("jenkins_server", nil).and_raise(EY::NoEnvironmentError)
36
+ appcloud_env.should_receive(:fetch_environment).with("jenkins_server_production", nil).and_raise(EY::NoEnvironmentError)
37
+ appcloud_env.should_receive(:fetch_environment).with("jenkins_production", nil) {
38
+ raise EY::MultipleMatchesError, <<-ERROR.gsub(/^\s+/, '')
39
+ jenkins_production # ey <command> --environment='jenkins_production' --account='mine'
40
+ jenkins_production # ey <command> --environment='jenkins_production' --account='yours'
41
+ ERROR
42
+ }
43
+ find_environments.should == [['jenkins', 'mine', env], ['jenkins_production', 'mine', nil], ['jenkins_production', 'yours', nil]]
44
+ end
45
+ end
46
+
47
+ describe ".find_environments - specific account" do
48
+ it "return [nil, nil] unless it has reason to return something else" do
49
+ appcloud_env.stub(:fetch_environment).and_raise(EY::NoEnvironmentError)
50
+ find_environments(:account => "mine").should == []
51
+ end
52
+ it "returns [env_name, account_name] if finds one env 'jenkins' in specific account" do
53
+ appcloud_env.should_receive(:fetch_environment).with("jenkins", "mine").and_return(env = EY::Model::App.new(123, EY::Model::Account.new(789, 'mine')))
54
+ appcloud_env.should_receive(:fetch_environment).with("jenkins_server", "mine").and_raise(EY::NoEnvironmentError)
55
+ appcloud_env.should_receive(:fetch_environment).with("jenkins_production", "mine").and_raise(EY::NoEnvironmentError)
56
+ appcloud_env.should_receive(:fetch_environment).with("jenkins_server_production", "mine").and_raise(EY::NoEnvironmentError)
57
+ find_environments(:account => "mine").should == [['jenkins', 'mine', env]]
58
+ end
59
+ end
60
+
61
+ describe ".find_environments - specific environment" do
62
+ it "return [nil, nil] unless it has reason to return something else" do
63
+ appcloud_env.stub(:fetch_environment).and_raise(EY::NoEnvironmentError)
64
+ find_environments(:environment => "jenkins").should == []
65
+ end
66
+ it "returns [env_name, account_name] if finds one env 'jenkins' in any account" do
67
+ appcloud_env.should_receive(:fetch_environment).with("jenkins", nil).and_return(env = EY::Model::App.new(123, EY::Model::Account.new(789, 'mine')))
68
+ find_environments(:environment => "jenkins").should == [['jenkins', 'mine', env]]
69
+ end
70
+ it "returns [env_name, account_name] if finds one env 'jenkins' in specific account" do
71
+ appcloud_env.should_receive(:fetch_environment).with("jenkins", "mine").and_return(env = EY::Model::App.new(123, EY::Model::Account.new(789, 'mine')))
72
+ find_environments(:environment => "jenkins", :account => "mine").should == [['jenkins', 'mine', env]]
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,4 @@
1
+ $:.unshift(File.expand_path(File.dirname(__FILE__) + '/../lib'))
2
+ require 'bundler/setup'
3
+ require 'engineyard-jenkins'
4
+ require 'rspec'
metadata ADDED
@@ -0,0 +1,254 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: engineyard-jenkins
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.4.0
6
+ platform: ruby
7
+ authors:
8
+ - Dr Nic Williams
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-04-12 00:00:00 -07:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: thor
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: 0.14.6
24
+ type: :runtime
25
+ prerelease: false
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: engineyard
29
+ requirement: &id002 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: 1.3.17
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: jenkins
40
+ requirement: &id003 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.6.2
46
+ type: :runtime
47
+ prerelease: false
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: rake
51
+ requirement: &id004 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ~>
55
+ - !ruby/object:Gem::Version
56
+ version: 0.8.7
57
+ type: :development
58
+ prerelease: false
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: cucumber
62
+ requirement: &id005 !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ~>
66
+ - !ruby/object:Gem::Version
67
+ version: 0.9.4
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
72
+ name: rspec
73
+ requirement: &id006 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ~>
77
+ - !ruby/object:Gem::Version
78
+ version: 2.1.0
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: *id006
82
+ - !ruby/object:Gem::Dependency
83
+ name: json
84
+ requirement: &id007 !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 1.4.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: *id007
93
+ - !ruby/object:Gem::Dependency
94
+ name: awesome_print
95
+ requirement: &id008 !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: "0"
101
+ type: :development
102
+ prerelease: false
103
+ version_requirements: *id008
104
+ - !ruby/object:Gem::Dependency
105
+ name: realweb
106
+ requirement: &id009 !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ~>
110
+ - !ruby/object:Gem::Version
111
+ version: 0.1.6
112
+ type: :development
113
+ prerelease: false
114
+ version_requirements: *id009
115
+ - !ruby/object:Gem::Dependency
116
+ name: open4
117
+ requirement: &id010 !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: "0"
123
+ type: :development
124
+ prerelease: false
125
+ version_requirements: *id010
126
+ - !ruby/object:Gem::Dependency
127
+ name: sinatra
128
+ requirement: &id011 !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ version: "0"
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: *id011
137
+ - !ruby/object:Gem::Dependency
138
+ name: fakeweb
139
+ requirement: &id012 !ruby/object:Gem::Requirement
140
+ none: false
141
+ requirements:
142
+ - - ~>
143
+ - !ruby/object:Gem::Version
144
+ version: 1.3.0
145
+ type: :development
146
+ prerelease: false
147
+ version_requirements: *id012
148
+ description: Run your continuous integration (CI) tests against your Engine Yard AppCloud environments - the exact same configuration you are using in production!
149
+ email:
150
+ - drnicwilliams@gmail.com
151
+ executables:
152
+ - ey-jenkins
153
+ extensions: []
154
+
155
+ extra_rdoc_files: []
156
+
157
+ files:
158
+ - .gitignore
159
+ - Gemfile
160
+ - Gemfile.lock
161
+ - History.md
162
+ - README.md
163
+ - Rakefile
164
+ - bin/ey-jenkins
165
+ - engineyard-jenkins.gemspec
166
+ - features/install.feature
167
+ - features/install_server.feature
168
+ - features/step_definitions/api_steps.rb
169
+ - features/step_definitions/common_steps.rb
170
+ - features/step_definitions/fixture_project_steps.rb
171
+ - features/step_definitions/jenkins_steps.rb
172
+ - features/support/common.rb
173
+ - features/support/engineyard.rb
174
+ - features/support/env.rb
175
+ - features/support/matchers.rb
176
+ - fixtures/cookbooks/main/recipes/default.rb
177
+ - fixtures/cookbooks/redis/recipes/default.rb
178
+ - fixtures/jenkins_boot_sequence/jenkins_booting.html
179
+ - fixtures/jenkins_boot_sequence/jenkins_ready.html
180
+ - fixtures/jenkins_boot_sequence/pre_jenkins_booting.html
181
+ - fixtures/projects/rails/Gemfile
182
+ - fixtures/projects/rails/Gemfile.lock
183
+ - fixtures/projects/rails/Rakefile
184
+ - lib/engineyard-jenkins.rb
185
+ - lib/engineyard-jenkins/appcloud_env.rb
186
+ - lib/engineyard-jenkins/cli.rb
187
+ - lib/engineyard-jenkins/cli/install_generator.rb
188
+ - lib/engineyard-jenkins/cli/install_generator/templates/attributes.rb.tt
189
+ - lib/engineyard-jenkins/cli/install_generator/templates/cookbooks/main/attributes/recipe.rb
190
+ - lib/engineyard-jenkins/cli/install_generator/templates/cookbooks/main/definitions/ey_cloud_report.rb
191
+ - lib/engineyard-jenkins/cli/install_generator/templates/cookbooks/main/libraries/ruby_block.rb
192
+ - lib/engineyard-jenkins/cli/install_generator/templates/cookbooks/main/libraries/run_for_app.rb
193
+ - lib/engineyard-jenkins/cli/install_generator/templates/recipes.rb
194
+ - lib/engineyard-jenkins/cli/install_server_generator.rb
195
+ - lib/engineyard-jenkins/cli/install_server_generator/templates/attributes.rb.tt
196
+ - lib/engineyard-jenkins/cli/install_server_generator/templates/cookbooks/jenkins_master/recipes/default.rb
197
+ - lib/engineyard-jenkins/cli/install_server_generator/templates/cookbooks/jenkins_master/templates/default/init.sh.erb
198
+ - lib/engineyard-jenkins/cli/install_server_generator/templates/cookbooks/jenkins_master/templates/default/proxy.conf.erb
199
+ - lib/engineyard-jenkins/cli/install_server_generator/templates/cookbooks/main/attributes/recipe.rb
200
+ - lib/engineyard-jenkins/cli/install_server_generator/templates/cookbooks/main/definitions/ey_cloud_report.rb
201
+ - lib/engineyard-jenkins/cli/install_server_generator/templates/cookbooks/main/libraries/ruby_block.rb
202
+ - lib/engineyard-jenkins/cli/install_server_generator/templates/cookbooks/main/libraries/run_for_app.rb
203
+ - lib/engineyard-jenkins/cli/install_server_generator/templates/cookbooks/main/recipes/default.rb
204
+ - lib/engineyard-jenkins/thor-ext/actions/directory.rb
205
+ - lib/engineyard-jenkins/version.rb
206
+ - spec/appcloud_env_spec.rb
207
+ - spec/spec_helper.rb
208
+ has_rdoc: true
209
+ homepage: http://github.com/engineyard/engineyard-jenkins
210
+ licenses: []
211
+
212
+ post_install_message:
213
+ rdoc_options: []
214
+
215
+ require_paths:
216
+ - lib
217
+ required_ruby_version: !ruby/object:Gem::Requirement
218
+ none: false
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ hash: -2707218013729594709
223
+ segments:
224
+ - 0
225
+ version: "0"
226
+ required_rubygems_version: !ruby/object:Gem::Requirement
227
+ none: false
228
+ requirements:
229
+ - - ">="
230
+ - !ruby/object:Gem::Version
231
+ hash: -2707218013729594709
232
+ segments:
233
+ - 0
234
+ version: "0"
235
+ requirements: []
236
+
237
+ rubyforge_project: engineyard-jenkins
238
+ rubygems_version: 1.6.2
239
+ signing_key:
240
+ specification_version: 3
241
+ summary: Easier to do CI than not to. Use Jenkins CI with Engine Yard AppCloud.
242
+ test_files:
243
+ - features/install.feature
244
+ - features/install_server.feature
245
+ - features/step_definitions/api_steps.rb
246
+ - features/step_definitions/common_steps.rb
247
+ - features/step_definitions/fixture_project_steps.rb
248
+ - features/step_definitions/jenkins_steps.rb
249
+ - features/support/common.rb
250
+ - features/support/engineyard.rb
251
+ - features/support/env.rb
252
+ - features/support/matchers.rb
253
+ - spec/appcloud_env_spec.rb
254
+ - spec/spec_helper.rb