Class: DPL::Provider::CodeDeploy
Instance Attribute Summary
#context, #options
Instance Method Summary
collapse
apt_get, #check_app, #commit_msg, context, #create_key, #default_text_charset, #default_text_charset?, #deploy, deprecated, #detect_encoding?, #encoding_for, #error, experimental, #initialize, #log, new, npm_g, #option, pip, requires, #run, #setup_git_credentials, #setup_git_ssh, #sha, shell, #user_agent, #warn
Constructor Details
This class inherits a constructor from DPL::Provider
Instance Method Details
#access_key_id ⇒ Object
25
26
27
|
# File 'lib/dpl/provider/code_deploy.rb', line 25
def access_key_id
options[:access_key_id] || context.env['AWS_ACCESS_KEY_ID'] || raise(Error, "missing access_key_id")
end
|
#bundle_type ⇒ Object
120
121
122
123
124
125
126
|
# File 'lib/dpl/provider/code_deploy.rb', line 120
def bundle_type
if s3_key =~ /\.(tar|tgz|zip)$/
options[:bundle_type] || $1
else
option(:bundle_type)
end
end
|
#check_auth ⇒ Object
136
137
138
|
# File 'lib/dpl/provider/code_deploy.rb', line 136
def check_auth
log "Logging in with Access Key: #{access_key_id[-4..-1].rjust(20, '*')}"
end
|
#cleanup ⇒ Object
140
141
|
# File 'lib/dpl/provider/code_deploy.rb', line 140
def cleanup
end
|
#code_deploy ⇒ Object
8
9
10
|
# File 'lib/dpl/provider/code_deploy.rb', line 8
def code_deploy
@code_deploy ||= Aws::CodeDeploy::Client.new(code_deploy_options)
end
|
#code_deploy_options ⇒ Object
16
17
18
19
20
21
22
23
|
# File 'lib/dpl/provider/code_deploy.rb', line 16
def code_deploy_options
code_deploy_options = {
region: options[:region] || 'us-east-1',
credentials: Aws::Credentials.new(access_key_id, secret_access_key)
}
code_deploy_options[:endpoint] = options[:endpoint] if options[:endpoint]
code_deploy_options
end
|
#default_description ⇒ Object
132
133
134
|
# File 'lib/dpl/provider/code_deploy.rb', line 132
def default_description
"Deploy build #{context.env['TRAVIS_BUILD_NUMBER']} via Travis CI"
end
|
#github_revision ⇒ Object
67
68
69
70
71
72
73
74
75
|
# File 'lib/dpl/provider/code_deploy.rb', line 67
def github_revision
{
revision_type: 'GitHub',
git_hub_location: {
commit_id: options[:commit_id] || context.env['TRAVIS_COMMIT'] || `git rev-parse HEAD`.strip,
repository: options[:repository] || context.env['TRAVIS_REPO_SLUG'] || option(:repository)
}
}
end
|
#needs_key? ⇒ Boolean
33
34
35
|
# File 'lib/dpl/provider/code_deploy.rb', line 33
def needs_key?
false
end
|
#push_app ⇒ Object
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
# File 'lib/dpl/provider/code_deploy.rb', line 77
def push_app
rev = revision()
if rev[:s3_location]
rev_info = rev[:s3_location]
log "Registering app revision with version=#{rev_info[:version]}, etag=#{rev_info[:e_tag]}"
end
code_deploy.register_application_revision({
revision: rev,
application_name: options[:application] || option(:application_name),
description: options[:description] || default_description
})
data = code_deploy.create_deployment({
revision: revision,
application_name: options[:application] || option(:application_name),
deployment_group_name: options[:deployment_group] || option(:deployment_group_name),
description: options[:description] || default_description
})
log "Triggered deployment #{data.deployment_id.inspect}."
return unless options[:wait_until_deployed]
print "Deploying "
deployment = wait_until_deployed(data[:deployment_id])
print "\n"
if deployment[:status] == 'Succeeded'
log "Deployment successful."
else
error "Deployment failed."
end
rescue Aws::CodeDeploy::Errors::DeploymentLimitExceededException => exception
error(exception.message)
end
|
#revision ⇒ Object
37
38
39
40
41
42
43
44
|
# File 'lib/dpl/provider/code_deploy.rb', line 37
def revision
case options[:revision_type].to_s.downcase
when "s3" then s3_revision
when "github" then github_revision
when "" then options[:bucket] ? s3_revision : github_revision
else error("unknown revision type %p" % options[:revision_type])
end
end
|
#revision_version_info ⇒ Object
46
47
48
49
50
51
|
# File 'lib/dpl/provider/code_deploy.rb', line 46
def revision_version_info
s3obj = s3api.head_object({
bucket: option(:bucket),
key: s3_key
})
end
|
#s3_key ⇒ Object
128
129
130
|
# File 'lib/dpl/provider/code_deploy.rb', line 128
def s3_key
options[:key] || option(:s3_key)
end
|
#s3_revision ⇒ Object
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# File 'lib/dpl/provider/code_deploy.rb', line 53
def s3_revision
s3info = revision_version_info
{
revision_type: 'S3',
s3_location: {
bucket: option(:bucket),
bundle_type: bundle_type,
key: s3_key,
version: s3info[:version_id],
e_tag: s3info[:etag]
}
}
end
|
#s3api ⇒ Object
12
13
14
|
# File 'lib/dpl/provider/code_deploy.rb', line 12
def s3api
@s3api ||= Aws::S3::Client.new(code_deploy_options)
end
|
#secret_access_key ⇒ Object
29
30
31
|
# File 'lib/dpl/provider/code_deploy.rb', line 29
def secret_access_key
options[:secret_access_key] || context.env['AWS_SECRET_ACCESS_KEY'] || raise(Error, "missing secret_access_key")
end
|
#uncleanup ⇒ Object
143
144
|
# File 'lib/dpl/provider/code_deploy.rb', line 143
def uncleanup
end
|
#wait_until_deployed(deployment_id) ⇒ Object
108
109
110
111
112
113
114
115
116
117
118
|
# File 'lib/dpl/provider/code_deploy.rb', line 108
def wait_until_deployed(deployment_id)
deployment = {}
loop do
result = code_deploy.get_deployment(deployment_id: deployment_id)
deployment = result[:deployment_info]
break if deployment[:status] == "Succeeded" || deployment[:status] == "Failed" || deployment[:status] == "Stopped"
print "."
sleep 5
end
deployment
end
|