prima-twig 0.34.8 → 0.34.127
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 +5 -5
- data/bin/twig-build +2294 -0
- data/bin/twig-deploy +38 -75
- data/bin/twig-feature +297 -1592
- data/bin/twig-update-ami +100 -156
- data/lib/prima_aws_client.rb +267 -31
- data/lib/prima_twig.rb +5 -3
- metadata +119 -5
data/bin/twig-deploy
CHANGED
|
@@ -5,7 +5,10 @@ require_relative '../lib/prima_twig.rb'
|
|
|
5
5
|
require_relative '../lib/prima_aws_client.rb'
|
|
6
6
|
require 'colorize'
|
|
7
7
|
require 'highline/import'
|
|
8
|
-
require 'aws-sdk'
|
|
8
|
+
require 'aws-sdk-batch'
|
|
9
|
+
require 'aws-sdk-cloudformation'
|
|
10
|
+
require 'aws-sdk-ecs'
|
|
11
|
+
require 'aws-sdk-s3'
|
|
9
12
|
require 'redcarpet'
|
|
10
13
|
require 'mail'
|
|
11
14
|
require 'erb'
|
|
@@ -55,6 +58,7 @@ class Review
|
|
|
55
58
|
@cf = Aws::CloudFormation::Client.new
|
|
56
59
|
@ecs = Aws::ECS::Client.new
|
|
57
60
|
@s3 = Aws::S3::Client.new
|
|
61
|
+
@batch = Aws::Batch::Client.new
|
|
58
62
|
@s3_bucket = "prima-artifacts-encrypted"
|
|
59
63
|
end
|
|
60
64
|
|
|
@@ -94,15 +98,6 @@ class Review
|
|
|
94
98
|
artifact = artifacts.select {|v| v[:rev] == artifact_rev}.first
|
|
95
99
|
|
|
96
100
|
do_deploy! artifact_rev
|
|
97
|
-
exec_step "terminal-notifier -message 'Deploy terminato, vuoi lanciare paparatzinger?'" if which 'terminal-notifier'
|
|
98
|
-
|
|
99
|
-
confirm_message = "Vuoi lanciare paparatzinger?"
|
|
100
|
-
launch_paparatzinger = @prima.yesno confirm_message.blue
|
|
101
|
-
|
|
102
|
-
if launch_paparatzinger
|
|
103
|
-
output "Avvio paparatzinger per gli screenshot".yellow
|
|
104
|
-
job_name = launch_paparatzinger(artifact[:commit_msg])
|
|
105
|
-
end
|
|
106
101
|
|
|
107
102
|
mail = Mail.new do
|
|
108
103
|
from 'deploy@prima.it'
|
|
@@ -118,7 +113,6 @@ class Review
|
|
|
118
113
|
body << "Revision: [#{artifact[:rev]}](https://github.com/primait/prima/commit/#{artifact[:rev]}) del #{artifact[:created_at].strftime('%d/%m/%Y %H:%M:%S')}\n\n"
|
|
119
114
|
body << "Branch: [#{artifact[:branch]}](https://github.com/primait/prima/tree/#{artifact[:branch]})\n\n"
|
|
120
115
|
body << "Commit: #{commit_msg.gsub(/_/, '\_')}\n\n"
|
|
121
|
-
body << "Screenshots (tra qualche minuto): [BrowserStack](https://www.browserstack.com/automate) (Filtrare per: \"#{get_paparatzinger_job_name(commit_msg).gsub(/_/, '\_')}\")" if launch_paparatzinger
|
|
122
116
|
|
|
123
117
|
htmlBody = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new).render body
|
|
124
118
|
|
|
@@ -137,17 +131,34 @@ class Review
|
|
|
137
131
|
opts[:user_name] = @prima.config['aws_username']
|
|
138
132
|
opts[:password] = @prima.config['aws_password']
|
|
139
133
|
|
|
134
|
+
exec_step "git checkout master"
|
|
135
|
+
|
|
140
136
|
mail.delivery_method(:smtp, opts)
|
|
141
137
|
mail.deliver
|
|
142
138
|
|
|
143
|
-
|
|
139
|
+
invalidate_prismic_cache
|
|
140
|
+
|
|
141
|
+
launch_crawler
|
|
142
|
+
|
|
144
143
|
exec_step "terminal-notifier -message 'Deploy terminato'" if which 'terminal-notifier'
|
|
145
144
|
end
|
|
146
145
|
|
|
146
|
+
def invalidate_prismic_cache
|
|
147
|
+
[
|
|
148
|
+
"guarantee",
|
|
149
|
+
"glossary",
|
|
150
|
+
"guide",
|
|
151
|
+
"faq"
|
|
152
|
+
].each do |page|
|
|
153
|
+
|
|
154
|
+
exec_step "curl -X POST -H \"Content-Type: application/json\" https://www.prima.it/api/cms/update/#{page}?apikey=#{@prima.config['prima_apikey']}"
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
147
158
|
def reload_parameters!
|
|
148
159
|
artifact_rev = ''
|
|
149
160
|
resp = @cf.describe_stacks({
|
|
150
|
-
stack_name: "ecs-task-web-production"
|
|
161
|
+
stack_name: "ecs-task-web-vpc-production"
|
|
151
162
|
})
|
|
152
163
|
resp.stacks[0].parameters.each do |param|
|
|
153
164
|
if param.parameter_key == 'ReleaseVersion'
|
|
@@ -176,86 +187,42 @@ class Review
|
|
|
176
187
|
exec_step "git checkout #{artifact_rev}"
|
|
177
188
|
exec_step deploy_command
|
|
178
189
|
|
|
179
|
-
stack_name_web = 'ecs-task-web-production'
|
|
180
|
-
stack_name_consumer = 'ecs-task-consumer-production'
|
|
181
|
-
stack_name_cron = 'ecs-task-consumer-production'
|
|
190
|
+
stack_name_web = 'ecs-task-web-vpc-production'
|
|
191
|
+
stack_name_consumer = 'ecs-task-consumer-vpc-production'
|
|
192
|
+
stack_name_cron = 'ecs-task-consumer-vpc-production'
|
|
193
|
+
stack_name_job = 'batch-job-php-production'
|
|
182
194
|
wait_for_stack_ready(stack_name_web) unless stack_ready?(stack_name_web)
|
|
183
195
|
wait_for_stack_ready(stack_name_consumer) unless stack_ready?(stack_name_consumer)
|
|
184
196
|
wait_for_stack_ready(stack_name_cron) unless stack_ready?(stack_name_cron)
|
|
197
|
+
wait_for_stack_ready(stack_name_job) unless stack_ready?(stack_name_job)
|
|
185
198
|
end
|
|
186
199
|
|
|
187
200
|
def get_artifacts
|
|
188
201
|
artifacts = []
|
|
189
202
|
resp = @s3.list_objects(bucket: @s3_bucket, prefix: 'prima')
|
|
190
203
|
resp.contents.each do |l|
|
|
204
|
+
# aggiungiamo solo gli artefatti prodotti a partire dal branch master, riconosciuti tramite i metadata
|
|
191
205
|
rev = l.key.match(/^prima\/(\w{15}).tar.gz$/).captures.first if l.key.match(/^prima\/(\w{15}).tar.gz$/)
|
|
192
206
|
if rev
|
|
193
207
|
object = @s3.head_object(bucket: @s3_bucket, key: l.key)
|
|
194
208
|
commit_msg = ''
|
|
195
209
|
commit_msg = Base64.decode64(object.metadata['commit_msg']).strip if object.metadata.has_key? 'commit_msg'
|
|
196
|
-
artifacts << {rev: rev, created_at: object.last_modified, branch: object.metadata['branch'], commit_msg: commit_msg } if object.metadata.has_key? 'branch'
|
|
210
|
+
artifacts << {rev: rev, created_at: object.last_modified, branch: object.metadata['branch'], commit_msg: commit_msg } if (object.metadata.has_key? 'branch') && (object.metadata['branch'] == 'master')
|
|
197
211
|
end
|
|
198
212
|
end
|
|
199
213
|
artifacts.sort_by { |v| v[:created_at] }.reverse
|
|
200
214
|
end
|
|
201
215
|
|
|
202
|
-
def
|
|
203
|
-
|
|
204
|
-
response_target: '/tmp/paparatzinger_twig.yml',
|
|
205
|
-
bucket: 'prima-deploy',
|
|
206
|
-
key: 'paparatzinger_twig.yml')
|
|
207
|
-
|
|
208
|
-
paparatzinger_config = YAML.load_file '/tmp/paparatzinger_twig.yml'
|
|
209
|
-
|
|
210
|
-
uri = URI.parse(paparatzinger_config['prima_api_search_url'])
|
|
211
|
-
body = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
|
|
212
|
-
req = Net::HTTP::Get.new(uri)
|
|
213
|
-
req["x-apikey"] = paparatzinger_config['prima_api_token']
|
|
214
|
-
response = http.request req
|
|
215
|
-
response.body
|
|
216
|
-
end
|
|
217
|
-
|
|
218
|
-
saves = JSON.parse body
|
|
216
|
+
def launch_crawler()
|
|
217
|
+
resp = describe_stack_resource('batch-job-crawler-production', 'JobDefinition')
|
|
219
218
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
logical_resource_id = 'TaskDefinitionPaparatzinger'
|
|
225
|
-
resp = @cf.describe_stack_resource({
|
|
226
|
-
stack_name: 'ecs-task-paparatzinger-production',
|
|
227
|
-
logical_resource_id: logical_resource_id
|
|
228
|
-
})
|
|
229
|
-
|
|
230
|
-
resp = @ecs.run_task({
|
|
231
|
-
cluster: 'ecs-cluster-tools-ECSCluster-1I4THZHRXOTO5',
|
|
232
|
-
task_definition: resp.stack_resource_detail.physical_resource_id,
|
|
233
|
-
overrides: {
|
|
234
|
-
container_overrides: [
|
|
235
|
-
{
|
|
236
|
-
name: 'paparatzinger',
|
|
237
|
-
environment: [
|
|
238
|
-
{
|
|
239
|
-
name: 'JOB_NAME',
|
|
240
|
-
value: job_name,
|
|
241
|
-
},
|
|
242
|
-
{
|
|
243
|
-
name: 'VERSION',
|
|
244
|
-
value: paparatzinger_config['version'],
|
|
245
|
-
},
|
|
246
|
-
{
|
|
247
|
-
name: 'URL_GARANZIE',
|
|
248
|
-
value: url_garanzie
|
|
249
|
-
}
|
|
250
|
-
]
|
|
251
|
-
}
|
|
252
|
-
]
|
|
253
|
-
},
|
|
254
|
-
count: 1
|
|
219
|
+
@batch.submit_job({
|
|
220
|
+
job_name: "crawler", # required
|
|
221
|
+
job_queue: "tools-production", # required
|
|
222
|
+
job_definition: resp.stack_resource_detail.physical_resource_id # required
|
|
255
223
|
})
|
|
256
|
-
output "Paparatzinger lanciato con successo. URL: #{url_garanzie}\n".green
|
|
257
224
|
|
|
258
|
-
|
|
225
|
+
output "Crawler lanciato con successo!\n".green
|
|
259
226
|
end
|
|
260
227
|
|
|
261
228
|
end
|
|
@@ -267,10 +234,6 @@ def clean_commit_message(commit_msg)
|
|
|
267
234
|
commit_msg[0..99]
|
|
268
235
|
end
|
|
269
236
|
|
|
270
|
-
def get_paparatzinger_job_name(job_name)
|
|
271
|
-
job_name.gsub /[^0-9a-z]/i, '-'
|
|
272
|
-
end
|
|
273
|
-
|
|
274
237
|
def which(cmd)
|
|
275
238
|
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
|
276
239
|
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
data/bin/twig-feature
CHANGED
|
@@ -13,39 +13,48 @@ class Release
|
|
|
13
13
|
include Command
|
|
14
14
|
include PrimaAwsClient
|
|
15
15
|
|
|
16
|
-
def initialize
|
|
16
|
+
def initialize(update_gem=true)
|
|
17
17
|
@prima = Prima.new
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
@asg = Aws::AutoScaling::Client.new
|
|
26
|
-
@s3_bucket = 'prima-artifacts'
|
|
27
|
-
@artifact_path = '/tmp/prima-artifact.zip'
|
|
28
|
-
@import_db_task = 'arn:aws:ecs:eu-west-1:001575623345:task-definition/ecs-task-db-restore2-TaskDefinitionDbRestore-UDIDEVPA4H7Q:1'
|
|
18
|
+
if update_gem
|
|
19
|
+
output 'Controllo se ci sono aggiornamenti da fare (potrebbe richiedere qualche minuto)'
|
|
20
|
+
unless `gem update prima-twig`=="Updating installed gems\nNothing to update\n"
|
|
21
|
+
output 'Gemma prima-twig aggiornata'
|
|
22
|
+
exec "twig feature #{ARGV.join ' '}"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
29
25
|
@dns_record_identifier = nil
|
|
30
26
|
@ecs_cluster_name = nil
|
|
31
27
|
@deploy_update = false
|
|
32
28
|
@projects = {
|
|
33
29
|
'prima' => {},
|
|
34
|
-
'backoffice' => {},
|
|
35
30
|
'urania' => {},
|
|
36
31
|
'ermes' => {},
|
|
37
32
|
'bburago' => {},
|
|
38
33
|
'hal9000' => {},
|
|
39
34
|
'fidaty' => {},
|
|
40
35
|
'peano' => {},
|
|
41
|
-
'rogoreport' => {},
|
|
36
|
+
# 'rogoreport' => {},
|
|
42
37
|
'assange' => {},
|
|
43
38
|
'borat' => {},
|
|
44
|
-
'
|
|
45
|
-
'
|
|
39
|
+
'crash' => {},
|
|
40
|
+
'activia' => {},
|
|
41
|
+
'skynet' => {},
|
|
42
|
+
'roger' => {},
|
|
43
|
+
'rachele' => {},
|
|
44
|
+
'leftorium' => {},
|
|
45
|
+
'pyxis-npm' => {},
|
|
46
|
+
'starsky' => {},
|
|
47
|
+
'hutch' => {},
|
|
48
|
+
'maia' => {},
|
|
49
|
+
'legion' => {},
|
|
50
|
+
'vianello' => {},
|
|
51
|
+
'domus' => {},
|
|
52
|
+
'toretto' => {}
|
|
46
53
|
}
|
|
47
|
-
@
|
|
48
|
-
@
|
|
54
|
+
@base_stack_name_alb = 'ecs-alb-http-public-qa-'
|
|
55
|
+
@base_stack_name_alb_ws = 'ecs-alb-ws-public-qa-'
|
|
56
|
+
@git_branch = ''
|
|
57
|
+
@cloudflare = Rubyflare.connect_with(ENV['CLOUDFLARE_EMAIL'], ENV['CLOUDFLARE_APIKEY'])
|
|
49
58
|
end
|
|
50
59
|
|
|
51
60
|
def execute!(args)
|
|
@@ -54,21 +63,30 @@ class Release
|
|
|
54
63
|
start_feature!
|
|
55
64
|
when 'finish'
|
|
56
65
|
finish_feature!
|
|
57
|
-
when '
|
|
58
|
-
abort('Non sei nella cartella di
|
|
66
|
+
when 'qainit'
|
|
67
|
+
abort('Non sei nella cartella di qainit') unless Dir.pwd.match 'qainit$' or Dir.pwd.match '/drone/src'
|
|
59
68
|
if ['terminate', 'stop', 'shutdown', 'halt', 'destroy'].include? args[1]
|
|
60
|
-
|
|
69
|
+
qainit_deploy_shutdown!
|
|
61
70
|
elsif 'update' == args[1]
|
|
62
|
-
|
|
63
|
-
elsif 'lock' == args[1]
|
|
64
|
-
deploy_lock!
|
|
71
|
+
qainit_deploy_update!
|
|
65
72
|
else
|
|
66
73
|
if args[1]
|
|
67
|
-
select_branches(args[1])
|
|
74
|
+
select_branches(args[1..-1])
|
|
68
75
|
else
|
|
69
76
|
select_branches
|
|
70
77
|
end
|
|
71
|
-
|
|
78
|
+
qainit_deploy!
|
|
79
|
+
end
|
|
80
|
+
when 'suite'
|
|
81
|
+
abort('Non sei nella cartella di qainit') unless Dir.pwd.match 'qainit$'
|
|
82
|
+
if 'deploy' == args[1]
|
|
83
|
+
suite_py_branches(args[2])
|
|
84
|
+
qainit_deploy!(true)
|
|
85
|
+
end
|
|
86
|
+
when 'deploy'
|
|
87
|
+
abort('Non sei nella cartella di artemide') unless Dir.pwd.match 'artemide$'
|
|
88
|
+
if 'lock' == args[1]
|
|
89
|
+
deploy_lock!
|
|
72
90
|
end
|
|
73
91
|
when 'aggregator'
|
|
74
92
|
if 'enable' == args[1]
|
|
@@ -84,6 +102,7 @@ class Release
|
|
|
84
102
|
end
|
|
85
103
|
|
|
86
104
|
def stop_for_wrong_args
|
|
105
|
+
puts help_content
|
|
87
106
|
stop_if true, [:wrong_args, ['start', 'finish', 'deploy', 'deploy project_name', 'deploy stop', 'deploy update', 'aggregator enable', 'aggregator disable']]
|
|
88
107
|
end
|
|
89
108
|
|
|
@@ -103,10 +122,6 @@ class Release
|
|
|
103
122
|
output 'Disable aggregator'
|
|
104
123
|
|
|
105
124
|
output "Recupero le informazioni relative al puntamento dei record DNS..."
|
|
106
|
-
cloudflare = Rubyflare.connect_with(@prima.config['cloudflare_email'], @prima.config['cloudflare_apikey'])
|
|
107
|
-
dns_records = cloudflare.get("zones/1fb634f19c43dfb0162cc4cb91915da2/dns_records", {per_page: 100, type: 'CNAME', content: get_alb_host(@stack_name_alb)})
|
|
108
|
-
stop_if dns_records.body[:result].empty?, "I record DNS degli aggregatori non stanno puntando ad un QA".red
|
|
109
|
-
|
|
110
125
|
output "Recupero le informazioni sui QA attivi..."
|
|
111
126
|
stack_list, envs = get_stacks()
|
|
112
127
|
|
|
@@ -118,8 +133,10 @@ class Release
|
|
|
118
133
|
end.is_a?(Aws::CloudFormation::Types::Tag)
|
|
119
134
|
aggregator_enabled
|
|
120
135
|
end[0]
|
|
136
|
+
dns_records = @cloudflare.get("zones/1fb634f19c43dfb0162cc4cb91915da2/dns_records", {per_page: 100, type: 'CNAME', content: get_alb_host(@base_stack_name_alb + env_hash[3..8])})
|
|
137
|
+
stop_if dns_records.body[:result].empty?, "I record DNS degli aggregatori non stanno puntando ad un QA".red
|
|
121
138
|
change_hostname_priority(env_hash, hostname_pattern_priority())
|
|
122
|
-
dns_to_staging()
|
|
139
|
+
dns_to_staging(env_hash)
|
|
123
140
|
else
|
|
124
141
|
output 'Nessun QA trovato'.red
|
|
125
142
|
exit
|
|
@@ -132,8 +149,7 @@ class Release
|
|
|
132
149
|
output 'Enable aggregator'
|
|
133
150
|
|
|
134
151
|
output 'Recupero le informazioni relative al puntamento dei record DNS...'
|
|
135
|
-
|
|
136
|
-
dns_records = cloudflare.get('zones/1fb634f19c43dfb0162cc4cb91915da2/dns_records', { per_page: 100, type: 'CNAME', content: 'staging.prima.it' })
|
|
152
|
+
dns_records = @cloudflare.get('zones/1fb634f19c43dfb0162cc4cb91915da2/dns_records', { per_page: 100, type: 'CNAME', content: 'staging.prima.it' })
|
|
137
153
|
stop_if dns_records.body[:result].empty?, "I record DNS degli aggregatori stanno gia' puntando ad un QA".red
|
|
138
154
|
|
|
139
155
|
output "Recupero le informazioni sui QA attivi..."
|
|
@@ -163,7 +179,7 @@ class Release
|
|
|
163
179
|
dns_records.body[:result].each do |dns|
|
|
164
180
|
if dns[:name] =~ /^\w+\-\w+\-staging\.prima\.it$/
|
|
165
181
|
output "Changing #{dns[:name]} DNS record"
|
|
166
|
-
cloudflare.put("zones/1fb634f19c43dfb0162cc4cb91915da2/dns_records/#{dns[:id]}", {type: 'CNAME', name: dns[:name], content: get_alb_host(@
|
|
182
|
+
@cloudflare.put("zones/1fb634f19c43dfb0162cc4cb91915da2/dns_records/#{dns[:id]}", {type: 'CNAME', name: dns[:name], content: get_alb_host(@base_stack_name_alb + env_hash[3..8]), proxied: true, ttl: 1})
|
|
167
183
|
end
|
|
168
184
|
end
|
|
169
185
|
|
|
@@ -220,14 +236,13 @@ class Release
|
|
|
220
236
|
wait_for_stack_ready(stack_name_web) unless stack_ready?(stack_name_web)
|
|
221
237
|
end
|
|
222
238
|
|
|
223
|
-
def dns_to_staging
|
|
239
|
+
def dns_to_staging(env_hash)
|
|
224
240
|
output "Recupero le informazioni relative al puntamento dei record DNS..."
|
|
225
|
-
|
|
226
|
-
dns_records = cloudflare.get("zones/1fb634f19c43dfb0162cc4cb91915da2/dns_records", {per_page: 100, type: 'CNAME', content: get_alb_host(@stack_name_alb)})
|
|
241
|
+
dns_records = @cloudflare.get("zones/1fb634f19c43dfb0162cc4cb91915da2/dns_records", {per_page: 100, type: 'CNAME', content: get_alb_host(@base_stack_name_alb + env_hash[3..8])})
|
|
227
242
|
dns_records.body[:result].each do |dns|
|
|
228
243
|
if dns[:name] =~ /^\w+\-\w+\-staging\.prima\.it$/
|
|
229
244
|
output "Changing #{dns[:name]} DNS record"
|
|
230
|
-
cloudflare.put("zones/1fb634f19c43dfb0162cc4cb91915da2/dns_records/#{dns[:id]}", {type: 'CNAME', name: dns[:name], content: 'staging.prima.it', proxied: true, ttl: 1})
|
|
245
|
+
@cloudflare.put("zones/1fb634f19c43dfb0162cc4cb91915da2/dns_records/#{dns[:id]}", {type: 'CNAME', name: dns[:name], content: 'staging.prima.it', proxied: true, ttl: 1})
|
|
231
246
|
end
|
|
232
247
|
end
|
|
233
248
|
end
|
|
@@ -295,7 +310,7 @@ class Release
|
|
|
295
310
|
end.is_a?(Aws::CloudFormation::Types::Tag)
|
|
296
311
|
|
|
297
312
|
if aggregator_enabled
|
|
298
|
-
dns_to_staging()
|
|
313
|
+
dns_to_staging(env_hash)
|
|
299
314
|
end
|
|
300
315
|
|
|
301
316
|
# Se non ha finito di cancellare le altre non si puo' cancellare il cluster
|
|
@@ -310,8 +325,8 @@ class Release
|
|
|
310
325
|
end
|
|
311
326
|
|
|
312
327
|
delete_stack(cluster_stack_name)
|
|
313
|
-
delete_stack(@
|
|
314
|
-
delete_stack(@
|
|
328
|
+
delete_stack(@base_stack_name_alb + env_hash[3..8])
|
|
329
|
+
delete_stack(@base_stack_name_alb_ws + env_hash[3..8])
|
|
315
330
|
output "Finito!".green
|
|
316
331
|
end
|
|
317
332
|
|
|
@@ -322,7 +337,7 @@ class Release
|
|
|
322
337
|
@deploy_update = true
|
|
323
338
|
|
|
324
339
|
output "Recupero le informazioni sui QA attivi..."
|
|
325
|
-
stack_list, envs =
|
|
340
|
+
stack_list, envs = get_clusters()
|
|
326
341
|
|
|
327
342
|
env_hash = nil
|
|
328
343
|
unless envs.empty?
|
|
@@ -332,7 +347,7 @@ class Release
|
|
|
332
347
|
envs.each do |key, env|
|
|
333
348
|
title = ""
|
|
334
349
|
env.each do |e|
|
|
335
|
-
title << "
|
|
350
|
+
title << "#{e.value}" if e.key == 'qainit'
|
|
336
351
|
end
|
|
337
352
|
msg = "#{@prima.reduce_size(title, 1000)}".light_blue
|
|
338
353
|
menu.choice(msg) { key }
|
|
@@ -393,886 +408,210 @@ class Release
|
|
|
393
408
|
output "Finito!".green
|
|
394
409
|
end
|
|
395
410
|
|
|
396
|
-
def
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
deploy_id = Digest::MD5.hexdigest(
|
|
400
|
-
@projects["prima"][:name] +
|
|
401
|
-
@projects["backoffice"][:name] +
|
|
402
|
-
@projects["urania"][:name] +
|
|
403
|
-
@projects["ermes"][:name] +
|
|
404
|
-
@projects["bburago"][:name] +
|
|
405
|
-
@projects["hal9000"][:name] +
|
|
406
|
-
@projects["fidaty"][:name] +
|
|
407
|
-
@projects["peano"][:name] +
|
|
408
|
-
@projects["rogoreport"][:name] +
|
|
409
|
-
@projects["assange"][:name] +
|
|
410
|
-
@projects["borat"][:name] +
|
|
411
|
-
@projects["bolla"][:name] +
|
|
412
|
-
@projects['crash'][:name]
|
|
413
|
-
)
|
|
414
|
-
else
|
|
415
|
-
deploy_id = Digest::MD5.hexdigest(
|
|
416
|
-
@projects["prima"][:name] +
|
|
417
|
-
@projects["backoffice"][:name] +
|
|
418
|
-
@projects["urania"][:name] +
|
|
419
|
-
@projects["ermes"][:name] +
|
|
420
|
-
@projects["bburago"][:name] +
|
|
421
|
-
@projects["hal9000"][:name] +
|
|
422
|
-
@projects["fidaty"][:name] +
|
|
423
|
-
@projects["peano"][:name] +
|
|
424
|
-
@projects["rogoreport"][:name] +
|
|
425
|
-
@projects["assange"][:name] +
|
|
426
|
-
@projects["borat"][:name] +
|
|
427
|
-
@projects["bolla"][:name]
|
|
428
|
-
)
|
|
411
|
+
def get_default_branch_name(projects)
|
|
412
|
+
projects.each_key do |project|
|
|
413
|
+
return projects[project]['name'] if not projects[project]['default_branch']
|
|
429
414
|
end
|
|
430
|
-
|
|
431
|
-
hostname_pattern_priority = hostname_pattern_priority()
|
|
432
|
-
tags = [
|
|
433
|
-
{
|
|
434
|
-
key: "prima",
|
|
435
|
-
value: @projects["prima"][:name]
|
|
436
|
-
},
|
|
437
|
-
{
|
|
438
|
-
key: "urania",
|
|
439
|
-
value: @projects["urania"][:name]
|
|
440
|
-
},
|
|
441
|
-
{
|
|
442
|
-
key: "backoffice",
|
|
443
|
-
value: @projects["backoffice"][:name]
|
|
444
|
-
},
|
|
445
|
-
{
|
|
446
|
-
key: "ermes",
|
|
447
|
-
value: @projects["ermes"][:name]
|
|
448
|
-
},
|
|
449
|
-
{
|
|
450
|
-
key: "bburago",
|
|
451
|
-
value: @projects["bburago"][:name]
|
|
452
|
-
},
|
|
453
|
-
{
|
|
454
|
-
key: "hal9000",
|
|
455
|
-
value: @projects["hal9000"][:name]
|
|
456
|
-
},
|
|
457
|
-
{
|
|
458
|
-
key: "fidaty",
|
|
459
|
-
value: @projects["fidaty"][:name]
|
|
460
|
-
},
|
|
461
|
-
{
|
|
462
|
-
key: "hostname_pattern_priority",
|
|
463
|
-
value: hostname_pattern_priority
|
|
464
|
-
},
|
|
465
|
-
{
|
|
466
|
-
key: "peano",
|
|
467
|
-
value: @projects["peano"][:name]
|
|
468
|
-
},
|
|
469
|
-
{
|
|
470
|
-
key: "rogoreport",
|
|
471
|
-
value: @projects["rogoreport"][:name]
|
|
472
|
-
},
|
|
473
|
-
{
|
|
474
|
-
key: "assange",
|
|
475
|
-
value: @projects["assange"][:name]
|
|
476
|
-
},
|
|
477
|
-
{
|
|
478
|
-
key: "borat",
|
|
479
|
-
value: @projects["borat"][:name]
|
|
480
|
-
},
|
|
481
|
-
{
|
|
482
|
-
key: "bolla",
|
|
483
|
-
value: @projects["bolla"][:name]
|
|
484
|
-
}
|
|
485
|
-
]
|
|
486
|
-
tags << { key: 'crash', value: @projects['crash'][:name] } if deploy_crash?
|
|
487
|
-
|
|
488
|
-
cluster_stack_name = "ecs-cluster-qa-#{deploy_id}"
|
|
415
|
+
end
|
|
489
416
|
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
hostname_pattern_priority = tags.detect do |tag|
|
|
493
|
-
tag.key == 'hostname_pattern_priority'
|
|
494
|
-
end.value
|
|
495
|
-
end
|
|
417
|
+
def suite_py_branches(args_json)
|
|
418
|
+
arg_projects = JSON.parse(args_json)
|
|
496
419
|
|
|
497
|
-
|
|
498
|
-
wait_for_stack_ready(cluster_stack_name) unless stack_ready?(cluster_stack_name)
|
|
499
|
-
|
|
500
|
-
create_alb_stack(@stack_name_alb, "http") unless stack_exists?(@stack_name_alb)
|
|
501
|
-
create_alb_stack(@stack_name_alb_ws, "websocket") unless stack_exists?(@stack_name_alb_ws)
|
|
502
|
-
|
|
503
|
-
resp = @cf.describe_stack_resource({stack_name: cluster_stack_name, logical_resource_id: 'ECSCluster'})
|
|
504
|
-
@ecs_cluster_name = resp.stack_resource_detail.physical_resource_id
|
|
505
|
-
|
|
506
|
-
asg_stack_name = "ecs-asg-allinone-qa-#{deploy_id}"
|
|
507
|
-
create_asg_stack(asg_stack_name, tags) unless stack_exists?(asg_stack_name)
|
|
508
|
-
|
|
509
|
-
stack_name_db = "ecs-task-db-qa-#{deploy_id}"
|
|
510
|
-
stack_body = IO.read('cloudformation/stacks/task/db.yml')
|
|
511
|
-
parameters = [
|
|
512
|
-
{
|
|
513
|
-
parameter_key: "Environment",
|
|
514
|
-
parameter_value: "qa"
|
|
515
|
-
},
|
|
516
|
-
{
|
|
517
|
-
parameter_key: "ECSClusterName",
|
|
518
|
-
parameter_value: @ecs_cluster_name
|
|
519
|
-
}
|
|
520
|
-
]
|
|
521
|
-
create_stack(stack_name_db, stack_body, parameters, tags) unless stack_exists?(stack_name_db)
|
|
522
|
-
|
|
523
|
-
create_prima_artifact(@projects["prima"][:revision], @projects["prima"][:name], deploy_id) unless artifact_exists?('prima-artifacts-encrypted', "prima/#{@projects["prima"][:revision]}-#{deploy_id}.tar.gz")
|
|
524
|
-
create_crash_artifact(@projects['crash'][:revision], deploy_id) unless !deploy_crash? || artifact_exists?('prima-artifacts-encrypted', "microservices/crash/#{@projects['crash'][:revision]}-#{deploy_id}-qa.tar.gz")
|
|
525
|
-
create_urania_artifact(@projects["urania"][:revision]) unless artifact_exists?('prima-artifacts-encrypted', "microservices/urania/#{@projects["urania"][:revision]}-qa.tar.gz")
|
|
526
|
-
create_ermes_artifact(@projects["ermes"][:revision], deploy_id) unless artifact_exists?('prima-artifacts-encrypted', "microservices/ermes/#{@projects["ermes"][:revision]}-#{deploy_id}-qa.tar.gz")
|
|
527
|
-
create_bburago_artifact(@projects["bburago"][:revision]) unless artifact_exists?('prima-artifacts-encrypted', "microservices/bburago/#{@projects["bburago"][:revision]}-qa.tar.gz")
|
|
528
|
-
create_hal9000_artifact(@projects["hal9000"][:revision]) unless artifact_exists?('prima-artifacts-encrypted', "microservices/hal9000/#{@projects["hal9000"][:revision]}-qa.tar.gz")
|
|
529
|
-
create_fidaty_artifact(@projects["fidaty"][:revision], deploy_id) unless artifact_exists?('prima-artifacts-encrypted', "microservices/fidaty/#{@projects["fidaty"][:revision]}-#{deploy_id}-qa.tar.gz")
|
|
530
|
-
create_backoffice_artifact(@projects["backoffice"][:revision], deploy_id) unless artifact_exists?('prima-artifacts', "backoffice/#{@projects["backoffice"][:revision]}-#{deploy_id}.zip")
|
|
531
|
-
create_peano_artifact(@projects["peano"][:revision], deploy_id) unless artifact_exists?('prima-artifacts-encrypted', "microservices/peano/#{@projects["peano"][:revision]}-#{deploy_id}-qa.tar.gz")
|
|
532
|
-
create_rogoreport_artifact(@projects["rogoreport"][:revision], deploy_id) unless artifact_exists?('prima-artifacts-encrypted', "microservices/rogoreport/rogoreport_qa-#{@projects["rogoreport"][:revision]}-#{deploy_id}-qa.tar.gz")
|
|
533
|
-
create_assange_artifact(@projects["assange"][:revision], deploy_id) unless artifact_exists?('prima-artifacts-encrypted', "microservices/assange/#{@projects["assange"][:revision]}-#{deploy_id}-qa.tar.gz")
|
|
534
|
-
create_borat_artifact(@projects["borat"][:revision], deploy_id) unless artifact_exists?('prima-artifacts-encrypted', "microservices/borat/#{@projects["borat"][:revision]}-#{deploy_id}-qa.tar.gz")
|
|
535
|
-
create_bolla_artifact(@projects["bolla"][:revision], deploy_id) unless artifact_exists?('prima-artifacts-encrypted', "microservices/bolla/#{@projects["bolla"][:revision]}-#{deploy_id}-qa-migrator.tar.gz")
|
|
536
|
-
|
|
537
|
-
wait_for_stack_ready(stack_name_db) unless stack_ready?(stack_name_db)
|
|
538
|
-
import_dbs(ec2_ip_address(asg_stack_name)) unless stack_exists?("ecs-task-web-qa-#{deploy_id}")
|
|
539
|
-
|
|
540
|
-
import_redis_crash(ec2_ip_address(asg_stack_name)) if deploy_crash? && !stack_exists?("ecs-task-web-qa-#{deploy_id}")
|
|
541
|
-
|
|
542
|
-
wait_for_stack_ready(@stack_name_alb) unless stack_ready?(@stack_name_alb)
|
|
543
|
-
wait_for_stack_ready(@stack_name_alb_ws) unless stack_ready?(@stack_name_alb_ws)
|
|
544
|
-
|
|
545
|
-
stack_name_route53 = "ecs-route53-qa-#{deploy_id}"
|
|
546
|
-
stack_body = IO.read('cloudformation/stacks/route53/qa.yml')
|
|
547
|
-
parameters = [
|
|
548
|
-
{
|
|
549
|
-
parameter_key: "DnsRecordIdentifier",
|
|
550
|
-
parameter_value: @dns_record_identifier
|
|
551
|
-
},
|
|
552
|
-
{
|
|
553
|
-
parameter_key: "PrimaElbHostname",
|
|
554
|
-
parameter_value: get_alb_host(@stack_name_alb)
|
|
555
|
-
},
|
|
556
|
-
{
|
|
557
|
-
parameter_key: "BackofficeElbHostname",
|
|
558
|
-
parameter_value: get_alb_host(@stack_name_alb)
|
|
559
|
-
},
|
|
560
|
-
{
|
|
561
|
-
parameter_key: "UraniaIp",
|
|
562
|
-
parameter_value: ec2_ip_address(asg_stack_name)
|
|
563
|
-
},
|
|
564
|
-
{
|
|
565
|
-
parameter_key: "BburagoIp",
|
|
566
|
-
parameter_value: ec2_ip_address(asg_stack_name)
|
|
567
|
-
},
|
|
568
|
-
{
|
|
569
|
-
parameter_key: "Hal9000Ip",
|
|
570
|
-
parameter_value: ec2_ip_address(asg_stack_name)
|
|
571
|
-
},
|
|
572
|
-
{
|
|
573
|
-
parameter_key: "FidatyIp",
|
|
574
|
-
parameter_value: ec2_ip_address(asg_stack_name)
|
|
575
|
-
},
|
|
576
|
-
{
|
|
577
|
-
parameter_key: "PeanoIp",
|
|
578
|
-
parameter_value: ec2_ip_address(asg_stack_name)
|
|
579
|
-
},
|
|
580
|
-
{
|
|
581
|
-
parameter_key: "ErmesIp",
|
|
582
|
-
parameter_value: ec2_ip_address(asg_stack_name)
|
|
583
|
-
},
|
|
584
|
-
{
|
|
585
|
-
parameter_key: "RedisIp",
|
|
586
|
-
parameter_value: ec2_ip_address(asg_stack_name)
|
|
587
|
-
},
|
|
588
|
-
{
|
|
589
|
-
parameter_key: "AssangeElbHostname",
|
|
590
|
-
parameter_value: get_alb_host(@stack_name_alb)
|
|
591
|
-
},
|
|
592
|
-
{
|
|
593
|
-
parameter_key: "BoratElbHostname",
|
|
594
|
-
parameter_value: get_alb_host(@stack_name_alb_ws)
|
|
595
|
-
},
|
|
596
|
-
{
|
|
597
|
-
parameter_key: 'CrashElbHostname',
|
|
598
|
-
parameter_value: get_alb_host(@stack_name_alb_ws)
|
|
599
|
-
}
|
|
600
|
-
]
|
|
601
|
-
|
|
602
|
-
create_stack(stack_name_route53, stack_body, parameters, tags) unless stack_exists?(stack_name_route53)
|
|
603
|
-
wait_for_stack_ready(stack_name_route53) unless stack_ready?(stack_name_route53)
|
|
604
|
-
|
|
605
|
-
stack_name_urania = "ecs-task-urania-qa-#{deploy_id}"
|
|
606
|
-
git_checkout_version('urania', @projects["urania"][:revision])
|
|
607
|
-
stack_body = YAML.load_file('projects/urania/deploy/task.yml')
|
|
608
|
-
stack_body['Resources']['ECSServiceUrania']['Properties'].reject!{ |k| ['LoadBalancers', 'Role'].include?(k) }
|
|
609
|
-
stack_body = stack_body.to_yaml
|
|
610
|
-
parameters = [
|
|
611
|
-
{
|
|
612
|
-
parameter_key: "Environment",
|
|
613
|
-
parameter_value: "qa"
|
|
614
|
-
},
|
|
615
|
-
{
|
|
616
|
-
parameter_key: "ReleaseVersion",
|
|
617
|
-
parameter_value: @projects["urania"][:revision]
|
|
618
|
-
},
|
|
619
|
-
{
|
|
620
|
-
parameter_key: "TaskDesiredCount",
|
|
621
|
-
parameter_value: "1"
|
|
622
|
-
},
|
|
623
|
-
{
|
|
624
|
-
parameter_key: "ECSClusterName",
|
|
625
|
-
parameter_value: @ecs_cluster_name
|
|
626
|
-
},
|
|
627
|
-
{
|
|
628
|
-
parameter_key: "ALBShortName",
|
|
629
|
-
parameter_value: "urania-qa-#{deploy_id}"[0..31]
|
|
630
|
-
},
|
|
631
|
-
{
|
|
632
|
-
parameter_key: "HostnamePattern",
|
|
633
|
-
parameter_value: "urania-#{@dns_record_identifier}.qa.colaster.com"
|
|
634
|
-
},
|
|
635
|
-
{
|
|
636
|
-
parameter_key: "HostnamePatternPriority",
|
|
637
|
-
parameter_value: hostname_pattern_priority
|
|
638
|
-
}
|
|
639
|
-
]
|
|
640
|
-
if stack_exists?(stack_name_urania)
|
|
641
|
-
cur_version = get_currently_deployed_version(stack_name_urania)
|
|
642
|
-
update_stack(stack_name_urania, stack_body, parameters, tags) unless cur_version.include?(@projects["urania"][:revision])
|
|
643
|
-
else
|
|
644
|
-
create_stack(stack_name_urania, stack_body, parameters, tags)
|
|
645
|
-
end
|
|
420
|
+
@projects.merge!(arg_projects)
|
|
646
421
|
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
stack_body = stack_body.to_yaml
|
|
652
|
-
parameters = [
|
|
653
|
-
{
|
|
654
|
-
parameter_key: "Environment",
|
|
655
|
-
parameter_value: "qa"
|
|
656
|
-
},
|
|
657
|
-
{
|
|
658
|
-
parameter_key: "ReleaseVersion",
|
|
659
|
-
parameter_value: "#{@projects['ermes'][:revision]}-#{deploy_id}"
|
|
660
|
-
},
|
|
661
|
-
{
|
|
662
|
-
parameter_key: "TaskDesiredCount",
|
|
663
|
-
parameter_value: "1"
|
|
664
|
-
},
|
|
665
|
-
{
|
|
666
|
-
parameter_key: "ECSClusterName",
|
|
667
|
-
parameter_value: @ecs_cluster_name
|
|
668
|
-
},
|
|
669
|
-
{
|
|
670
|
-
parameter_key: "ALBShortName",
|
|
671
|
-
parameter_value: "ermes-qa-#{deploy_id}"[0..31]
|
|
672
|
-
},
|
|
673
|
-
{
|
|
674
|
-
parameter_key: "HostnamePattern",
|
|
675
|
-
parameter_value: "ermes-#{@dns_record_identifier}.qa.colaster.com"
|
|
676
|
-
},
|
|
677
|
-
{
|
|
678
|
-
parameter_key: "HostnamePatternPriority",
|
|
679
|
-
parameter_value: hostname_pattern_priority
|
|
680
|
-
}
|
|
681
|
-
]
|
|
682
|
-
if stack_exists?(stack_name_ermes)
|
|
683
|
-
cur_version = get_currently_deployed_version(stack_name_ermes)
|
|
684
|
-
update_stack(stack_name_ermes, stack_body, parameters, tags) unless cur_version.include?(@projects["ermes"][:revision])
|
|
685
|
-
else
|
|
686
|
-
create_stack(stack_name_ermes, stack_body, parameters, tags)
|
|
422
|
+
@projects.each_key do |project|
|
|
423
|
+
if @projects[project].empty?
|
|
424
|
+
@projects[project] = choose_branch_to_deploy(project, true)
|
|
425
|
+
end
|
|
687
426
|
end
|
|
427
|
+
end
|
|
688
428
|
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
stack_body['Resources']['ECSServiceBburago']['Properties'].reject!{ |k| ['LoadBalancers', 'Role'].include?(k) }
|
|
693
|
-
stack_body = stack_body.to_yaml
|
|
694
|
-
parameters = [
|
|
695
|
-
{
|
|
696
|
-
parameter_key: "Environment",
|
|
697
|
-
parameter_value: "qa"
|
|
698
|
-
},
|
|
699
|
-
{
|
|
700
|
-
parameter_key: "ReleaseVersion",
|
|
701
|
-
parameter_value: @projects["bburago"][:revision]
|
|
702
|
-
},
|
|
703
|
-
{
|
|
704
|
-
parameter_key: "ECSClusterName",
|
|
705
|
-
parameter_value: @ecs_cluster_name
|
|
706
|
-
},
|
|
707
|
-
{
|
|
708
|
-
parameter_key: "TaskDesiredCount",
|
|
709
|
-
parameter_value: "1"
|
|
710
|
-
},
|
|
711
|
-
{
|
|
712
|
-
parameter_key: "ALBShortName",
|
|
713
|
-
parameter_value: "bburago-qa-#{deploy_id}"[0..31]
|
|
714
|
-
},
|
|
715
|
-
{
|
|
716
|
-
parameter_key: "HostnamePattern",
|
|
717
|
-
parameter_value: "bburago-#{@dns_record_identifier}.qa.colaster.com"
|
|
718
|
-
},
|
|
719
|
-
{
|
|
720
|
-
parameter_key: "HostnamePatternPriority",
|
|
721
|
-
parameter_value: hostname_pattern_priority
|
|
722
|
-
}
|
|
723
|
-
]
|
|
724
|
-
if stack_exists?(stack_name_bburago)
|
|
725
|
-
cur_version = get_currently_deployed_version(stack_name_bburago)
|
|
726
|
-
update_stack(stack_name_bburago, stack_body, parameters, tags) unless cur_version.include?(@projects["bburago"][:revision])
|
|
727
|
-
else
|
|
728
|
-
create_stack(stack_name_bburago, stack_body, parameters, tags)
|
|
729
|
-
end
|
|
429
|
+
def get_git_user()
|
|
430
|
+
`git config user.name`.gsub(/[^A-Za-z]/, '').gsub("\n", '')
|
|
431
|
+
end
|
|
730
432
|
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
stack_body['Resources']['ECSServiceHal9000']['Properties'].reject!{ |k| ['LoadBalancers', 'Role'].include?(k) }
|
|
735
|
-
stack_body = stack_body.to_yaml
|
|
736
|
-
parameters = [
|
|
737
|
-
{
|
|
738
|
-
parameter_key: "Environment",
|
|
739
|
-
parameter_value: "qa"
|
|
740
|
-
},
|
|
741
|
-
{
|
|
742
|
-
parameter_key: "ReleaseVersion",
|
|
743
|
-
parameter_value: @projects["hal9000"][:revision]
|
|
744
|
-
},
|
|
745
|
-
{
|
|
746
|
-
parameter_key: "ECSClusterName",
|
|
747
|
-
parameter_value: @ecs_cluster_name
|
|
748
|
-
},
|
|
749
|
-
{
|
|
750
|
-
parameter_key: "TaskDesiredCount",
|
|
751
|
-
parameter_value: "1"
|
|
752
|
-
},
|
|
753
|
-
{
|
|
754
|
-
parameter_key: "ALBShortName",
|
|
755
|
-
parameter_value: "hal9000-qa-#{deploy_id}"[0..31]
|
|
756
|
-
},
|
|
757
|
-
{
|
|
758
|
-
parameter_key: "HostnamePattern",
|
|
759
|
-
parameter_value: "hal9000-#{@dns_record_identifier}.qa.colaster.com"
|
|
760
|
-
},
|
|
761
|
-
{
|
|
762
|
-
parameter_key: "HostnamePatternPriority",
|
|
763
|
-
parameter_value: hostname_pattern_priority
|
|
764
|
-
}
|
|
765
|
-
]
|
|
766
|
-
if stack_exists?(stack_name_hal9000)
|
|
767
|
-
cur_version = get_currently_deployed_version(stack_name_hal9000)
|
|
768
|
-
update_stack(stack_name_hal9000, stack_body, parameters, tags) unless cur_version.include?(@projects["hal9000"][:revision])
|
|
769
|
-
else
|
|
770
|
-
create_stack(stack_name_hal9000, stack_body, parameters, tags)
|
|
771
|
-
end
|
|
433
|
+
def get_git_mail()
|
|
434
|
+
`git config user.email`.gsub("\n", '')
|
|
435
|
+
end
|
|
772
436
|
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
stack_body = YAML.load_file('projects/fidaty/deploy/task.yml')
|
|
776
|
-
stack_body['Resources']['ECSServiceFidaty']['Properties'].reject!{ |k| ['LoadBalancers', 'Role'].include?(k) }
|
|
777
|
-
stack_body = stack_body.to_yaml
|
|
778
|
-
parameters = [
|
|
779
|
-
{
|
|
780
|
-
parameter_key: "Environment",
|
|
781
|
-
parameter_value: "qa"
|
|
782
|
-
},
|
|
783
|
-
{
|
|
784
|
-
parameter_key: "ReleaseVersion",
|
|
785
|
-
parameter_value: "#{@projects["fidaty"][:revision]}-#{deploy_id}"
|
|
786
|
-
},
|
|
787
|
-
{
|
|
788
|
-
parameter_key: "ECSClusterName",
|
|
789
|
-
parameter_value: @ecs_cluster_name
|
|
790
|
-
},
|
|
791
|
-
{
|
|
792
|
-
parameter_key: "TaskDesiredCount",
|
|
793
|
-
parameter_value: "1"
|
|
794
|
-
},
|
|
795
|
-
{
|
|
796
|
-
parameter_key: "ALBShortName",
|
|
797
|
-
parameter_value: "fidaty-qa-#{deploy_id}"[0..31]
|
|
798
|
-
},
|
|
799
|
-
{
|
|
800
|
-
parameter_key: "HostnamePattern",
|
|
801
|
-
parameter_value: "fidaty-#{@dns_record_identifier}.qa.colaster.com"
|
|
802
|
-
},
|
|
803
|
-
{
|
|
804
|
-
parameter_key: "HostnamePatternPriority",
|
|
805
|
-
parameter_value: hostname_pattern_priority
|
|
806
|
-
}
|
|
807
|
-
]
|
|
808
|
-
if stack_exists?(stack_name_fidaty)
|
|
809
|
-
cur_version = get_currently_deployed_version(stack_name_fidaty)
|
|
810
|
-
update_stack(stack_name_fidaty, stack_body, parameters, tags) unless cur_version.include?(@projects["fidaty"][:revision])
|
|
811
|
-
else
|
|
812
|
-
create_stack(stack_name_fidaty, stack_body, parameters, tags)
|
|
813
|
-
end
|
|
437
|
+
def qainit_deploy!(quiet = false)
|
|
438
|
+
`git checkout master && git pull && git submodule update --init --recursive && git remote prune origin`
|
|
814
439
|
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
parameter_key: "Environment",
|
|
823
|
-
parameter_value: "qa"
|
|
824
|
-
},
|
|
825
|
-
{
|
|
826
|
-
parameter_key: "ReleaseVersion",
|
|
827
|
-
parameter_value: "#{@projects['peano'][:revision]}-#{deploy_id}"
|
|
828
|
-
},
|
|
829
|
-
{
|
|
830
|
-
parameter_key: "ECSClusterName",
|
|
831
|
-
parameter_value: @ecs_cluster_name
|
|
832
|
-
},
|
|
833
|
-
{
|
|
834
|
-
parameter_key: "TaskDesiredCount",
|
|
835
|
-
parameter_value: "1"
|
|
836
|
-
},
|
|
837
|
-
{
|
|
838
|
-
parameter_key: "ALBShortName",
|
|
839
|
-
parameter_value: "peano-qa-#{deploy_id}"[0..31]
|
|
840
|
-
},
|
|
841
|
-
{
|
|
842
|
-
parameter_key: "HostnamePattern",
|
|
843
|
-
parameter_value: "peano-#{@dns_record_identifier}.qa.colaster.com"
|
|
844
|
-
},
|
|
845
|
-
{
|
|
846
|
-
parameter_key: "HostnamePatternPriority",
|
|
847
|
-
parameter_value: hostname_pattern_priority
|
|
848
|
-
}
|
|
849
|
-
]
|
|
850
|
-
if stack_exists?(stack_name_peano)
|
|
851
|
-
cur_version = get_currently_deployed_version(stack_name_peano)
|
|
852
|
-
update_stack(stack_name_peano, stack_body, parameters, tags) unless cur_version.include?(@projects["peano"][:revision])
|
|
853
|
-
else
|
|
854
|
-
create_stack(stack_name_peano, stack_body, parameters, tags)
|
|
440
|
+
`git branch -r | awk '{print $1}' | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | awk '{print $1}' | xargs git branch -D`
|
|
441
|
+
|
|
442
|
+
default_name = get_default_branch_name @projects
|
|
443
|
+
feature_number = ''
|
|
444
|
+
unless quiet
|
|
445
|
+
output "Inserisci la feature a cui si riferisce il QA: [#{default_name}]".cyan
|
|
446
|
+
feature_number = String(STDIN.gets.chomp)
|
|
855
447
|
end
|
|
448
|
+
feature_number = default_name if feature_number.empty?
|
|
449
|
+
branch_name = get_git_user + '_' + feature_number
|
|
856
450
|
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
stack_body = IO.read('projects/rogoreport/deploy/task.yml')
|
|
860
|
-
parameters = [
|
|
861
|
-
{
|
|
862
|
-
parameter_key: "Environment",
|
|
863
|
-
parameter_value: "qa"
|
|
864
|
-
},
|
|
865
|
-
{
|
|
866
|
-
parameter_key: "ReleaseVersion",
|
|
867
|
-
parameter_value: "#{@projects["rogoreport"][:revision]}-#{deploy_id}"
|
|
868
|
-
},
|
|
869
|
-
{
|
|
870
|
-
parameter_key: "ReleaseName",
|
|
871
|
-
parameter_value: "rogoreport_qa"
|
|
872
|
-
},
|
|
873
|
-
{
|
|
874
|
-
parameter_key: "ECSClusterName",
|
|
875
|
-
parameter_value: @ecs_cluster_name
|
|
876
|
-
}
|
|
877
|
-
]
|
|
878
|
-
if stack_exists?(stack_name_rogoreport)
|
|
879
|
-
cur_version = get_currently_deployed_version(stack_name_rogoreport)
|
|
880
|
-
update_stack(stack_name_rogoreport, stack_body, parameters, tags) unless cur_version.include?(@projects["rogoreport"][:revision])
|
|
451
|
+
if `git branch -l | grep #{branch_name}`.size > 0
|
|
452
|
+
`git checkout #{branch_name} && git pull`
|
|
881
453
|
else
|
|
882
|
-
|
|
454
|
+
`git checkout -b #{branch_name}`
|
|
455
|
+
end
|
|
456
|
+
|
|
457
|
+
@git_branch = branch_name
|
|
458
|
+
|
|
459
|
+
File.open('branch_names', 'w') { |file| file.write(JSON.generate(@projects)) }
|
|
460
|
+
|
|
461
|
+
update_drone_yml!
|
|
462
|
+
|
|
463
|
+
`git add projects && \
|
|
464
|
+
git add branch_names .drone.yml && \
|
|
465
|
+
git commit -m '#{branch_name}' && \
|
|
466
|
+
git push -f --set-upstream origin #{branch_name} && \
|
|
467
|
+
git checkout master`
|
|
468
|
+
end
|
|
469
|
+
|
|
470
|
+
def qainit_deploy_update!
|
|
471
|
+
`git checkout master && git pull`
|
|
472
|
+
# cancelliamo tutti i branch che non sono più sul repo remoto
|
|
473
|
+
`git fetch -p && for branch in \`git branch -vv | grep ': gone]' | awk '{print $1}'\`; do git branch -D $branch; done`
|
|
474
|
+
# leggiamo i nomi dei branch superstiti
|
|
475
|
+
former_branches = `git branch -a | grep remotes/ | grep -v HEAD | sed 's/ remotes\\/origin\\///g'`.split "\n"
|
|
476
|
+
git_user = get_git_user
|
|
477
|
+
# stampiamo la lista
|
|
478
|
+
chosen_branch = choose do |menu|
|
|
479
|
+
menu.prompt = "Scegli il QA che vuoi aggiornare: ".cyan
|
|
480
|
+
menu.shell = true
|
|
481
|
+
former_branches.delete('master')
|
|
482
|
+
former_branches.each_with_index do |branch, index|
|
|
483
|
+
msg = index.odd? ? branch.white : branch.light_yellow # uno bianco e uno giallo alternati
|
|
484
|
+
msg = branch.start_with?(git_user) ? msg.on_blue : msg.on_black # i branch creati da chi lancia l'update sono su sfondo più chiaro
|
|
485
|
+
menu.choice(msg) { branch }
|
|
486
|
+
end
|
|
883
487
|
end
|
|
488
|
+
# checkout master, checkout branch, pull branch
|
|
489
|
+
`git checkout master && git checkout #{chosen_branch} && git pull`
|
|
884
490
|
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
{
|
|
894
|
-
parameter_key: "ReleaseVersion",
|
|
895
|
-
parameter_value: "#{@projects["assange"][:revision]}-#{deploy_id}"
|
|
896
|
-
},
|
|
897
|
-
{
|
|
898
|
-
parameter_key: "ECSClusterName",
|
|
899
|
-
parameter_value: @ecs_cluster_name
|
|
900
|
-
},
|
|
901
|
-
{
|
|
902
|
-
parameter_key: "TaskDesiredCount",
|
|
903
|
-
parameter_value: "1"
|
|
904
|
-
},
|
|
905
|
-
{
|
|
906
|
-
parameter_key: "ALBShortName",
|
|
907
|
-
parameter_value: "assange-qa-#{deploy_id}"[0..31]
|
|
908
|
-
},
|
|
909
|
-
{
|
|
910
|
-
parameter_key: "HostnamePattern",
|
|
911
|
-
parameter_value: "assange-#{@dns_record_identifier}.qa.colaster.com"
|
|
912
|
-
},
|
|
913
|
-
{
|
|
914
|
-
parameter_key: "HostnamePatternPriority",
|
|
915
|
-
parameter_value: (hostname_pattern_priority.to_i + 20).to_s
|
|
916
|
-
}
|
|
917
|
-
]
|
|
918
|
-
if stack_exists?(stack_name_assange)
|
|
919
|
-
cur_version = get_currently_deployed_version(stack_name_assange)
|
|
920
|
-
update_stack(stack_name_assange, stack_body, parameters, tags) unless cur_version.include?(@projects["assange"][:revision])
|
|
921
|
-
else
|
|
922
|
-
create_stack(stack_name_assange, stack_body, parameters, tags)
|
|
491
|
+
# aggiornare il commit (revision a cui fa riferimento)
|
|
492
|
+
|
|
493
|
+
# leggo il file branch_names / recupero i nomi dei branch / riscrivo tutto
|
|
494
|
+
projects = ''
|
|
495
|
+
File.open('branch_names', 'r') do |file|
|
|
496
|
+
file.each_line do |line|
|
|
497
|
+
projects = JSON.parse(line)
|
|
498
|
+
end
|
|
923
499
|
end
|
|
924
500
|
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
parameters = [
|
|
929
|
-
{
|
|
930
|
-
parameter_key: "Environment",
|
|
931
|
-
parameter_value: "qa"
|
|
932
|
-
},
|
|
933
|
-
{
|
|
934
|
-
parameter_key: "ReleaseVersion",
|
|
935
|
-
parameter_value: "#{@projects["borat"][:revision]}-#{deploy_id}"
|
|
936
|
-
},
|
|
937
|
-
{
|
|
938
|
-
parameter_key: "ECSClusterName",
|
|
939
|
-
parameter_value: @ecs_cluster_name
|
|
940
|
-
},
|
|
941
|
-
{
|
|
942
|
-
parameter_key: "TaskDesiredCount",
|
|
943
|
-
parameter_value: "1"
|
|
944
|
-
},
|
|
945
|
-
{
|
|
946
|
-
parameter_key: "ALBShortName",
|
|
947
|
-
parameter_value: "borat-qa-#{deploy_id}"[0..31]
|
|
948
|
-
},
|
|
949
|
-
{
|
|
950
|
-
parameter_key: "HostnamePattern",
|
|
951
|
-
parameter_value: "backoffice-#{@dns_record_identifier}.qa.colaster.com"
|
|
952
|
-
},
|
|
953
|
-
{
|
|
954
|
-
parameter_key: "HostnamePatternPriority",
|
|
955
|
-
parameter_value: (hostname_pattern_priority.to_i + 30).to_s
|
|
956
|
-
}
|
|
957
|
-
]
|
|
958
|
-
if stack_exists?(stack_name_borat)
|
|
959
|
-
cur_version = get_currently_deployed_version(stack_name_borat)
|
|
960
|
-
update_stack(stack_name_borat, stack_body, parameters, tags) unless cur_version.include?(@projects["borat"][:revision])
|
|
961
|
-
else
|
|
962
|
-
create_stack(stack_name_borat, stack_body, parameters, tags)
|
|
501
|
+
projects.each do |key, project|
|
|
502
|
+
@projects[key] = select_branch_to_deploy(key, project['name'])
|
|
503
|
+
@projects[key]['default_branch'] = project['default_branch']
|
|
963
504
|
end
|
|
964
505
|
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
parameter_value: "backoffice-legacy-#{@dns_record_identifier}.qa.colaster.com"
|
|
992
|
-
},
|
|
993
|
-
{
|
|
994
|
-
parameter_key: "HostnamePatternPriority",
|
|
995
|
-
parameter_value: (hostname_pattern_priority.to_i + 10).to_s
|
|
996
|
-
}
|
|
997
|
-
]
|
|
998
|
-
if stack_exists?(stack_name_backoffice)
|
|
999
|
-
cur_version = get_currently_deployed_version(stack_name_backoffice)
|
|
1000
|
-
update_stack(stack_name_backoffice, stack_body, parameters, tags) unless cur_version.include?(@projects["backoffice"][:revision])
|
|
506
|
+
File.open('branch_names', 'w') { |file| file.write(JSON.generate(@projects)) }
|
|
507
|
+
|
|
508
|
+
update_drone_yml!
|
|
509
|
+
|
|
510
|
+
`git add branch_names .drone.yml`
|
|
511
|
+
`git commit -m 'update'`
|
|
512
|
+
`git push && git checkout master`
|
|
513
|
+
end
|
|
514
|
+
|
|
515
|
+
def qainit_deploy_shutdown!(selection = nil)
|
|
516
|
+
`git checkout master && git pull && git remote prune origin`
|
|
517
|
+
# leggiamo i nomi dei branch
|
|
518
|
+
former_branches = `git branch -a | grep remotes/ | grep -v HEAD | sed 's/ remotes\\/origin\\///g'`.split "\n"
|
|
519
|
+
if selection.nil?
|
|
520
|
+
# stampiamo la lista
|
|
521
|
+
chosen_branch = choose do |menu|
|
|
522
|
+
menu.prompt = "Scegli il QA che vuoi spegnere: ".cyan
|
|
523
|
+
menu.shell = true
|
|
524
|
+
git_user = get_git_user
|
|
525
|
+
former_branches.delete('master')
|
|
526
|
+
former_branches.each_with_index do |branch, index|
|
|
527
|
+
msg = index.odd? ? branch.white : branch.light_yellow # uno bianco e uno giallo alternati
|
|
528
|
+
msg = branch.start_with?(git_user) ? msg.on_blue : msg.on_black # i branch creati da chi lancia l'update sono su sfondo blu
|
|
529
|
+
menu.choice(msg) { branch }
|
|
530
|
+
end
|
|
531
|
+
end
|
|
1001
532
|
else
|
|
1002
|
-
|
|
533
|
+
chosen_branch = selection
|
|
1003
534
|
end
|
|
535
|
+
# checkout master, checkout branch, pull branch, push sul branch con commit vuoto
|
|
536
|
+
`git checkout master && git checkout #{chosen_branch} && git pull`
|
|
537
|
+
`git commit --allow-empty -m 'shutdown' && git push && git checkout master`
|
|
538
|
+
end
|
|
1004
539
|
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
{
|
|
1023
|
-
parameter_key: 'ECSClusterName',
|
|
1024
|
-
parameter_value: @ecs_cluster_name
|
|
1025
|
-
},
|
|
1026
|
-
{
|
|
1027
|
-
parameter_key: 'ALBShortName',
|
|
1028
|
-
parameter_value: "crash-qa-#{deploy_id}"[0..31]
|
|
1029
|
-
},
|
|
1030
|
-
{
|
|
1031
|
-
parameter_key: 'HostnamePattern',
|
|
1032
|
-
parameter_value: "crash-#{@dns_record_identifier}.qa.colaster.com"
|
|
1033
|
-
},
|
|
1034
|
-
{
|
|
1035
|
-
parameter_key: 'HostnamePatternPriority',
|
|
1036
|
-
parameter_value: (hostname_pattern_priority.to_i + 10).to_s
|
|
1037
|
-
}
|
|
1038
|
-
]
|
|
1039
|
-
if stack_exists?(stack_name_crash)
|
|
1040
|
-
cur_version = get_currently_deployed_version(stack_name_crash)
|
|
1041
|
-
update_stack(stack_name_crash, stack_body, parameters, tags) unless cur_version.include?(@projects["crash"][:revision])
|
|
1042
|
-
else
|
|
1043
|
-
create_stack(stack_name_crash, stack_body, parameters, tags)
|
|
540
|
+
def qainit_drone_shutdown!
|
|
541
|
+
output "Recupero le informazioni sui QA attivi..."
|
|
542
|
+
stack_list, envs = get_stacks
|
|
543
|
+
|
|
544
|
+
env_hash = "qa-" + get_deploy_id
|
|
545
|
+
|
|
546
|
+
cluster_stack_name = nil
|
|
547
|
+
stacks_to_delete = []
|
|
548
|
+
stack_list.each do |stack|
|
|
549
|
+
if stack.stack_name.match(/#{env_hash}$/)
|
|
550
|
+
if stack.stack_name.match(/ecs-cluster/)
|
|
551
|
+
cluster_stack_name = stack.stack_name
|
|
552
|
+
else
|
|
553
|
+
break unless stack.stack_name.match(/#{env_hash}$/)
|
|
554
|
+
stacks_to_delete.push(stack.stack_name)
|
|
555
|
+
delete_stack(stack.stack_name)
|
|
556
|
+
end
|
|
1044
557
|
end
|
|
1045
558
|
end
|
|
1046
559
|
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
wait_for_stack_ready(stack_name_fidaty) unless stack_ready?(stack_name_fidaty)
|
|
1053
|
-
|
|
1054
|
-
stack_name_bolla = "ecs-task-bolla-qa-#{deploy_id}"
|
|
1055
|
-
git_checkout_version('bolla', @projects["bolla"][:revision])
|
|
1056
|
-
stack_body = YAML.load_file('projects/bolla/deploy/task.yml')
|
|
1057
|
-
stack_body['Resources']['ECSServiceBolla']['Properties'].reject!{ |k| ['LoadBalancers', 'Role'].include?(k) }
|
|
1058
|
-
stack_body = stack_body.to_yaml
|
|
1059
|
-
parameters = [
|
|
1060
|
-
{
|
|
1061
|
-
parameter_key: "Environment",
|
|
1062
|
-
parameter_value: "qa"
|
|
1063
|
-
},
|
|
1064
|
-
{
|
|
1065
|
-
parameter_key: "ReleaseVersion",
|
|
1066
|
-
parameter_value: "#{@projects["bolla"][:revision]}-#{deploy_id}"
|
|
1067
|
-
},
|
|
1068
|
-
{
|
|
1069
|
-
parameter_key: "TaskDesiredCount",
|
|
1070
|
-
parameter_value: "1"
|
|
1071
|
-
},
|
|
1072
|
-
{
|
|
1073
|
-
parameter_key: "ECSClusterName",
|
|
1074
|
-
parameter_value: @ecs_cluster_name
|
|
1075
|
-
},
|
|
1076
|
-
{
|
|
1077
|
-
parameter_key: "ALBShortName",
|
|
1078
|
-
parameter_value: "bolla-qa-#{deploy_id}"[0..31]
|
|
1079
|
-
},
|
|
1080
|
-
{
|
|
1081
|
-
parameter_key: "HostnamePattern",
|
|
1082
|
-
parameter_value: "bolla-#{@dns_record_identifier}.qa.colaster.com"
|
|
1083
|
-
},
|
|
1084
|
-
{
|
|
1085
|
-
parameter_key: "HostnamePatternPriority",
|
|
1086
|
-
parameter_value: hostname_pattern_priority
|
|
1087
|
-
},
|
|
1088
|
-
]
|
|
1089
|
-
if stack_exists?(stack_name_bolla)
|
|
1090
|
-
cur_version = get_currently_deployed_version(stack_name_bolla)
|
|
1091
|
-
update_stack(stack_name_bolla, stack_body, parameters, tags) unless cur_version.include?(@projects["bolla"][:revision])
|
|
1092
|
-
else
|
|
1093
|
-
create_stack(stack_name_bolla, stack_body, parameters, tags)
|
|
1094
|
-
end
|
|
560
|
+
cluster_stack_name = "ecs-cluster-#{env_hash}"
|
|
561
|
+
if stack_exists?(cluster_stack_name)
|
|
562
|
+
aggregator_enabled = get_stack_tags(cluster_stack_name).detect do |tag|
|
|
563
|
+
tag.key === "hostname_pattern_priority" and tag.value === "1"
|
|
564
|
+
end.is_a?(Aws::CloudFormation::Types::Tag)
|
|
1095
565
|
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
parameters = [
|
|
1100
|
-
{
|
|
1101
|
-
parameter_key: "Environment",
|
|
1102
|
-
parameter_value: "qa"
|
|
1103
|
-
},
|
|
1104
|
-
{
|
|
1105
|
-
parameter_key: "ReleaseVersion",
|
|
1106
|
-
parameter_value: "#{@projects["prima"][:revision]}-#{deploy_id}"
|
|
1107
|
-
},
|
|
1108
|
-
{
|
|
1109
|
-
parameter_key: "TaskDesiredCount",
|
|
1110
|
-
parameter_value: "1"
|
|
1111
|
-
},
|
|
1112
|
-
{
|
|
1113
|
-
parameter_key: "ECSClusterName",
|
|
1114
|
-
parameter_value: @ecs_cluster_name
|
|
1115
|
-
},
|
|
1116
|
-
{
|
|
1117
|
-
parameter_key: "ALBShortName",
|
|
1118
|
-
parameter_value: "web-qa-#{deploy_id}"[0..31]
|
|
1119
|
-
},
|
|
1120
|
-
{
|
|
1121
|
-
parameter_key: "WebQaBaseHostname",
|
|
1122
|
-
parameter_value: "#{@dns_record_identifier}.qa.colaster.com"
|
|
1123
|
-
},
|
|
1124
|
-
{
|
|
1125
|
-
parameter_key: "HostnamePattern",
|
|
1126
|
-
parameter_value: "ww*-#{@dns_record_identifier}.qa.colaster.com"
|
|
1127
|
-
},
|
|
1128
|
-
{
|
|
1129
|
-
parameter_key: "HostnamePatternPriority",
|
|
1130
|
-
parameter_value: hostname_pattern_priority
|
|
1131
|
-
},
|
|
1132
|
-
{
|
|
1133
|
-
parameter_key: "HostnamePatternAggregatorPriority",
|
|
1134
|
-
parameter_value: (hostname_pattern_priority.to_i + 1).to_s
|
|
1135
|
-
}
|
|
1136
|
-
]
|
|
1137
|
-
if stack_exists?(stack_name_web)
|
|
1138
|
-
cur_version = get_currently_deployed_version(stack_name_web)
|
|
1139
|
-
update_stack(stack_name_web, stack_body, parameters, tags) unless cur_version.include?(@projects["prima"][:revision])
|
|
1140
|
-
else
|
|
1141
|
-
create_stack(stack_name_web, stack_body, parameters, tags)
|
|
566
|
+
if aggregator_enabled
|
|
567
|
+
dns_to_staging(env_hash)
|
|
568
|
+
end
|
|
1142
569
|
end
|
|
1143
570
|
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
{
|
|
1153
|
-
parameter_key: "ReleaseVersion",
|
|
1154
|
-
parameter_value: "#{@projects["prima"][:revision]}-#{deploy_id}"
|
|
1155
|
-
},
|
|
1156
|
-
{
|
|
1157
|
-
parameter_key: "ECSClusterName",
|
|
1158
|
-
parameter_value: @ecs_cluster_name
|
|
1159
|
-
}
|
|
1160
|
-
]
|
|
1161
|
-
if stack_exists?(stack_name_consumer)
|
|
1162
|
-
cur_version = get_currently_deployed_version(stack_name_consumer)
|
|
1163
|
-
update_stack(stack_name_consumer, stack_body, parameters, tags) unless cur_version.include?(@projects["prima"][:revision])
|
|
1164
|
-
else
|
|
1165
|
-
create_stack(stack_name_consumer, stack_body, parameters, tags)
|
|
571
|
+
# Se non ha finito di cancellare le altre non si puo' cancellare il cluster
|
|
572
|
+
output "Attendo 10 secondi per poter eliminare il cluster ECS"
|
|
573
|
+
|
|
574
|
+
while stacks_to_delete.length > 0
|
|
575
|
+
sleep 13
|
|
576
|
+
stacks_to_delete.each do |stack_name|
|
|
577
|
+
stacks_to_delete = stacks_to_delete - [stack_name] unless stack_exists?(stack_name)
|
|
578
|
+
end
|
|
579
|
+
output "Stack ancora attivi: #{stacks_to_delete.length.to_s}. Attendo altri 10 secondi per eliminare il cluster ECS"
|
|
1166
580
|
end
|
|
1167
581
|
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
wait_for_stack_ready(stack_name_borat) unless stack_ready?(stack_name_borat)
|
|
1176
|
-
wait_for_stack_ready(stack_name_bolla) unless stack_ready?(stack_name_bolla)
|
|
1177
|
-
wait_for_stack_ready(stack_name_crash) unless stack_ready?(stack_name_crash) || !deploy_crash?
|
|
1178
|
-
|
|
1179
|
-
update_service_defaults(stack_name_web)
|
|
1180
|
-
update_service_defaults(stack_name_consumer)
|
|
1181
|
-
update_service_defaults(stack_name_urania)
|
|
1182
|
-
update_service_defaults(stack_name_backoffice)
|
|
1183
|
-
update_service_defaults(stack_name_ermes)
|
|
1184
|
-
update_service_defaults(stack_name_bburago)
|
|
1185
|
-
update_service_defaults(stack_name_hal9000)
|
|
1186
|
-
update_service_defaults(stack_name_fidaty)
|
|
1187
|
-
update_service_defaults(stack_name_peano)
|
|
1188
|
-
update_service_defaults(stack_name_rogoreport)
|
|
1189
|
-
update_service_defaults(stack_name_assange)
|
|
1190
|
-
update_service_defaults(stack_name_borat)
|
|
1191
|
-
update_service_defaults(stack_name_bolla)
|
|
1192
|
-
update_service_defaults(stack_name_crash) unless stack_ready?(stack_name_crash) || !deploy_crash?
|
|
1193
|
-
|
|
1194
|
-
prima_hostname = get_route53_hostname(stack_name_web)
|
|
1195
|
-
urania_hostname = get_route53_hostname(stack_name_urania)
|
|
1196
|
-
bburago_hostname = get_route53_hostname(stack_name_bburago)
|
|
1197
|
-
hal9000_hostname = get_route53_hostname(stack_name_hal9000)
|
|
1198
|
-
ermes_hostname = get_route53_hostname(stack_name_ermes)
|
|
1199
|
-
fidaty_hostname = get_route53_hostname(stack_name_fidaty)
|
|
1200
|
-
peano_hostname = get_route53_hostname(stack_name_peano)
|
|
1201
|
-
backoffice_hostname = get_route53_hostname(stack_name_backoffice)
|
|
1202
|
-
assange_hostname = get_route53_hostname(stack_name_assange)
|
|
1203
|
-
borat_hostname = get_route53_hostname(stack_name_borat)
|
|
1204
|
-
bolla_hostname = get_route53_hostname(stack_name_bolla)
|
|
1205
|
-
deploy_crash? && crash_hostname = get_route53_hostname(stack_name_crash)
|
|
1206
|
-
|
|
1207
|
-
launch_marley ec2_ip_address(asg_stack_name), prima_hostname, borat_hostname
|
|
1208
|
-
|
|
1209
|
-
projects_text = "
|
|
1210
|
-
> Prima url: https://#{prima_hostname}
|
|
1211
|
-
> Prima RI url: https://#{prima_hostname.sub("www", "wwwri")}
|
|
1212
|
-
> Backoffice (Borat) url: https://#{borat_hostname}
|
|
1213
|
-
> Urania url: http://#{urania_hostname}:81
|
|
1214
|
-
> Bburago url: http://#{bburago_hostname}:83
|
|
1215
|
-
> Ermes url: http://#{ermes_hostname}:10002
|
|
1216
|
-
> Hal9000 url: http://#{hal9000_hostname}:10031
|
|
1217
|
-
> Fidaty url: http://#{fidaty_hostname}:10021
|
|
1218
|
-
> Peano url: http://#{peano_hostname}:10039
|
|
1219
|
-
> Bolla url: http://#{ec2_ip_address(asg_stack_name)}:10046
|
|
1220
|
-
> Assange url: https://#{assange_hostname}
|
|
1221
|
-
> Backoffice (legacy) url: https://#{backoffice_hostname}"
|
|
1222
|
-
projects_text.concat "
|
|
1223
|
-
> Crash url: https://#{crash_hostname}" if deploy_crash?
|
|
1224
|
-
projects_text.concat "
|
|
1225
|
-
> RabbitMQ url: http://#{ec2_ip_address(asg_stack_name)}:15672
|
|
1226
|
-
> Supervisor url: http://#{ec2_ip_address(asg_stack_name)}:9001
|
|
1227
|
-
> Elasticsearch url: http://#{ec2_ip_address(asg_stack_name)}:9200
|
|
1228
|
-
> Elasticsearch 2 url: http://#{ec2_ip_address(asg_stack_name)}:9201
|
|
1229
|
-
> SSH connection: ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no githubUsername@#{ec2_ip_address(asg_stack_name)}\n"
|
|
1230
|
-
output projects_text.cyan
|
|
1231
|
-
output "Deploy effettuato, everything is awesome!\n".green
|
|
582
|
+
delete_stack(cluster_stack_name) if stack_exists?(cluster_stack_name)
|
|
583
|
+
delete_stack(@base_stack_name_alb + env_hash[3..8]) if stack_exists?(@base_stack_name_alb + env_hash[3..8])
|
|
584
|
+
delete_stack(@base_stack_name_alb_ws + env_hash[3..8]) if stack_exists?(@base_stack_name_alb_ws + env_hash[3..8])
|
|
585
|
+
`git checkout master && git push origin --delete ${DRONE_BRANCH}`
|
|
586
|
+
output "Cancello il record DNS utilizzato da Lighthouse"
|
|
587
|
+
delete_lighthouse_dns()
|
|
588
|
+
output "Finito!".green
|
|
1232
589
|
end
|
|
1233
590
|
|
|
1234
|
-
def
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
when stack_name.include?('peano')
|
|
1249
|
-
host = "peano-#{@dns_record_identifier}.qa.colaster.com"
|
|
1250
|
-
when stack_name.include?('assange')
|
|
1251
|
-
host = "assange-#{@dns_record_identifier}.qa.colaster.com"
|
|
1252
|
-
when stack_name.include?('borat')
|
|
1253
|
-
host = "backoffice-#{@dns_record_identifier}.qa.colaster.com"
|
|
1254
|
-
when stack_name.include?('crash')
|
|
1255
|
-
host = "crash-#{@dns_record_identifier}.qa.colaster.com"
|
|
1256
|
-
when stack_name.include?('ermes')
|
|
1257
|
-
host = "ermes-#{@dns_record_identifier}.qa.colaster.com"
|
|
1258
|
-
when stack_name.include?('bolla')
|
|
1259
|
-
host = "bolla-#{@dns_record_identifier}.qa.colaster.com"
|
|
591
|
+
def qainit_write_output(file_message, output_message)
|
|
592
|
+
`mkdir -p /etc/qainit-output`
|
|
593
|
+
qa_file_name = "/etc/qainit-output/url_qa"
|
|
594
|
+
File.open(qa_file_name + '.txt', 'w') { |file| file.write(file_message) }
|
|
595
|
+
output "#{output_message} #{qa_file_name}".green
|
|
596
|
+
end
|
|
597
|
+
|
|
598
|
+
def update_drone_yml!()
|
|
599
|
+
drone_yml = File.read('.drone.yml')
|
|
600
|
+
@projects.each do |key, project|
|
|
601
|
+
drone_yml = drone_yml.gsub(/#{key}@.+\n/, "#{key}@#{project['revision']}\n")
|
|
602
|
+
end
|
|
603
|
+
File.open(".drone.yml", "w") do |f|
|
|
604
|
+
f.write(drone_yml)
|
|
1260
605
|
end
|
|
1261
|
-
host
|
|
1262
606
|
end
|
|
1263
607
|
|
|
1264
|
-
def
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
max_records: 1
|
|
1272
|
-
})
|
|
1273
|
-
instance_id = resp.auto_scaling_groups[0].instances[0].instance_id
|
|
1274
|
-
resp = @ec2.describe_instances({instance_ids: [instance_id]})
|
|
1275
|
-
resp.reservations[0].instances[0].private_ip_address
|
|
608
|
+
def get_deploy_id
|
|
609
|
+
if @deploy_id
|
|
610
|
+
@deploy_id
|
|
611
|
+
else
|
|
612
|
+
@deploy_id = Digest::MD5.hexdigest(ENV['DRONE_BRANCH'])
|
|
613
|
+
@deploy_id
|
|
614
|
+
end
|
|
1276
615
|
end
|
|
1277
616
|
|
|
1278
617
|
def get_alb_host(stack_name)
|
|
@@ -1289,551 +628,53 @@ class Release
|
|
|
1289
628
|
logical_resource_id = 'EcsApplicationLoadBalancerInternal'
|
|
1290
629
|
when stack_name.include?('fidaty')
|
|
1291
630
|
logical_resource_id = 'EcsApplicationLoadBalancerInternal'
|
|
631
|
+
when stack_name.include?('activia')
|
|
632
|
+
logical_resource_id = 'EcsApplicationLoadBalancerInternal'
|
|
633
|
+
when stack_name.include?('skynet')
|
|
634
|
+
logical_resource_id = 'EcsApplicationLoadBalancerInternal'
|
|
635
|
+
when stack_name.include?('roger')
|
|
636
|
+
logical_resource_id = 'EcsApplicationLoadBalancerInternal'
|
|
1292
637
|
when stack_name.include?('alb-http-public')
|
|
1293
638
|
logical_resource_id = 'EcsApplicationLoadBalancerPublic'
|
|
1294
639
|
when stack_name.include?('alb-ws-public')
|
|
1295
640
|
logical_resource_id = 'EcsApplicationLoadBalancerPublic'
|
|
1296
641
|
when stack_name.include?('peano')
|
|
1297
642
|
logical_resource_id = 'EcsApplicationLoadBalancerInternal'
|
|
643
|
+
when stack_name.include?('leftorium')
|
|
644
|
+
logical_resource_id = 'EcsApplicationLoadBalancerInternal'
|
|
1298
645
|
when stack_name.include?('assange')
|
|
1299
646
|
logical_resource_id = 'EcsApplicationLoadBalancerPublic'
|
|
1300
647
|
when stack_name.include?('borat')
|
|
1301
648
|
logical_resource_id = 'EcsApplicationLoadBalancerPublic'
|
|
1302
649
|
when stack_name.include?('crash')
|
|
1303
650
|
logical_resource_id = 'EcsApplicationLoadBalancerPublic'
|
|
651
|
+
when stack_name.include?('rachele')
|
|
652
|
+
logical_resource_id = 'EcsApplicationLoadBalancerInternal'
|
|
653
|
+
when stack_name.include?('starsky')
|
|
654
|
+
logical_resource_id = 'EcsApplicationLoadBalancerPublic'
|
|
655
|
+
when stack_name.include?('hutch')
|
|
656
|
+
logical_resource_id = 'EcsApplicationLoadBalancerPublic'
|
|
657
|
+
when stack_name.include?('maia')
|
|
658
|
+
logical_resource_id = 'EcsApplicationLoadBalancerPublic'
|
|
659
|
+
when stack_name.include?('legion')
|
|
660
|
+
logical_resource_id = 'EcsApplicationLoadBalancerInternal'
|
|
1304
661
|
end
|
|
1305
|
-
resp =
|
|
1306
|
-
|
|
1307
|
-
logical_resource_id: logical_resource_id
|
|
1308
|
-
})
|
|
1309
|
-
resp = @alb.describe_load_balancers({
|
|
1310
|
-
load_balancer_arns: [resp.stack_resource_detail.physical_resource_id]
|
|
1311
|
-
})
|
|
662
|
+
resp = describe_stack_resource(stack_name, logical_resource_id)
|
|
663
|
+
resp = describe_load_balancers([resp.stack_resource_detail.physical_resource_id])
|
|
1312
664
|
resp.load_balancers[0].dns_name
|
|
1313
665
|
end
|
|
1314
666
|
|
|
1315
|
-
def
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
logical_resource_id = 'ECSServiceWeb'
|
|
1319
|
-
when stack_name.include?('consumer')
|
|
1320
|
-
logical_resource_id = 'ECSServiceConsumer'
|
|
1321
|
-
when stack_name.include?('urania')
|
|
1322
|
-
logical_resource_id = 'ECSServiceUrania'
|
|
1323
|
-
when stack_name.include?('backoffice')
|
|
1324
|
-
logical_resource_id = 'ECSServiceBackoffice'
|
|
1325
|
-
when stack_name.include?('ermes')
|
|
1326
|
-
logical_resource_id = 'ECSServiceErmes'
|
|
1327
|
-
when stack_name.include?('bburago')
|
|
1328
|
-
logical_resource_id = 'ECSServiceBburago'
|
|
1329
|
-
when stack_name.include?('hal9000')
|
|
1330
|
-
logical_resource_id = 'ECSServiceHal9000'
|
|
1331
|
-
when stack_name.include?('fidaty')
|
|
1332
|
-
logical_resource_id = 'ECSServiceFidaty'
|
|
1333
|
-
when stack_name.include?('peano')
|
|
1334
|
-
logical_resource_id = 'ECSServicePeano'
|
|
1335
|
-
when stack_name.include?('rogoreport')
|
|
1336
|
-
logical_resource_id = 'ECSServiceRogoreport'
|
|
1337
|
-
when stack_name.include?('assange')
|
|
1338
|
-
logical_resource_id = 'ECSServiceAssange'
|
|
1339
|
-
when stack_name.include?('borat')
|
|
1340
|
-
logical_resource_id = 'ECSServiceBorat'
|
|
1341
|
-
when stack_name.include?('crash')
|
|
1342
|
-
logical_resource_id = 'ECSServiceCrash'
|
|
1343
|
-
when stack_name.include?('bolla')
|
|
1344
|
-
logical_resource_id = 'ECSServiceBolla'
|
|
667
|
+
def deploy_pyxis?
|
|
668
|
+
if defined? @deploy_pyxis
|
|
669
|
+
@deploy_pyxis
|
|
1345
670
|
else
|
|
1346
|
-
|
|
1347
|
-
end
|
|
1348
|
-
resp = @cf.describe_stack_resource(
|
|
1349
|
-
stack_name: stack_name,
|
|
1350
|
-
logical_resource_id: logical_resource_id
|
|
1351
|
-
)
|
|
1352
|
-
@ecs.update_service(
|
|
1353
|
-
cluster: @ecs_cluster_name,
|
|
1354
|
-
service: resp.stack_resource_detail.physical_resource_id,
|
|
1355
|
-
deployment_configuration: {
|
|
1356
|
-
minimum_healthy_percent: 0,
|
|
1357
|
-
maximum_percent: 100
|
|
1358
|
-
}
|
|
1359
|
-
)
|
|
1360
|
-
end
|
|
1361
|
-
|
|
1362
|
-
def create_urania_artifact(revision)
|
|
1363
|
-
output "Preparo l'artifact urania .zip\n".yellow
|
|
671
|
+
pyxis_updated = `git log -p -1 --unified=0 | grep pyxis-npm:`.length > 0
|
|
1364
672
|
|
|
1365
|
-
|
|
673
|
+
update_pyxis = !@projects['pyxis-npm'].empty? && @projects['pyxis-npm']['name'] != 'master' && pyxis_updated
|
|
1366
674
|
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
decrypt_secrets()
|
|
1370
|
-
|
|
1371
|
-
[
|
|
1372
|
-
"docker-compose build web",
|
|
1373
|
-
"docker run -v $PWD:/code -w /code -e MIX_ENV=qa --entrypoint /bin/sh urania_web \
|
|
1374
|
-
'-c' 'mix local.hex --force && mix hex.info && \
|
|
1375
|
-
mix deps.get && mix compile && mix deps.compile && \
|
|
1376
|
-
rm -rf _build/qa/rel/ && \
|
|
1377
|
-
mix release --env=qa'"
|
|
1378
|
-
].each do |cmd|
|
|
1379
|
-
execute_command cmd
|
|
1380
|
-
end
|
|
1381
|
-
|
|
1382
|
-
artifact_path = Dir.glob("_build/qa/rel/urania/releases/*/urania.tar.gz").first
|
|
1383
|
-
upload_artifact(artifact_path, "microservices/urania/#{revision}-qa.tar.gz", "#{@s3_bucket}-encrypted")
|
|
1384
|
-
|
|
1385
|
-
Dir.chdir '../../'
|
|
1386
|
-
end
|
|
1387
|
-
|
|
1388
|
-
def create_ermes_artifact(revision, deploy_id)
|
|
1389
|
-
output "Preparo l'artifact ermes .zip\n".yellow
|
|
1390
|
-
|
|
1391
|
-
git_checkout_version('ermes', revision)
|
|
1392
|
-
|
|
1393
|
-
Dir.chdir 'projects/ermes'
|
|
1394
|
-
|
|
1395
|
-
stack_name_web = 'ecs-task-web-qa-notneeded'
|
|
1396
|
-
web_qa_host = get_route53_hostname(stack_name_web)
|
|
1397
|
-
stack_name_peano = 'ecs-task-peano-qa-notneeded'
|
|
1398
|
-
peano_qa_host = "#{get_route53_hostname(stack_name_peano)}:10039"
|
|
1399
|
-
|
|
1400
|
-
decrypt_secrets()
|
|
1401
|
-
|
|
1402
|
-
[
|
|
1403
|
-
"if echo `docker network ls` | grep crash_default; \
|
|
1404
|
-
then echo 'crash_default network already existing'; \
|
|
1405
|
-
else docker network create crash_default; fi",
|
|
1406
|
-
'docker-compose build web',
|
|
1407
|
-
"docker run -v $PWD:/code -w /code -e MIX_ENV=qa --entrypoint /bin/sh ermes_web \
|
|
1408
|
-
'-c' 'sed -i \"s/peano-qa-host/#{peano_qa_host}/g\" config/qa.exs && \
|
|
1409
|
-
sed -i \"s/web-qa-host/#{web_qa_host}/g\" config/qa.exs && \
|
|
1410
|
-
mix local.hex --force && mix hex.info && \
|
|
1411
|
-
mix deps.get && mix compile && mix deps.compile && \
|
|
1412
|
-
mix phx.digest && \
|
|
1413
|
-
rm -rf _build/qa/rel/ && \
|
|
1414
|
-
mix release --env=qa'",
|
|
1415
|
-
"if echo `docker ps` | grep crash; \
|
|
1416
|
-
then echo 'cannot delete crash_default network'; \
|
|
1417
|
-
else docker network rm crash_default; fi "
|
|
1418
|
-
].each do |cmd|
|
|
1419
|
-
execute_command cmd
|
|
1420
|
-
end
|
|
1421
|
-
|
|
1422
|
-
artifact_path = Dir.glob("_build/qa/rel/ermes/releases/*/ermes.tar.gz").first
|
|
1423
|
-
upload_artifact(artifact_path, "microservices/ermes/#{revision}-#{deploy_id}-qa.tar.gz", "#{@s3_bucket}-encrypted")
|
|
1424
|
-
|
|
1425
|
-
Dir.chdir '../../'
|
|
1426
|
-
end
|
|
1427
|
-
|
|
1428
|
-
def deploy_crash?
|
|
1429
|
-
!@projects['crash'].empty? && !@projects['crash'][:default_branch]
|
|
1430
|
-
end
|
|
1431
|
-
|
|
1432
|
-
def create_crash_artifact(revision, deploy_id)
|
|
1433
|
-
output "Preparo l'artifact crash .zip\n".yellow
|
|
1434
|
-
|
|
1435
|
-
git_checkout_version('crash', revision)
|
|
1436
|
-
|
|
1437
|
-
Dir.chdir 'projects/crash'
|
|
1438
|
-
|
|
1439
|
-
stack_name_web = 'ecs-task-web-qa-notneeded'
|
|
1440
|
-
web_qa_host = get_route53_hostname(stack_name_web)
|
|
1441
|
-
stack_name_crash = 'ecs-task-crash-qa-notneeded'
|
|
1442
|
-
crash_qa_host = get_route53_hostname(stack_name_crash)
|
|
1443
|
-
|
|
1444
|
-
ws_endpoint = "wss://#{crash_qa_host}/socket/websocket?vsn=1.0.0"
|
|
1445
|
-
frontend_endpoint = "https://#{crash_qa_host}/graphql"
|
|
1446
|
-
|
|
1447
|
-
decrypt_secrets()
|
|
1448
|
-
|
|
1449
|
-
[
|
|
1450
|
-
'mv docker-compose-ci.yml docker-compose.yml',
|
|
1451
|
-
'docker-compose build web',
|
|
1452
|
-
"docker-compose run -w $PWD -e WS_ENDPOINT=#{ws_endpoint} -e GRAPHQL_ENDPOINT=#{frontend_endpoint} -e MIX_ENV=qa web \
|
|
1453
|
-
'-c' 'sed -i \"s/web-qa-host/#{web_qa_host}/g\" config/qa.exs && \
|
|
1454
|
-
sed -i \"s/crash-qa-host/#{crash_qa_host}/g\" config/qa.exs && \
|
|
1455
|
-
mix local.hex --force && mix hex.info && \
|
|
1456
|
-
mix deps.get && \
|
|
1457
|
-
cd assets && \
|
|
1458
|
-
yarn --cache-folder ~/.cache/yarn && \
|
|
1459
|
-
./node_modules/.bin/elm-github-install && \
|
|
1460
|
-
NODE_ENV=production sysconfcpus -n 2 ./node_modules/.bin/webpack -p --config config/webpack.config.prod.js && \
|
|
1461
|
-
cd ../ && \
|
|
1462
|
-
mix release.clean --implode --no-confirm && \
|
|
1463
|
-
mix phx.digest && \
|
|
1464
|
-
mix deps.clean --all && \
|
|
1465
|
-
mix deps.get && \
|
|
1466
|
-
mix compile && mix release --env=qa'",
|
|
1467
|
-
'docker-compose down'
|
|
1468
|
-
].each do |cmd|
|
|
1469
|
-
execute_command cmd
|
|
675
|
+
@deploy_pyxis = update_pyxis
|
|
676
|
+
return update_pyxis
|
|
1470
677
|
end
|
|
1471
|
-
|
|
1472
|
-
artifact_path = Dir.glob('_build/qa/rel/crash/releases/*/crash.tar.gz').first
|
|
1473
|
-
upload_artifact(artifact_path, "microservices/crash/#{revision}-#{deploy_id}-qa.tar.gz", "#{@s3_bucket}-encrypted")
|
|
1474
|
-
|
|
1475
|
-
Dir.chdir '../../'
|
|
1476
|
-
end
|
|
1477
|
-
|
|
1478
|
-
def create_bburago_artifact(revision)
|
|
1479
|
-
output "Preparo l'artifact bburago .zip\n".yellow
|
|
1480
|
-
|
|
1481
|
-
git_checkout_version('bburago', revision)
|
|
1482
|
-
|
|
1483
|
-
Dir.chdir 'projects/bburago'
|
|
1484
|
-
|
|
1485
|
-
decrypt_secrets()
|
|
1486
|
-
|
|
1487
|
-
[
|
|
1488
|
-
"docker-compose build web",
|
|
1489
|
-
"docker run -v $PWD:/code -w /code -e MIX_ENV=qa --entrypoint /bin/sh bburago_web \
|
|
1490
|
-
'-c' 'mix local.hex --force && mix hex.info && \
|
|
1491
|
-
mix deps.get && mix compile && mix deps.compile && \
|
|
1492
|
-
rm -rf _build/qa/rel/ && \
|
|
1493
|
-
mix release --env=qa'"
|
|
1494
|
-
].each do |cmd|
|
|
1495
|
-
execute_command cmd
|
|
1496
|
-
end
|
|
1497
|
-
|
|
1498
|
-
artifact_path = Dir.glob("_build/qa/rel/bburago/releases/*/bburago.tar.gz").first
|
|
1499
|
-
upload_artifact(artifact_path, "microservices/bburago/#{revision}-qa.tar.gz", "#{@s3_bucket}-encrypted")
|
|
1500
|
-
|
|
1501
|
-
Dir.chdir '../../'
|
|
1502
|
-
end
|
|
1503
|
-
|
|
1504
|
-
def create_hal9000_artifact(revision)
|
|
1505
|
-
output "Preparo l'artifact hal9000 .zip\n".yellow
|
|
1506
|
-
|
|
1507
|
-
git_checkout_version('hal9000', revision)
|
|
1508
|
-
|
|
1509
|
-
Dir.chdir 'projects/hal9000'
|
|
1510
|
-
|
|
1511
|
-
decrypt_secrets()
|
|
1512
|
-
|
|
1513
|
-
[
|
|
1514
|
-
"docker-compose build web",
|
|
1515
|
-
"docker run -v $PWD:/code -w /code -e MIX_ENV=qa --entrypoint /bin/sh hal9000_web \
|
|
1516
|
-
'-c' 'mix local.hex --force && mix hex.info && \
|
|
1517
|
-
mix deps.get && mix compile && mix deps.compile && \
|
|
1518
|
-
mix phx.digest && \
|
|
1519
|
-
rm -rf _build/qa/rel/ && \
|
|
1520
|
-
mix release --env=qa'"
|
|
1521
|
-
].each do |cmd|
|
|
1522
|
-
execute_command cmd
|
|
1523
|
-
end
|
|
1524
|
-
|
|
1525
|
-
artifact_path = Dir.glob("_build/qa/rel/hal9000/releases/*/hal9000.tar.gz").first
|
|
1526
|
-
upload_artifact(artifact_path, "microservices/hal9000/#{revision}-qa.tar.gz", "#{@s3_bucket}-encrypted")
|
|
1527
|
-
|
|
1528
|
-
Dir.chdir '../../'
|
|
1529
|
-
end
|
|
1530
|
-
|
|
1531
|
-
def create_fidaty_artifact(revision, deploy_id)
|
|
1532
|
-
output "Preparo l'artifact fidaty .zip\n".yellow
|
|
1533
|
-
|
|
1534
|
-
git_checkout_version('fidaty', revision)
|
|
1535
|
-
|
|
1536
|
-
Dir.chdir 'projects/fidaty'
|
|
1537
|
-
|
|
1538
|
-
stack_name_web = "ecs-task-web-qa-notneeded"
|
|
1539
|
-
web_qa_host = get_route53_hostname(stack_name_web)
|
|
1540
|
-
|
|
1541
|
-
stack_name_peano = "ecs-task-peano-qa-notneeded"
|
|
1542
|
-
peano_qa_host = "#{get_route53_hostname(stack_name_peano)}:10039"
|
|
1543
|
-
|
|
1544
|
-
decrypt_secrets()
|
|
1545
|
-
|
|
1546
|
-
[
|
|
1547
|
-
"docker-compose build web",
|
|
1548
|
-
"docker run -v $PWD:/code -w /code -e MIX_ENV=qa --entrypoint /bin/sh fidaty_web \
|
|
1549
|
-
'-c' 'sed -i \"s/web-qa-host/#{web_qa_host}/g\" config/qa.exs && \
|
|
1550
|
-
sed -i \"s/peano-qa-host/#{peano_qa_host}/g\" config/qa.exs && \
|
|
1551
|
-
mix local.hex --force && mix hex.info && \
|
|
1552
|
-
mix deps.get && mix compile && mix deps.compile && \
|
|
1553
|
-
mix phx.digest && \
|
|
1554
|
-
rm -rf _build/qa/rel/ && \
|
|
1555
|
-
mix release --env=qa'"
|
|
1556
|
-
].each do |cmd|
|
|
1557
|
-
execute_command cmd
|
|
1558
|
-
end
|
|
1559
|
-
|
|
1560
|
-
artifact_path = Dir.glob("_build/qa/rel/fidaty/releases/*/fidaty.tar.gz").first
|
|
1561
|
-
upload_artifact(artifact_path, "microservices/fidaty/#{revision}-#{deploy_id}-qa.tar.gz", "#{@s3_bucket}-encrypted")
|
|
1562
|
-
|
|
1563
|
-
Dir.chdir '../../'
|
|
1564
|
-
end
|
|
1565
|
-
|
|
1566
|
-
def create_peano_artifact(revision, deploy_id)
|
|
1567
|
-
output "Preparo l'artifact peano .zip\n".yellow
|
|
1568
|
-
|
|
1569
|
-
git_checkout_version('peano', revision)
|
|
1570
|
-
|
|
1571
|
-
stack_name_assange = "ecs-task-assange-qa-notneeded"
|
|
1572
|
-
assange_qa_host = get_route53_hostname(stack_name_assange)
|
|
1573
|
-
stack_name_web = 'ecs-task-web-qa-notneeded'
|
|
1574
|
-
web_qa_host = get_route53_hostname(stack_name_web)
|
|
1575
|
-
|
|
1576
|
-
Dir.chdir 'projects/peano'
|
|
1577
|
-
|
|
1578
|
-
stop_unless is_branch_compatible_with_current_twig_version?("peano"), "Il tuo branch del progetto peano non e' compatibile con questa versione di twig, devi REBASARE DA MASTER!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!".red
|
|
1579
|
-
|
|
1580
|
-
decrypt_secrets()
|
|
1581
|
-
|
|
1582
|
-
[
|
|
1583
|
-
"docker-compose build web",
|
|
1584
|
-
"docker run -v $PWD:/code -w /code -e MIX_ENV=qa --entrypoint /bin/sh peano_web \
|
|
1585
|
-
'-c' 'mix local.hex --force && mix hex.info && \
|
|
1586
|
-
sed -i \"s/assange-qa-host/#{assange_qa_host}/g\" config/qa.exs && \
|
|
1587
|
-
sed -i \"s/web-qa-host/#{web_qa_host}/g\" config/qa.exs && \
|
|
1588
|
-
mix deps.get && mix compile && mix deps.compile && \
|
|
1589
|
-
rm -rf _build/qa/rel/ && \
|
|
1590
|
-
mix release --env=qa'"
|
|
1591
|
-
].each do |cmd|
|
|
1592
|
-
execute_command cmd
|
|
1593
|
-
end
|
|
1594
|
-
|
|
1595
|
-
artifact_path = Dir.glob("_build/qa/rel/peano/releases/*/peano.tar.gz").first
|
|
1596
|
-
upload_artifact(artifact_path, "microservices/peano/#{revision}-#{deploy_id}-qa.tar.gz", "#{@s3_bucket}-encrypted")
|
|
1597
|
-
|
|
1598
|
-
Dir.chdir '../../'
|
|
1599
|
-
end
|
|
1600
|
-
|
|
1601
|
-
def create_rogoreport_artifact(revision, deploy_id)
|
|
1602
|
-
output "Preparo l'artifact rogoreport .zip\n".yellow
|
|
1603
|
-
|
|
1604
|
-
git_checkout_version('rogoreport', revision)
|
|
1605
|
-
|
|
1606
|
-
Dir.chdir 'projects/rogoreport'
|
|
1607
|
-
|
|
1608
|
-
stack_name_peano = 'ecs-task-peano-qa-notneeded'
|
|
1609
|
-
stack_name_web = 'ecs-task-web-qa-notneeded'
|
|
1610
|
-
peano_qa_host = "#{get_route53_hostname(stack_name_peano)}:10039"
|
|
1611
|
-
web_qa_host = get_route53_hostname(stack_name_web)
|
|
1612
|
-
|
|
1613
|
-
decrypt_secrets()
|
|
1614
|
-
|
|
1615
|
-
[
|
|
1616
|
-
"docker-compose build web",
|
|
1617
|
-
"docker run -v $PWD:/code -w /code -e MIX_ENV=qa --entrypoint /bin/sh rogoreport_web \
|
|
1618
|
-
'-c' 'sed -i \"s/peano-qa-host/#{peano_qa_host}/g\" apps/escile/config/qa.exs && \
|
|
1619
|
-
sed -i \"s/web-qa-host/#{web_qa_host}/g\" apps/escile/config/qa.exs && \
|
|
1620
|
-
cat apps/escile/config/qa.exs && \
|
|
1621
|
-
mix local.hex --force && mix hex.info && \
|
|
1622
|
-
mix deps.get && mix compile && mix deps.compile && \
|
|
1623
|
-
rm -rf _build/qa/rel/ && \
|
|
1624
|
-
mix release --name=rogoreport_qa --env=qa'"
|
|
1625
|
-
].each do |cmd|
|
|
1626
|
-
execute_command cmd
|
|
1627
|
-
end
|
|
1628
|
-
|
|
1629
|
-
artifact_path = Dir.glob("_build/qa/rel/rogoreport*/releases/*/rogoreport*.tar.gz").first
|
|
1630
|
-
upload_artifact(artifact_path, "microservices/rogoreport/rogoreport_qa-#{revision}-#{deploy_id}-qa.tar.gz", "#{@s3_bucket}-encrypted")
|
|
1631
|
-
|
|
1632
|
-
Dir.chdir '../../'
|
|
1633
|
-
end
|
|
1634
|
-
|
|
1635
|
-
def create_assange_artifact(revision, deploy_id)
|
|
1636
|
-
output "Preparo l'artifact assange .zip\n".yellow
|
|
1637
|
-
|
|
1638
|
-
git_checkout_version('assange', revision)
|
|
1639
|
-
|
|
1640
|
-
Dir.chdir 'projects/assange'
|
|
1641
|
-
|
|
1642
|
-
stack_name_web = 'ecs-task-web-qa-notneeded'
|
|
1643
|
-
web_qa_host = get_route53_hostname(stack_name_web)
|
|
1644
|
-
|
|
1645
|
-
decrypt_secrets()
|
|
1646
|
-
|
|
1647
|
-
[
|
|
1648
|
-
"docker-compose build web",
|
|
1649
|
-
"docker run -v $PWD:/code -w /code -e MIX_ENV=qa --entrypoint /bin/sh assange_web \
|
|
1650
|
-
'-c' 'mix local.hex --force && mix hex.info && \
|
|
1651
|
-
sed -i \"s/web-qa-host/#{web_qa_host}/g\" config/qa.exs && \
|
|
1652
|
-
mix deps.get && mix compile && mix deps.compile && \
|
|
1653
|
-
mix phx.digest && \
|
|
1654
|
-
rm -rf _build/qa/rel/ && \
|
|
1655
|
-
mix release --env=qa'"
|
|
1656
|
-
].each do |cmd|
|
|
1657
|
-
execute_command cmd
|
|
1658
|
-
end
|
|
1659
|
-
|
|
1660
|
-
artifact_path = Dir.glob("_build/qa/rel/assange/releases/*/assange.tar.gz").first
|
|
1661
|
-
upload_artifact(artifact_path, "microservices/assange/#{revision}-#{deploy_id}-qa.tar.gz", "#{@s3_bucket}-encrypted")
|
|
1662
|
-
|
|
1663
|
-
Dir.chdir '../../'
|
|
1664
|
-
end
|
|
1665
|
-
|
|
1666
|
-
def create_bolla_artifact(revision, deploy_id)
|
|
1667
|
-
output "Preparo l'artifact bolla .zip\n".yellow
|
|
1668
|
-
|
|
1669
|
-
git_checkout_version('bolla', revision)
|
|
1670
|
-
|
|
1671
|
-
Dir.chdir 'projects/bolla'
|
|
1672
|
-
|
|
1673
|
-
decrypt_secrets()
|
|
1674
|
-
|
|
1675
|
-
[
|
|
1676
|
-
"docker-compose build web",
|
|
1677
|
-
"docker run -v $PWD:/code -w /code -e MIX_ENV=qa --entrypoint /bin/sh assange_web \
|
|
1678
|
-
'-c' 'mix local.hex --force && mix hex.info && \
|
|
1679
|
-
mix deps.get && mix compile && mix deps.compile && \
|
|
1680
|
-
rm -rf _build/qa/rel/ && \
|
|
1681
|
-
mix release --env=qa'"
|
|
1682
|
-
].each do |cmd|
|
|
1683
|
-
execute_command cmd
|
|
1684
|
-
end
|
|
1685
|
-
|
|
1686
|
-
artifact_path = Dir.glob("_build/qa/rel/migrator/releases/*/migrator.tar.gz").first
|
|
1687
|
-
upload_artifact(artifact_path, "microservices/bolla/#{revision}-#{deploy_id}-qa-migrator.tar.gz", "#{@s3_bucket}-encrypted")
|
|
1688
|
-
|
|
1689
|
-
Dir.chdir '../../'
|
|
1690
|
-
end
|
|
1691
|
-
|
|
1692
|
-
def create_borat_artifact(revision, deploy_id)
|
|
1693
|
-
output "Preparo l'artifact borat .zip\n".yellow
|
|
1694
|
-
|
|
1695
|
-
git_checkout_version('borat', revision)
|
|
1696
|
-
|
|
1697
|
-
Dir.chdir 'projects/borat'
|
|
1698
|
-
|
|
1699
|
-
stack_name_web = "ecs-task-web-qa-notneeded"
|
|
1700
|
-
web_qa_host = get_route53_hostname(stack_name_web)
|
|
1701
|
-
stack_name_backoffice = "ecs-task-backoffice-qa-notneeded"
|
|
1702
|
-
backoffice_qa_host = get_route53_hostname(stack_name_backoffice)
|
|
1703
|
-
stack_name_assange = "ecs-task-assange-qa-notneeded"
|
|
1704
|
-
assange_qa_host = get_route53_hostname(stack_name_assange)
|
|
1705
|
-
stack_name_peano = "ecs-task-peano-qa-notneeded"
|
|
1706
|
-
peano_qa_host = "#{get_route53_hostname(stack_name_peano)}:10039"
|
|
1707
|
-
stack_name_borat = "ecs-task-borat-qa-notneeded"
|
|
1708
|
-
borat_qa_host = get_route53_hostname(stack_name_borat)
|
|
1709
|
-
|
|
1710
|
-
ws_endpoint = "wss://#{borat_qa_host}/socket/websocket?vsn=1.0.0"
|
|
1711
|
-
frontend_endpoint = "https://#{web_qa_host}/"
|
|
1712
|
-
|
|
1713
|
-
stop_unless is_branch_compatible_with_current_twig_version?("borat"), "Il tuo branch del progetto borat non e' compatibile con questa versione di twig, devi REBASARE DA MASTER!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!".red
|
|
1714
|
-
|
|
1715
|
-
decrypt_secrets()
|
|
1716
|
-
|
|
1717
|
-
[
|
|
1718
|
-
"docker-compose build backend",
|
|
1719
|
-
"docker run -v $PWD:/code -w /code -e WS_ENDPOINT=#{ws_endpoint} -e FRONTEND=#{frontend_endpoint} -e MIX_ENV=qa --entrypoint /bin/sh borat_backend \
|
|
1720
|
-
'-c' 'sed -i \"s/web-qa-host/#{web_qa_host}/g\" config/qa.exs && \
|
|
1721
|
-
sed -i \"s/backoffice-legacy-qa-host/#{backoffice_qa_host}/g\" config/qa.exs && \
|
|
1722
|
-
sed -i \"s/assange-qa-host/#{assange_qa_host}/g\" config/qa.exs && \
|
|
1723
|
-
sed -i \"s/peano-qa-host/#{peano_qa_host}/g\" config/qa.exs && \
|
|
1724
|
-
sed -i \"s/borat-qa-host/#{borat_qa_host}/g\" config/qa.exs && \
|
|
1725
|
-
mix local.hex --force && mix hex.info && \
|
|
1726
|
-
mix deps.get && \
|
|
1727
|
-
cd assets && \
|
|
1728
|
-
yarn --cache-folder ~/.cache/yarn && \
|
|
1729
|
-
./node_modules/.bin/elm-github-install && \
|
|
1730
|
-
sysconfcpus -n 2 ./node_modules/.bin/webpack -p --config config/webpack.config.prod.js && \
|
|
1731
|
-
cd ../ && \
|
|
1732
|
-
mix phx.digest && \
|
|
1733
|
-
mix compile && mix deps.compile && \
|
|
1734
|
-
rm -rf _build/qa/rel/ && \
|
|
1735
|
-
mix release --env=qa'"
|
|
1736
|
-
].each do |cmd|
|
|
1737
|
-
execute_command cmd
|
|
1738
|
-
end
|
|
1739
|
-
|
|
1740
|
-
artifact_path = Dir.glob("_build/qa/rel/backend/releases/*/backend.tar.gz").first
|
|
1741
|
-
upload_artifact(artifact_path, "microservices/borat/#{revision}-#{deploy_id}-qa.tar.gz", "#{@s3_bucket}-encrypted")
|
|
1742
|
-
|
|
1743
|
-
Dir.chdir '../../'
|
|
1744
|
-
end
|
|
1745
|
-
|
|
1746
|
-
def create_backoffice_artifact(revision, deploy_id)
|
|
1747
|
-
output "Preparo l'artifact backoffice .zip\n".yellow
|
|
1748
|
-
|
|
1749
|
-
git_checkout_version('backoffice', revision)
|
|
1750
|
-
|
|
1751
|
-
Dir.chdir 'projects/backoffice'
|
|
1752
|
-
|
|
1753
|
-
['node_modules'].each do |dir|
|
|
1754
|
-
unless File.directory?(dir)
|
|
1755
|
-
if File.directory?("../../../backoffice/#{dir}")
|
|
1756
|
-
exec_step "rsync -a ../../../backoffice/#{dir} ."
|
|
1757
|
-
end
|
|
1758
|
-
end
|
|
1759
|
-
end
|
|
1760
|
-
|
|
1761
|
-
stack_name_web = "ecs-task-web-qa-notneeded"
|
|
1762
|
-
web_qa_host = get_route53_hostname(stack_name_web)
|
|
1763
|
-
webri_qa_host = web_qa_host.sub("www", "wwwri")
|
|
1764
|
-
|
|
1765
|
-
[
|
|
1766
|
-
"docker-compose build workers",
|
|
1767
|
-
"rm -rf src/ && git checkout -- .",
|
|
1768
|
-
"cd ../../ && docker run -e GIT_DIR=$PWD -v $PWD:/usr/app/src -w /usr/app/src/projects/backoffice blinkmobile/bower install --allow-root",
|
|
1769
|
-
"docker run -v $PWD:/code -w /code -e PHANTOMJS_BIN=/code/node_modules/grunt-selenium-webdriver/node_modules/phantomjs/bin/phantomjs --entrypoint /bin/bash backoffice_workers '-c' 'sed -i \"s/web-qa-url/#{web_qa_host}/g\" Gruntfile.js && sed -i \"s/web-qa-ri-url/#{webri_qa_host}/g\" Gruntfile.js && npm install && grunt qa'"
|
|
1770
|
-
].each do |cmd|
|
|
1771
|
-
execute_command cmd
|
|
1772
|
-
end
|
|
1773
|
-
|
|
1774
|
-
artifact_path = '/tmp/backoffice.zip'
|
|
1775
|
-
exec_step "rm -f #{artifact_path} && zip -9 -r #{artifact_path} bin/"
|
|
1776
|
-
upload_artifact(artifact_path, "backoffice/#{revision}-#{deploy_id}.zip")
|
|
1777
|
-
|
|
1778
|
-
Dir.chdir '../../'
|
|
1779
|
-
end
|
|
1780
|
-
|
|
1781
|
-
def create_prima_artifact(revision, branch_name, deploy_id)
|
|
1782
|
-
output "Preparo l'artifact prima .zip\n".yellow
|
|
1783
|
-
|
|
1784
|
-
git_checkout_version('prima', revision)
|
|
1785
|
-
|
|
1786
|
-
Dir.chdir 'projects/prima'
|
|
1787
|
-
|
|
1788
|
-
['vendor'].each do |dir|
|
|
1789
|
-
unless File.directory?(dir)
|
|
1790
|
-
if File.directory?("../../../prima/#{dir}")
|
|
1791
|
-
exec_step "rsync -a ../../../prima/#{dir} ."
|
|
1792
|
-
end
|
|
1793
|
-
end
|
|
1794
|
-
end
|
|
1795
|
-
|
|
1796
|
-
backoffice_qa_host = get_route53_hostname("ecs-task-borat-qa-notneeded")
|
|
1797
|
-
web_qa_host = get_route53_hostname("ecs-task-web-qa-notneeded")
|
|
1798
|
-
assange_qa_host = get_route53_hostname("ecs-task-assange-qa-notneeded")
|
|
1799
|
-
|
|
1800
|
-
[
|
|
1801
|
-
"bin/local_build_artifact.sh #{branch_name} #{web_qa_host} #{backoffice_qa_host} #{assange_qa_host} #{deploy_id} #{'update' if @deploy_update}"
|
|
1802
|
-
].each do |cmd|
|
|
1803
|
-
execute_command cmd
|
|
1804
|
-
end
|
|
1805
|
-
|
|
1806
|
-
Dir.chdir "../../"
|
|
1807
|
-
end
|
|
1808
|
-
|
|
1809
|
-
def git_checkout_version(project, revision)
|
|
1810
|
-
Dir.chdir "projects/#{project}"
|
|
1811
|
-
exec_step "git checkout -- . && git checkout #{revision}"
|
|
1812
|
-
Dir.chdir "../../"
|
|
1813
|
-
end
|
|
1814
|
-
|
|
1815
|
-
def create_asg_stack(stack_name, tags = [])
|
|
1816
|
-
stack_body = IO.read('cloudformation/stacks/asg/ecs-asg-allinone.yml')
|
|
1817
|
-
parameters = [
|
|
1818
|
-
{
|
|
1819
|
-
parameter_key: "Environment",
|
|
1820
|
-
parameter_value: "qa"
|
|
1821
|
-
},
|
|
1822
|
-
{
|
|
1823
|
-
parameter_key: "InstanceType",
|
|
1824
|
-
parameter_value: "t2.large"
|
|
1825
|
-
},
|
|
1826
|
-
{
|
|
1827
|
-
parameter_key: "ECSClusterName",
|
|
1828
|
-
parameter_value: @ecs_cluster_name
|
|
1829
|
-
}
|
|
1830
|
-
]
|
|
1831
|
-
create_stack(stack_name, stack_body, parameters, tags)
|
|
1832
|
-
end
|
|
1833
|
-
|
|
1834
|
-
def create_cluster_stack(stack_name, tags = [])
|
|
1835
|
-
stack_body = IO.read('cloudformation/stacks/ecs-cluster.yml')
|
|
1836
|
-
create_stack(stack_name, stack_body, [], tags)
|
|
1837
678
|
end
|
|
1838
679
|
|
|
1839
680
|
def update_cluster_stack(stack_name, tags = [])
|
|
@@ -1841,84 +682,13 @@ class Release
|
|
|
1841
682
|
update_stack(stack_name, stack_body, [], tags)
|
|
1842
683
|
end
|
|
1843
684
|
|
|
1844
|
-
def create_alb_stack(stack_name, role)
|
|
1845
|
-
stack_body = IO.read('cloudformation/stacks/alb/ecs-alb-public.yml')
|
|
1846
|
-
parameters = [
|
|
1847
|
-
{
|
|
1848
|
-
parameter_key: "Environment",
|
|
1849
|
-
parameter_value: "qa"
|
|
1850
|
-
},
|
|
1851
|
-
{
|
|
1852
|
-
parameter_key: "Role",
|
|
1853
|
-
parameter_value: role
|
|
1854
|
-
}
|
|
1855
|
-
]
|
|
1856
|
-
create_stack(stack_name, stack_body, parameters)
|
|
1857
|
-
end
|
|
1858
|
-
|
|
1859
|
-
def import_redis_crash(qa_ip_address)
|
|
1860
|
-
output "Importo dump di Redis da staging\n".yellow
|
|
1861
|
-
|
|
1862
|
-
redis_qa = Redis.new(:url => "redis://#{qa_ip_address}:6379/10")
|
|
1863
|
-
|
|
1864
|
-
return unless redis_qa.keys('CODICI').empty?
|
|
1865
|
-
|
|
1866
|
-
redis_staging = Redis.new(:url => 'redis://staging.cache-1.prima.it:6379/10')
|
|
1867
|
-
|
|
1868
|
-
dump_staging = redis_staging.dump 'CODICI'
|
|
1869
|
-
|
|
1870
|
-
redis_qa.restore 'CODICI', 0, dump_staging
|
|
1871
|
-
end
|
|
1872
|
-
|
|
1873
|
-
def import_dbs(ip_address)
|
|
1874
|
-
resp = @ecs.run_task({
|
|
1875
|
-
cluster: @ecs_cluster_name,
|
|
1876
|
-
task_definition: @import_db_task,
|
|
1877
|
-
overrides: {
|
|
1878
|
-
container_overrides: [
|
|
1879
|
-
{
|
|
1880
|
-
name: 'dbrestore',
|
|
1881
|
-
environment: [
|
|
1882
|
-
{
|
|
1883
|
-
name: 'EC2_IP_ADDRESS',
|
|
1884
|
-
value: ip_address
|
|
1885
|
-
}
|
|
1886
|
-
]
|
|
1887
|
-
}
|
|
1888
|
-
]
|
|
1889
|
-
},
|
|
1890
|
-
count: 1
|
|
1891
|
-
})
|
|
1892
|
-
output "Attendo che i DB vengano importati...\n".yellow
|
|
1893
|
-
stopped_at = nil
|
|
1894
|
-
while stopped_at.nil?
|
|
1895
|
-
unless resp.tasks[0].nil?
|
|
1896
|
-
resp = @ecs.describe_tasks({
|
|
1897
|
-
cluster: @ecs_cluster_name,
|
|
1898
|
-
tasks: [resp.tasks[0].task_arn]
|
|
1899
|
-
})
|
|
1900
|
-
end
|
|
1901
|
-
stopped_at = resp.tasks[0].stopped_at unless resp.tasks[0].nil?
|
|
1902
|
-
sleep_seconds = 10
|
|
1903
|
-
seconds_elapsed = 0
|
|
1904
|
-
while true && stopped_at.nil?
|
|
1905
|
-
break if seconds_elapsed >= sleep_seconds
|
|
1906
|
-
print '.'.yellow; STDOUT.flush
|
|
1907
|
-
sleep 1
|
|
1908
|
-
seconds_elapsed += 1
|
|
1909
|
-
end
|
|
1910
|
-
end
|
|
1911
|
-
print "\n"
|
|
1912
|
-
end
|
|
1913
|
-
|
|
1914
685
|
def choose_branch_to_deploy(project_name, select_master = false)
|
|
1915
|
-
return {} if project_name == 'crash' && select_master
|
|
1916
686
|
Dir.chdir "projects/#{project_name}"
|
|
1917
687
|
output "Recupero la lista dei branch del progetto #{project_name}..."
|
|
1918
688
|
`git remote prune origin`
|
|
1919
689
|
out = %x[ git fetch ]
|
|
1920
690
|
branches = %x[ git for-each-ref --sort=-committerdate refs/remotes/ --format='%(refname) %(objectname) %(committeremail)' | sed 's/refs\\/remotes\\/origin\\///g' ]
|
|
1921
|
-
.split("\n").delete_if { |b| b.include?('HEAD')
|
|
691
|
+
.split("\n").delete_if { |b| b.include?('HEAD') }[0..49]
|
|
1922
692
|
|
|
1923
693
|
master_branch = nil
|
|
1924
694
|
|
|
@@ -1927,16 +697,20 @@ class Release
|
|
|
1927
697
|
break unless master_branch.nil?
|
|
1928
698
|
end
|
|
1929
699
|
|
|
1930
|
-
if select_master
|
|
700
|
+
if select_master || branches.length == 1
|
|
1931
701
|
branch_name = master_branch
|
|
1932
702
|
else
|
|
703
|
+
branches.insert(0, branches.delete(master_branch))
|
|
1933
704
|
branch_name = choose do |menu|
|
|
1934
705
|
menu.prompt = "Scegli il branch di #{project_name} da deployare: ".cyan
|
|
1935
706
|
menu.shell = true
|
|
1936
707
|
|
|
1937
|
-
|
|
708
|
+
git_mail = get_git_mail
|
|
709
|
+
|
|
710
|
+
branches.each_with_index do |branch, index|
|
|
1938
711
|
title = @prima.reduce_size(branch, 100)
|
|
1939
|
-
msg =
|
|
712
|
+
msg = index.odd? ? title.white : title.light_yellow # uno bianco e uno giallo alternati
|
|
713
|
+
msg = branch.include?(git_mail) ? msg.on_blue : msg.on_black # i branch aggiornati da chi lancia la creazione sono su sfondo blu
|
|
1940
714
|
menu.choice(msg) { branch }
|
|
1941
715
|
menu.default = branch if branch == master_branch
|
|
1942
716
|
end
|
|
@@ -1948,7 +722,7 @@ class Release
|
|
|
1948
722
|
name = branch_name.split(' ')[0]
|
|
1949
723
|
revision = branch_name.split(' ')[1]
|
|
1950
724
|
committer_email = branch_name.split(' ')[2].tr('<>', '')
|
|
1951
|
-
{ name
|
|
725
|
+
{ 'name' => name, 'revision' => revision[0..14], 'committer' => committer_email, 'default_branch' => select_master }
|
|
1952
726
|
end
|
|
1953
727
|
|
|
1954
728
|
def select_branch_to_deploy(project_name, branch_name)
|
|
@@ -1957,41 +731,14 @@ class Release
|
|
|
1957
731
|
`git remote prune origin`
|
|
1958
732
|
out = %x[ git fetch ]
|
|
1959
733
|
branch_name = %x[ git for-each-ref --sort=-committerdate refs/remotes/ --format='%(refname) %(objectname) %(committeremail)' | sed 's/refs\\/remotes\\/origin\\///g' ]
|
|
1960
|
-
.split("\n").delete_if { |b| !b.
|
|
734
|
+
.split("\n").delete_if { |b| !b.match("^#{Regexp.escape(branch_name)}") }[0..49]
|
|
1961
735
|
.first
|
|
1962
736
|
|
|
1963
737
|
Dir.chdir "../../"
|
|
1964
738
|
name = branch_name.split(' ')[0]
|
|
1965
739
|
revision = branch_name.split(' ')[1]
|
|
1966
740
|
committer_email = branch_name.split(' ')[2].tr('<>', '')
|
|
1967
|
-
{ name
|
|
1968
|
-
end
|
|
1969
|
-
|
|
1970
|
-
def is_branch_compatible_with_current_twig_version?(project)
|
|
1971
|
-
case
|
|
1972
|
-
when project == 'prima'
|
|
1973
|
-
File.readlines("app/config/config_qa.yml").grep(/replaceme-assange.qa.staging.colaster.com/).size > 0
|
|
1974
|
-
when project == 'urania'
|
|
1975
|
-
File.readlines("deploy/deploy").grep(/HOSTNAME_PATTERN/).size > 0
|
|
1976
|
-
when project == 'backoffice'
|
|
1977
|
-
File.readlines("deploy/deploy.sh").grep(/HOSTNAME_PATTERN/).size > 0
|
|
1978
|
-
when project == 'bburago'
|
|
1979
|
-
File.readlines("deploy/deploy").grep(/HOSTNAME_PATTERN/).size > 0
|
|
1980
|
-
when project == 'hal9000'
|
|
1981
|
-
File.readlines("deploy/deploy").grep(/HOSTNAME_PATTERN/).size > 0
|
|
1982
|
-
when project == 'fidaty'
|
|
1983
|
-
File.readlines("deploy/deploy").grep(/HOSTNAME_PATTERN/).size > 0
|
|
1984
|
-
when project == 'peano'
|
|
1985
|
-
File.readlines("deploy/deploy").grep(/HOSTNAME_PATTERN/).size > 0
|
|
1986
|
-
when project == 'assange'
|
|
1987
|
-
File.readlines("deploy/deploy").grep(/HOSTNAME_PATTERN/).size > 0
|
|
1988
|
-
when project == 'borat'
|
|
1989
|
-
File.readlines("deploy/deploy").grep(/HOSTNAME_PATTERN/).size > 0
|
|
1990
|
-
when project == 'crash'
|
|
1991
|
-
File.readlines("deploy/deploy").grep(/HOSTNAME_PATTERN/).size > 0
|
|
1992
|
-
when project == 'ermes'
|
|
1993
|
-
File.readlines("deploy/deploy").grep(/HOSTNAME_PATTERN/).size > 0
|
|
1994
|
-
end
|
|
741
|
+
{ 'name' => name, 'revision' => revision[0..14], 'committer' => committer_email }
|
|
1995
742
|
end
|
|
1996
743
|
|
|
1997
744
|
def get_stacks()
|
|
@@ -2006,87 +753,32 @@ class Release
|
|
|
2006
753
|
return stack_list, envs
|
|
2007
754
|
end
|
|
2008
755
|
|
|
2009
|
-
def
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
logical_resource_id: 'JobDefinition'
|
|
2017
|
-
})
|
|
2018
|
-
|
|
2019
|
-
@batch.submit_job({
|
|
2020
|
-
job_name: "marley-#{@dns_record_identifier}", # required
|
|
2021
|
-
job_queue: "marley", # required
|
|
2022
|
-
job_definition: resp.stack_resource_detail.physical_resource_id, # required
|
|
2023
|
-
container_overrides: {
|
|
2024
|
-
environment: [
|
|
2025
|
-
{
|
|
2026
|
-
name: 'PRIMA_URL',
|
|
2027
|
-
value: "https://#{prima_hostname}/"
|
|
2028
|
-
},
|
|
2029
|
-
{
|
|
2030
|
-
name: 'PRIMA_IP',
|
|
2031
|
-
value: ip_address
|
|
2032
|
-
},
|
|
2033
|
-
{
|
|
2034
|
-
name: 'PROJECTS_JSON',
|
|
2035
|
-
value: @projects.to_json
|
|
2036
|
-
},
|
|
2037
|
-
{
|
|
2038
|
-
name: 'BACKOFFICE_URL',
|
|
2039
|
-
value: "https://#{borat_hostname}"
|
|
2040
|
-
}
|
|
2041
|
-
]
|
|
2042
|
-
}
|
|
2043
|
-
})
|
|
2044
|
-
|
|
2045
|
-
output "Marley lanciato con successo!\n".green
|
|
2046
|
-
end
|
|
2047
|
-
|
|
2048
|
-
def get_currently_deployed_version(stack_name)
|
|
2049
|
-
parameters = get_stack_parameters(stack_name)
|
|
2050
|
-
currently_deployed_version = nil
|
|
2051
|
-
parameters.each do |parameter|
|
|
2052
|
-
if parameter.parameter_key == "ReleaseVersion"
|
|
2053
|
-
currently_deployed_version = parameter.parameter_value
|
|
756
|
+
def get_clusters()
|
|
757
|
+
envs = {}
|
|
758
|
+
cluster_list = cluster_list()
|
|
759
|
+
cluster_list.each do |stack|
|
|
760
|
+
unless stack.stack_name.match(/spotfleet-allinone-qa-(\w+)$/)
|
|
761
|
+
env_hash = stack.stack_name.match(/qa-(\w+)$/)[0]
|
|
762
|
+
envs[env_hash] = stack.tags unless envs.has_key?(env_hash) || stack.tags.empty?
|
|
2054
763
|
end
|
|
2055
764
|
end
|
|
2056
|
-
|
|
765
|
+
return cluster_list, envs
|
|
2057
766
|
end
|
|
2058
767
|
|
|
2059
|
-
def
|
|
2060
|
-
|
|
2061
|
-
[
|
|
2062
|
-
"docker pull #{docker_image}",
|
|
2063
|
-
"docker run -t --rm -v $HOME/.aws:/root/.aws -v $PWD:$PWD -w $PWD #{docker_image}"
|
|
2064
|
-
].each do |cmd|
|
|
2065
|
-
execute_command cmd
|
|
2066
|
-
end
|
|
768
|
+
def hostname_pattern_priority()
|
|
769
|
+
(Time.now.to_i.to_s[-4..-1].to_i + Random.rand(40000)).to_s
|
|
2067
770
|
end
|
|
2068
771
|
|
|
2069
|
-
def select_branches(
|
|
772
|
+
def select_branches(project_names = nil)
|
|
2070
773
|
output "Deploy feature menu"
|
|
2071
|
-
if
|
|
2072
|
-
@projects[
|
|
2073
|
-
@projects["backoffice"] = choose_branch_to_deploy('backoffice')
|
|
2074
|
-
@projects["urania"] = choose_branch_to_deploy('urania')
|
|
2075
|
-
@projects["ermes"] = choose_branch_to_deploy('ermes')
|
|
2076
|
-
@projects["bburago"] = choose_branch_to_deploy('bburago')
|
|
2077
|
-
@projects["hal9000"] = choose_branch_to_deploy('hal9000')
|
|
2078
|
-
@projects["fidaty"] = choose_branch_to_deploy('fidaty')
|
|
2079
|
-
@projects["peano"] = choose_branch_to_deploy('peano')
|
|
2080
|
-
@projects["rogoreport"] = choose_branch_to_deploy('rogoreport')
|
|
2081
|
-
@projects["assange"] = choose_branch_to_deploy('assange')
|
|
2082
|
-
@projects["borat"] = choose_branch_to_deploy('borat')
|
|
2083
|
-
@projects["bolla"] = choose_branch_to_deploy('bolla')
|
|
2084
|
-
@projects['crash'] = choose_branch_to_deploy('crash')
|
|
774
|
+
if project_names.nil?
|
|
775
|
+
@projects.each{ |key, value| @projects[key] = choose_branch_to_deploy(key) }
|
|
2085
776
|
else
|
|
2086
|
-
|
|
2087
|
-
|
|
777
|
+
project_names.each do |project|
|
|
778
|
+
@projects[project] = choose_branch_to_deploy(project)
|
|
779
|
+
end
|
|
2088
780
|
@projects.each_key do |branch_project|
|
|
2089
|
-
@projects[branch_project] = choose_branch_to_deploy(branch_project, true) unless branch_project
|
|
781
|
+
@projects[branch_project] = choose_branch_to_deploy(branch_project, true) unless project_names.include? branch_project
|
|
2090
782
|
end
|
|
2091
783
|
end
|
|
2092
784
|
end
|
|
@@ -2113,6 +805,12 @@ Description
|
|
|
2113
805
|
|
|
2114
806
|
start creates a new feature branch
|
|
2115
807
|
finish finishes the feature by merging to dev and master
|
|
808
|
+
qainit deploys a new environment with selected branches from every project
|
|
809
|
+
qainit $PROJECT_NAME deploys a new environment allowing to selected a branch from the input project (everything else is master)
|
|
810
|
+
qainit shutdown deletes a specific qa environment
|
|
811
|
+
|
|
812
|
+
Available only to devops (from artemide)
|
|
813
|
+
-----------
|
|
2116
814
|
deploy deploys the feature branch to a temporary AWS Elastic Beanstalk env
|
|
2117
815
|
deploy stop destroys the AWS Elastic Beanstalk env
|
|
2118
816
|
deploy update updates a feature branch with current branches
|
|
@@ -2132,4 +830,11 @@ if args.include?('--help')
|
|
|
2132
830
|
exit
|
|
2133
831
|
end
|
|
2134
832
|
|
|
2135
|
-
|
|
833
|
+
gem_update = true
|
|
834
|
+
if args.include?('no-gem-update')
|
|
835
|
+
gem_update = false
|
|
836
|
+
end
|
|
837
|
+
|
|
838
|
+
args.delete('no-gem-update')
|
|
839
|
+
|
|
840
|
+
Release.new(gem_update).execute!(args)
|