prima-twig 0.57.80 → 0.58.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/twig-feature +211 -2
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff28b1b9486c4cbde341d5bc91f554d24b9e72cf228190e51936c26d36204631
|
4
|
+
data.tar.gz: e4f36a3dced5f22aefcc98d9209ae1cb9f27a8a99399f0b5b8c85fb7e3220aaa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf51127d025c07a5f29161cd42e9d4a1c36df62061459d7ba63a846a69fb48b50219a2ed36fd944c88f37088372ebf79646f8fb0a997b82c946656d71f770b89
|
7
|
+
data.tar.gz: 9b707ff30d54b6c0535165cb69190460192e7e6a3a4df99830aa41e0242c6f7bda0ed0feba19bd0e3617195e314b9f8309ec11000b1df78017d1b2dd4561b1a7
|
data/bin/twig-feature
CHANGED
@@ -74,6 +74,8 @@ class Release
|
|
74
74
|
qainit_deploy_update!
|
75
75
|
elsif 'read' == args[1]
|
76
76
|
qainit_read_config! args[2]
|
77
|
+
elsif 'minimal' == args[1]
|
78
|
+
qainit_minimal_deploy! args[2]
|
77
79
|
else
|
78
80
|
if args[1]
|
79
81
|
select_branches(args[1..-1])
|
@@ -98,6 +100,8 @@ class Release
|
|
98
100
|
deploy_update!
|
99
101
|
elsif 'lock' == args[1]
|
100
102
|
deploy_lock!
|
103
|
+
elsif 'minimal' == args[1]
|
104
|
+
qainit_drone_minimal_deploy!
|
101
105
|
else
|
102
106
|
if args[1]
|
103
107
|
select_branches(args[1])
|
@@ -490,6 +494,35 @@ class Release
|
|
490
494
|
git checkout master`
|
491
495
|
end
|
492
496
|
|
497
|
+
def qainit_minimal_deploy!(project)
|
498
|
+
abort('L\'unico progetto permesso è prima') unless ['prima'].include? project
|
499
|
+
project_definition = choose_branch_to_deploy(project)
|
500
|
+
|
501
|
+
`git checkout master && git pull && git remote prune origin`
|
502
|
+
|
503
|
+
default_name = project_definition[:name]
|
504
|
+
output "Inserisci la feature a cui si riferisce il QA: [#{default_name}]".cyan
|
505
|
+
feature_number = String(STDIN.gets.chomp)
|
506
|
+
feature_number = default_name if feature_number.empty?
|
507
|
+
|
508
|
+
if `git branch -l | grep #{feature_number}`.size > 0
|
509
|
+
`git checkout #{feature_number} && git pull`
|
510
|
+
else
|
511
|
+
`git checkout -b #{feature_number}`
|
512
|
+
end
|
513
|
+
|
514
|
+
# così recupero le informazioni sul branch, poi vado a scrivere il file branch_names con una sola riga
|
515
|
+
branch = {'project' => { 'name' => project_definition[:name], 'revision' => project_definition[:revision], 'default_branch' => project_definition[:default_branch]}}
|
516
|
+
|
517
|
+
File.open('branch_names', 'w') { |file| file.write(JSON.generate(branch)) }
|
518
|
+
|
519
|
+
`git add projects && \
|
520
|
+
git add branch_names && \
|
521
|
+
git commit -m 'minimal_#{feature_number}' && \
|
522
|
+
git push --set-upstream origin #{feature_number} && \
|
523
|
+
git checkout master`
|
524
|
+
end
|
525
|
+
|
493
526
|
def qainit_deploy_update!
|
494
527
|
`git checkout master && git pull`
|
495
528
|
# cancelliamo tutti i branch che non sono più sul repo remoto
|
@@ -528,7 +561,11 @@ class Release
|
|
528
561
|
|
529
562
|
File.open('branch_names', 'w') { |file| file.write(JSON.generate(@projects)) }
|
530
563
|
|
531
|
-
`git
|
564
|
+
if `git log -1` =~ /minimal_/
|
565
|
+
`git commit -am 'minimal_update'`
|
566
|
+
else
|
567
|
+
`git commit -am 'update'`
|
568
|
+
end
|
532
569
|
`git push && git checkout master`
|
533
570
|
end
|
534
571
|
|
@@ -636,6 +673,9 @@ class Release
|
|
636
673
|
when 'shutdown'
|
637
674
|
output 'Shutting down'.green
|
638
675
|
qainit_drone_shutdown!
|
676
|
+
when 'minimal'
|
677
|
+
output 'Starting minimal deploy'.green
|
678
|
+
qainit_drone_minimal_deploy!
|
639
679
|
else
|
640
680
|
output 'Starting standard deploy'.green
|
641
681
|
deploy_feature!
|
@@ -647,6 +687,7 @@ class Release
|
|
647
687
|
`mkdir -p cloudformation/stacks/task cloudformation/stacks/route53 cloudformation/stacks/asg cloudformation/stacks/elb`
|
648
688
|
@s3.get_object({bucket: "prima-deploy", key: 'cloudformation/stacks/task/db.yml', response_target: 'cloudformation/stacks/task/db.yml'})
|
649
689
|
@s3.get_object({bucket: "prima-deploy", key: 'cloudformation/stacks/route53/qa.yml', response_target: 'cloudformation/stacks/route53/qa.yml'})
|
690
|
+
@s3.get_object({bucket: "prima-deploy", key: 'cloudformation/stacks/route53/minimal_qa.yml', response_target: 'cloudformation/stacks/route53/minimal_qa.yml'})
|
650
691
|
@s3.get_object({bucket: "prima-deploy", key: 'cloudformation/stacks/asg/ecs-asg-allinone.yml', response_target: 'cloudformation/stacks/asg/ecs-asg-allinone.yml'})
|
651
692
|
@s3.get_object({bucket: "prima-deploy", key: 'cloudformation/stacks/ecs-cluster.yml', response_target: 'cloudformation/stacks/ecs-cluster.yml'})
|
652
693
|
@s3.get_object({bucket: "prima-deploy", key: 'cloudformation/stacks/elb/alb-public-qa.yml', response_target: 'cloudformation/stacks/elb/alb-public-qa.yml'})
|
@@ -661,6 +702,173 @@ class Release
|
|
661
702
|
end
|
662
703
|
end
|
663
704
|
|
705
|
+
def qainit_drone_minimal_deploy!
|
706
|
+
# tenere solo il project da deployare (l'unico project è prima)
|
707
|
+
@ami_id = get_ami_id("ecs-fleet-allinone-staging")
|
708
|
+
project = ''
|
709
|
+
@projects.each_key do |project_key|
|
710
|
+
if @projects[project_key]['revision']
|
711
|
+
project = project_key
|
712
|
+
git_checkout_version(project_key, @projects[project_key]['revision'])
|
713
|
+
end
|
714
|
+
end
|
715
|
+
deploy_id = get_deploy_id
|
716
|
+
|
717
|
+
@git_branch = ENV['DRONE_BRANCH']
|
718
|
+
@dns_record_identifier = deploy_id
|
719
|
+
hostname_pattern_priority = hostname_pattern_priority()
|
720
|
+
tags = [
|
721
|
+
{
|
722
|
+
key: "qainit",
|
723
|
+
value: @git_branch
|
724
|
+
},
|
725
|
+
{
|
726
|
+
key: project,
|
727
|
+
value: @projects[project]['name']
|
728
|
+
},
|
729
|
+
{
|
730
|
+
key: "hostname_pattern_priority",
|
731
|
+
value: hostname_pattern_priority
|
732
|
+
}
|
733
|
+
]
|
734
|
+
|
735
|
+
cluster_stack_name = "ecs-cluster-qa-#{deploy_id}"
|
736
|
+
|
737
|
+
if stack_exists?(cluster_stack_name)
|
738
|
+
tags = get_stack_tags(cluster_stack_name)
|
739
|
+
hostname_pattern_priority = tags.detect do |tag|
|
740
|
+
tag.key == 'hostname_pattern_priority'
|
741
|
+
end.value
|
742
|
+
end
|
743
|
+
|
744
|
+
stack_name_alb = @base_stack_name_alb + deploy_id[0..5]
|
745
|
+
stack_name_alb_ws = @base_stack_name_alb_ws + deploy_id[0..5]
|
746
|
+
|
747
|
+
create_cluster_stack(cluster_stack_name, tags) unless stack_exists?(cluster_stack_name)
|
748
|
+
wait_for_stack_ready(cluster_stack_name) unless stack_ready?(cluster_stack_name)
|
749
|
+
|
750
|
+
create_alb_stack(stack_name_alb, "http", deploy_id, 'qa-minimal') unless stack_exists?(stack_name_alb)
|
751
|
+
create_alb_stack(stack_name_alb_ws, "websocket", deploy_id, 'qa-minimal') unless stack_exists?(stack_name_alb_ws)
|
752
|
+
|
753
|
+
resp = describe_stack_resource(cluster_stack_name, 'ECSCluster')
|
754
|
+
@ecs_cluster_name = resp.stack_resource_detail.physical_resource_id
|
755
|
+
|
756
|
+
asg_stack_name = "ecs-asg-allinone-qa-#{deploy_id}"
|
757
|
+
create_asg_stack(asg_stack_name, tags) unless stack_exists?(asg_stack_name)
|
758
|
+
|
759
|
+
deploy_id = get_deploy_id
|
760
|
+
create_pyxis_artifact(@projects["pyxis-npm"]['revision'], deploy_id)
|
761
|
+
create_prima_artifact(@projects["prima"]['revision'], @projects["prima"]['name'], deploy_id, true) unless artifact_exists?('prima-artifacts-encrypted', "prima/#{@projects["prima"]['revision']}.tar.gz")
|
762
|
+
|
763
|
+
wait_for_stack_ready(stack_name_alb) unless stack_ready?(stack_name_alb)
|
764
|
+
wait_for_stack_ready(stack_name_alb_ws) unless stack_ready?(stack_name_alb_ws)
|
765
|
+
|
766
|
+
stack_name_route53 = "ecs-route53-qa-#{deploy_id}"
|
767
|
+
stack_body = IO.read('cloudformation/stacks/route53/minimal_qa.yml')
|
768
|
+
parameters = [
|
769
|
+
{
|
770
|
+
parameter_key: "DnsRecordIdentifier",
|
771
|
+
parameter_value: @dns_record_identifier
|
772
|
+
},
|
773
|
+
{
|
774
|
+
parameter_key: "PrimaElbHostname",
|
775
|
+
parameter_value: get_alb_host(stack_name_alb)
|
776
|
+
},
|
777
|
+
{
|
778
|
+
parameter_key: 'CrashElbHostname',
|
779
|
+
parameter_value: get_alb_host(stack_name_alb_ws)
|
780
|
+
}
|
781
|
+
]
|
782
|
+
|
783
|
+
create_stack(stack_name_route53, stack_body, parameters, tags, @cf_role) unless stack_exists?(stack_name_route53)
|
784
|
+
wait_for_stack_ready(stack_name_route53) unless stack_ready?(stack_name_route53)
|
785
|
+
|
786
|
+
stack_name_web = "ecs-task-web-qa-#{deploy_id}"
|
787
|
+
git_checkout_version('prima', @projects["prima"]['revision'])
|
788
|
+
stack_body = IO.read('projects/prima/app/cloudformation/tasks/web.yml')
|
789
|
+
parameters = [
|
790
|
+
{
|
791
|
+
parameter_key: "Environment",
|
792
|
+
parameter_value: "qa-minimal"
|
793
|
+
},
|
794
|
+
{
|
795
|
+
parameter_key: "ReleaseVersion",
|
796
|
+
parameter_value: "#{@projects["prima"]['revision']}"
|
797
|
+
},
|
798
|
+
{
|
799
|
+
parameter_key: "TaskDesiredCount",
|
800
|
+
parameter_value: "1"
|
801
|
+
},
|
802
|
+
{
|
803
|
+
parameter_key: "ECSClusterName",
|
804
|
+
parameter_value: @ecs_cluster_name
|
805
|
+
},
|
806
|
+
{
|
807
|
+
parameter_key: "ALBShortName",
|
808
|
+
parameter_value: "web-qa-#{deploy_id}"[0..27]
|
809
|
+
},
|
810
|
+
{
|
811
|
+
parameter_key: "WebQaBaseHostname",
|
812
|
+
parameter_value: "#{@dns_record_identifier}.qa.colaster.com"
|
813
|
+
},
|
814
|
+
{
|
815
|
+
parameter_key: "HostnamePattern",
|
816
|
+
parameter_value: "ww*-#{@dns_record_identifier}.qa.colaster.com"
|
817
|
+
},
|
818
|
+
{
|
819
|
+
parameter_key: "HostnamePatternPriority",
|
820
|
+
parameter_value: hostname_pattern_priority
|
821
|
+
},
|
822
|
+
{
|
823
|
+
parameter_key: "HostnamePatternAggregatorPriority",
|
824
|
+
parameter_value: (hostname_pattern_priority.to_i + 1).to_s
|
825
|
+
},
|
826
|
+
{
|
827
|
+
parameter_key: "EnvHash",
|
828
|
+
parameter_value: deploy_id
|
829
|
+
},
|
830
|
+
{
|
831
|
+
parameter_key: "AssangeHostname",
|
832
|
+
parameter_value: "assange-#{@dns_record_identifier}.qa.colaster.com"
|
833
|
+
},
|
834
|
+
{
|
835
|
+
parameter_key: "BackofficeHostname",
|
836
|
+
parameter_value: "backoffice-#{@dns_record_identifier}.qa.colaster.com"
|
837
|
+
},
|
838
|
+
{
|
839
|
+
parameter_key: "WebHostname",
|
840
|
+
parameter_value: "www-#{@dns_record_identifier}.qa.colaster.com"
|
841
|
+
},
|
842
|
+
{
|
843
|
+
parameter_key: "FePrimaDomain",
|
844
|
+
parameter_value: "www-#{@dns_record_identifier}.qa.colaster.com"
|
845
|
+
},
|
846
|
+
{
|
847
|
+
parameter_key: "HostnamePattern",
|
848
|
+
parameter_value: "www-#{@dns_record_identifier}.qa.colaster.com"
|
849
|
+
}
|
850
|
+
]
|
851
|
+
if stack_exists?(stack_name_web)
|
852
|
+
cur_version = get_currently_deployed_version(stack_name_web)
|
853
|
+
update_stack(stack_name_web, stack_body, parameters, tags, @cf_role) unless cur_version.include?(@projects["prima"]['revision'])
|
854
|
+
else
|
855
|
+
create_stack(stack_name_web, stack_body, parameters, tags, @cf_role)
|
856
|
+
end
|
857
|
+
wait_for_stack_ready(stack_name_web) unless stack_ready?(stack_name_web)
|
858
|
+
update_service_defaults(stack_name_web)
|
859
|
+
prima_hostname = get_route53_hostname(stack_name_web)
|
860
|
+
|
861
|
+
projects_text = "
|
862
|
+
> Prima url: https://#{prima_hostname}
|
863
|
+
> SSH connection: ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no githubUsername@#{ec2_ip_address(asg_stack_name)}\n"
|
864
|
+
|
865
|
+
output projects_text.cyan
|
866
|
+
output "Deploy effettuato, everything is awesome!\n".green
|
867
|
+
if @qainit
|
868
|
+
qainit_write_output(projects_text, 'Indirizzi scritti su ')
|
869
|
+
end
|
870
|
+
end
|
871
|
+
|
664
872
|
def deploy_feature!
|
665
873
|
`git pull && git submodule init && git submodule update`
|
666
874
|
@ami_id = get_ami_id("ecs-fleet-allinone-staging")
|
@@ -2297,7 +2505,7 @@ class Release
|
|
2297
2505
|
Dir.chdir '../../'
|
2298
2506
|
end
|
2299
2507
|
|
2300
|
-
def create_prima_artifact(revision, branch_name, deploy_id)
|
2508
|
+
def create_prima_artifact(revision, branch_name, deploy_id, minimal = false)
|
2301
2509
|
output "Preparo l'artifact prima .zip\n".yellow
|
2302
2510
|
|
2303
2511
|
git_checkout_version('prima', revision)
|
@@ -2898,6 +3106,7 @@ Description
|
|
2898
3106
|
finish finishes the feature by merging to dev and master
|
2899
3107
|
qainit deploys a new environment with selected branches from every project
|
2900
3108
|
qainit $PROJECT_NAME deploys a new environment allowing to selected a branch from the input project (everything else is master)
|
3109
|
+
qainit minimal prima deploys a new copy of prima project, using staging microservices and database
|
2901
3110
|
qainit shutdown deletes a specific qa environment
|
2902
3111
|
|
2903
3112
|
Available only to devops (from artemide)
|