dpl 1.7.22.travis.1047.4 → 1.7.22.travis.1056.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/Gemfile +0 -4
- data/README.md +25 -0
- data/lib/dpl/provider/gae.rb +67 -45
- data/spec/provider/gae_spec.rb +15 -26
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
!binary "U0hBMQ==":
|
|
3
3
|
metadata.gz: !binary |-
|
|
4
|
-
|
|
4
|
+
OWRmNjMxZWMxZTYyMjljY2NiMjQxNzI5ZTY3MTY4NDNkM2VhMjEyMQ==
|
|
5
5
|
data.tar.gz: !binary |-
|
|
6
|
-
|
|
6
|
+
YWUwOWYyMWMxNGY5NDhjOGNmNmM2NjE1YmJiNjc4Nzc2OWJhZDI1OQ==
|
|
7
7
|
SHA512:
|
|
8
8
|
metadata.gz: !binary |-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
NzEwYjJkZWJhODQ1YjU4NzI2NTliNmYzZTI4MDdjOGMyZTczMTQ0MDAwNjEx
|
|
10
|
+
N2ZiMzM5MDdjZDdkZTgzNjE1Y2I3ZmEyYTg4MWVjOGMzNjY4Njc3ZTc3YThi
|
|
11
|
+
NTU4YmU0NWVlZmNhMDRkYmVkOWE5MTg2MWU0ODdlY2UzMTMwMmY=
|
|
12
12
|
data.tar.gz: !binary |-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
MWVkZmZmYTAzNmY4MmVkNWIxYjhlZWU5MDFjYzk1N2U3MWQxMjBhOTY1N2I3
|
|
14
|
+
ODdhNTk5YjUxNmM1ZmMzNWU1NWI3ZmZhMjM5NzRkOGZiMDBkNzI1NTFjNjMx
|
|
15
|
+
MTkzMjM4MmJhYjE0ZmNmYjJlMTg4ZWQ3NGJjOTU2ZjgyZmIyOGE=
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -42,6 +42,7 @@ Dpl supports the following providers:
|
|
|
42
42
|
* [ExoScale](#exoscale)
|
|
43
43
|
* [AWS CodeDeploy](#aws-codedeploy)
|
|
44
44
|
* [Script](#script)
|
|
45
|
+
* [Google App Engine (experimental)](#google-app-engine)
|
|
45
46
|
|
|
46
47
|
## Installation:
|
|
47
48
|
|
|
@@ -719,3 +720,27 @@ Deployment will be marked a failure if the script exits with nonzero status.
|
|
|
719
720
|
#### Example:
|
|
720
721
|
|
|
721
722
|
dpl --provider=script --script=./script/deploy.sh
|
|
723
|
+
|
|
724
|
+
### Google App Engine:
|
|
725
|
+
|
|
726
|
+
Deploys to Google App Engine and Google App Engine Managed VMs via the Google Cloud SDK and
|
|
727
|
+
it's [`gcloud` tool](https://cloud.google.com/sdk/gcloud/) using a [Service Account](https://developers.google.com/console/help/new/#serviceaccounts).
|
|
728
|
+
|
|
729
|
+
#### Options:
|
|
730
|
+
|
|
731
|
+
* **project**: [Project ID](https://developers.google.com/console/help/new/#projectnumber) used to identify the project on Google Cloud.
|
|
732
|
+
* **keyfile**: Path to the JSON file containing your [Service Account](https://developers.google.com/console/help/new/#serviceaccounts) credentials in [JSON Web Token](https://tools.ietf.org/html/rfc7519) format. To be obtained via the [Google Developers Console](https://console.developers.google.com/project/_/apiui/credential). Defaults to `"service-account.json"`. Note that this file should be handled with care as it contains authorization keys.
|
|
733
|
+
* **config**: Path to your module configuration file. Defaults to `"app.yaml"`. This file is runtime dependent ([Go](https://cloud.google.com/appengine/docs/go/config/appconfig), [Java](https://cloud.google.com/appengine/docs/java/configyaml/appconfig_yaml), [PHP](https://developers.google.com/console/help/new/#projectnumber), [Python](https://cloud.google.com/appengine/docs/python/config/appconfig))
|
|
734
|
+
* **version**: The version of the app that will be created or replaced by this deployment. If you do not specify a version, one will be generated for you. See [`gcloud preview app deploy`](https://cloud.google.com/sdk/gcloud/reference/preview/app/deploy)
|
|
735
|
+
* **default**: Flag to set the deployed version to be the default serving version. See [`gcloud preview app deploy`](https://cloud.google.com/sdk/gcloud/reference/preview/app/deploy)
|
|
736
|
+
* **verbosity**: Let's you adjust the verbosity when invoking `"gcloud"`. Defaults to `"warning"`. See [`gcloud`](https://cloud.google.com/sdk/gcloud/reference/).
|
|
737
|
+
* **docker_build**: If deploying a Managed VM, specifies where to build your image. Typical values are `"remote"` to build on Google Cloud Engine and `"local"` which requires Docker to be set up properly (to utilize this on Travis CI, read [Using Docker on Travis CI](http://blog.travis-ci.com/2015-08-19-using-docker-on-travis-ci/)). Defaults to `"remote"`.
|
|
738
|
+
|
|
739
|
+
#### Environment variables:
|
|
740
|
+
|
|
741
|
+
* **GOOGLECLOUDPROJECT** or **CLOUDSDK_CORE_PROJECT**: Can be used instead of the `project` option.
|
|
742
|
+
* **GOOGLECLOUDKEYFILE**: Can be used instead of the `keyfile` option.
|
|
743
|
+
|
|
744
|
+
#### Example:
|
|
745
|
+
|
|
746
|
+
dpl --provider=gae --project=example --default=true
|
data/lib/dpl/provider/gae.rb
CHANGED
|
@@ -1,69 +1,91 @@
|
|
|
1
|
-
require 'digest/sha1'
|
|
2
|
-
require 'open-uri'
|
|
3
|
-
|
|
4
1
|
module DPL
|
|
5
2
|
class Provider
|
|
6
3
|
class GAE < Provider
|
|
7
4
|
experimental 'Google App Engine'
|
|
8
5
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
APPCFG_BIN=File.join(GAE_DIR, 'appcfg.py')
|
|
16
|
-
|
|
17
|
-
def self.install_sdk
|
|
18
|
-
requires 'rubyzip', :load => 'zip'
|
|
19
|
-
$stderr.puts "Setting up Google App Engine SDK"
|
|
20
|
-
|
|
21
|
-
Dir.chdir(BASE_DIR) do
|
|
22
|
-
unless File.exists? GAE_ZIP_FILE
|
|
23
|
-
$stderr.puts "Downloading Google App Engine SDK"
|
|
24
|
-
File.open(GAE_ZIP_FILE, "wb") do |dest|
|
|
25
|
-
open("https://storage.googleapis.com/appengine-sdks/featured/#{GAE_ZIP_FILE}", "rb") do |src|
|
|
26
|
-
dest.write(src.read)
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
sha1sum = Digest::SHA1.hexdigest(File.read(GAE_ZIP_FILE))
|
|
31
|
-
unless sha1sum == SHA1SUM
|
|
32
|
-
raise "Checksum did not match for #{GAE_ZIP_FILE}"
|
|
33
|
-
end
|
|
6
|
+
BASE='https://dl.google.com/dl/cloudsdk/channels/rapid/'
|
|
7
|
+
NAME='google-cloud-sdk'
|
|
8
|
+
EXT='.tar.gz'
|
|
9
|
+
INSTALL='~'
|
|
10
|
+
BOOTSTRAP="#{INSTALL}/#{NAME}/bin/bootstrapping/install.py"
|
|
11
|
+
GCLOUD="#{INSTALL}/#{NAME}/bin/gcloud"
|
|
34
12
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
end
|
|
41
|
-
end
|
|
13
|
+
def install_deploy_dependencies
|
|
14
|
+
# FIXME this is a workaround for https://code.google.com/p/google-cloud-sdk/issues/detail?id=228
|
|
15
|
+
if docker_build == "remote" && !File.exists?("#{Dir.home}/.ssh/google_compute_engine")
|
|
16
|
+
unless context.shell('ssh-keygen -f ~/.ssh/google_compute_engine -t rsa -N \'\'')
|
|
17
|
+
error 'Failed to generate SSH key for remote Docker build.'
|
|
42
18
|
end
|
|
43
19
|
end
|
|
44
|
-
end
|
|
45
20
|
|
|
46
|
-
|
|
21
|
+
if File.exists? GCLOUD
|
|
22
|
+
return
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
$stderr.puts 'Downloading Google Cloud SDK ...'
|
|
26
|
+
|
|
27
|
+
unless context.shell("curl -L #{BASE + NAME + EXT} | gzip -d | tar -x -C #{INSTALL}")
|
|
28
|
+
error 'Could not download Google Cloud SDK.'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
$stderr.puts 'Bootstrapping Google Cloud SDK ...'
|
|
32
|
+
|
|
33
|
+
unless context.shell("#{BOOTSTRAP} --usage-reporting=false --command-completion=false --path-update=false --additional-components=preview")
|
|
34
|
+
error 'Could not bootstrap Google Cloud SDK.'
|
|
35
|
+
end
|
|
36
|
+
end
|
|
47
37
|
|
|
48
38
|
def needs_key?
|
|
49
39
|
false
|
|
50
40
|
end
|
|
51
41
|
|
|
52
42
|
def check_auth
|
|
43
|
+
unless context.shell("#{GCLOUD} -q --verbosity debug auth activate-service-account --key-file #{keyfile}")
|
|
44
|
+
error 'Authentication failed.'
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def keyfile
|
|
49
|
+
options[:keyfile] || context.env['GOOGLECLOUDKEYFILE'] || 'service-account.json'
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def project
|
|
53
|
+
options[:project] || context.env['GOOGLECLOUDPROJECT'] || context.env['CLOUDSDK_CORE_PROJECT'] || File.dirname(context.env['TRAVIS_REPO_SLUG'] || '')
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def version
|
|
57
|
+
options[:version] || ''
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def config
|
|
61
|
+
options[:config] || 'app.yaml'
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def default
|
|
65
|
+
options[:default]
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def verbosity
|
|
69
|
+
options[:verbosity] || 'warning'
|
|
53
70
|
end
|
|
54
71
|
|
|
55
|
-
def
|
|
56
|
-
options[:
|
|
72
|
+
def docker_build
|
|
73
|
+
options[:docker_build] || 'remote'
|
|
57
74
|
end
|
|
58
75
|
|
|
59
76
|
def push_app
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
77
|
+
command = GCLOUD
|
|
78
|
+
command << ' --quiet'
|
|
79
|
+
command << " --verbosity \"#{verbosity}\""
|
|
80
|
+
command << " --project \"#{project}\""
|
|
81
|
+
command << " preview app deploy \"#{config}\""
|
|
82
|
+
command << " --version \"#{version}\""
|
|
83
|
+
command << " --docker-build \"#{docker_build}\""
|
|
84
|
+
command << (default ? ' --set-default' : '')
|
|
85
|
+
unless context.shell(command)
|
|
86
|
+
error 'Deployment failed.'
|
|
64
87
|
end
|
|
65
|
-
context.shell "#{APPCFG_BIN} --oauth2_refresh_token=#{options[:oauth_refresh_token]} update #{app_dir}"
|
|
66
88
|
end
|
|
67
89
|
end
|
|
68
90
|
end
|
|
69
|
-
end
|
|
91
|
+
end
|
data/spec/provider/gae_spec.rb
CHANGED
|
@@ -1,26 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
# provider.push_app
|
|
17
|
-
# end
|
|
18
|
-
#
|
|
19
|
-
# example 'with custom app_dir' do
|
|
20
|
-
# app_dir='foo'
|
|
21
|
-
# provider.options.update(:oauth_refresh_token => token, :app_dir => app_dir)
|
|
22
|
-
# expect(provider.context).to receive(:shell).with("#{DPL::Provider::GAE::APPCFG_BIN} --oauth2_refresh_token=#{token} update #{app_dir}").and_return(true)
|
|
23
|
-
# provider.push_app
|
|
24
|
-
# end
|
|
25
|
-
# end
|
|
26
|
-
# end
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'dpl/provider/gae'
|
|
3
|
+
|
|
4
|
+
describe DPL::Provider::GAE do
|
|
5
|
+
subject :provider do
|
|
6
|
+
described_class.new(DummyContext.new, project: 'test')
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe '#push_app' do
|
|
10
|
+
example 'with defaults' do
|
|
11
|
+
expect(provider.context).to receive(:shell).with("#{DPL::Provider::GAE::GCLOUD} --quiet --verbosity \"warning\" --project \"test\" preview app deploy \"app.yaml\" --version \"\" --docker-build \"remote\"").and_return(true)
|
|
12
|
+
provider.push_app
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dpl
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.7.22.travis.
|
|
4
|
+
version: 1.7.22.travis.1056.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Konstantin Haase
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-09-
|
|
11
|
+
date: 2015-09-02 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rspec
|