generated from ministryofjustice/hmpps-template-kotlin
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdeployment.puml
125 lines (91 loc) · 5.32 KB
/
deployment.puml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
@startuml deployment
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
!define SPRITESURL https://raw.githubusercontent.com/plantuml-stdlib/gilbarbara-plantuml-sprites/master/sprites
!includeurl SPRITESURL/helm.puml
!includeurl SPRITESURL/slack-icon.puml
!includeurl SPRITESURL/docker-icon.puml
!includeurl SPRITESURL/github-icon.puml
!includeurl SPRITESURL/gradle.puml
!includeurl SPRITESURL/kotlin.puml
!includeurl SPRITESURL/kubernetes.puml
'skinparam linetype polyline
Title [Deployment Flow] HMPPS Integration API
AddRelTag("subprocess", $textColor="#808080", $lineColor="#808080", $lineStyle = DashedLine())
!global $TEXT_HELMDEPLOY = "Configures hosting Kubernetes environment"
!global $TEXT_DOCKERBUILD = "Creates a built image for deployment"
!global $TEXT_APIPOD = "An instance of the API"
Person(engineer, "Engineer")
Boundary(local, "Local", "Developer Machine"){
Container(hmpps_integration_api, "HMPPS Integration API", "Local Branch", $sprite=kotlin*0.4)
}
Container(git, "Source Control", "Git", $sprite=github-icon*0.6)
Boundary(circleci, "CircleCI", "Deployment Pipeline"){
Boundary(checks, "Code Checks"){
Container(lint, "Lint", "Gradle", $sprite=gradle*0.6)
Container(helm_lint, "Helm Lint", "Helm")
Container(unittest, "Unit Test", "Gradle", $sprite=gradle*0.6)
Container(smoketest, "Smoke Test", "Gradle", $sprite=gradle*0.6)
}
Boundary(dev_build_and_deploy, "Development"){
Container(dev_build, "Build", "Docker", $TEXT_DOCKERBUILD, $sprite=docker-icon*0.6)
Container(dev_helm, "Deploy", "Helm", $TEXT_HELMDEPLOY, $sprite=helm*0.6)
Boundary(dev_cp, "Cloud Platform Development", "Kubernetes"){
Container(dev_ecr, "Container Registry", "Elastic Container Registry (ECR)")
Boundary(dev_service, "Service", "Kubernetes"){
Container(hmpps_integration_api_dev_pod1, "HMPPS Integration API", "Pod", $TEXT_APIPOD, $sprite=kubernetes*0.4)
Container(hmpps_integration_api_dev_pod2, "HMPPS Integration API", "Pod", $TEXT_APIPOD, $sprite=kubernetes*0.4)
}
}
Container(dev_heartbeat, "Post-Deploy Heartbeat", "Bash")
}
Boundary(preprod_build_and_deploy, "Pre-Production"){
Container(preprod_build, "Build", "Docker", $TEXT_DOCKERBUILD, $sprite=docker-icon*0.6)
Container(preprod_helm, "Deploy", "Helm", $TEXT_HELMDEPLOY, $sprite=helm*0.6)
Boundary(preprod_cp, "Cloud Platform Production", "Kubernetes"){
Container(preprod_ecr, "Container Registry", "Elastic Container Registry (ECR)")
Boundary(preprod_service, "Service", "Kubernetes"){
Container(hmpps_integration_api_preprod_pod1, "HMPPS Integration API", "Pod", $TEXT_APIPOD, $sprite=kubernetes*0.4)
Container(hmpps_integration_api_preprod_pod2, "HMPPS Integration API", "Pod", $TEXT_APIPOD, $sprite=kubernetes*0.4)
}
}
Container(preprod_heartbeat, "Post-Deploy Heartbeat", "Bash")
}
Boundary(prod_build_and_deploy, "Production"){
Container(prod_build, "Build", "Docker", $TEXT_DOCKERBUILD, $sprite=docker-icon*0.6)
Container(prod_helm, "Deploy", "Helm", $TEXT_HELMDEPLOY, $sprite=helm*0.6)
Boundary(prod_cp, "Cloud Platform Production", "Kubernetes"){
Container(prod_ecr, "Container Registry", "Elastic Container Registry (ECR)")
Boundary(prod_service, "Service", "Kubernetes"){
Container(hmpps_integration_api_prod_pod1, "HMPPS Integration API", "Pod", $TEXT_APIPOD, $sprite=kubernetes*0.4)
Container(hmpps_integration_api_prod_pod2, "HMPPS Integration API", "Pod", $TEXT_APIPOD, $sprite=kubernetes*0.4)
}
}
Container(prod_heartbeat, "Post-Deploy Heartbeat", "Bash")
}
}
!global $TEXT_SUCCESS = "On success"
!global $TEXT_PUSHTO = "Pushes to"
Container(email, "Notification", "Slack", $sprite=slack-icon*0.6)
'RELATIONSHIPS
Rel(engineer, local, "Writes code")
Rel(hmpps_integration_api, git, "Committed to")
Rel(git, checks, "Automated pipeline integration")
Rel(checks, dev_build, $TEXT_SUCCESS)
Rel(dev_build, dev_ecr, $TEXT_PUSHTO, $tags=subprocess)
Rel(dev_helm, dev_service, $TEXT_PUSHTO, $tags=subprocess)
Rel_Right(dev_build, dev_helm, $TEXT_SUCCESS)
Rel(dev_cp, dev_heartbeat, $TEXT_SUCCESS)
Rel(dev_heartbeat, preprod_build, $TEXT_SUCCESS)
Rel(preprod_build, preprod_ecr, $TEXT_PUSHTO, $tags=subprocess)
Rel(preprod_helm, preprod_service, $TEXT_PUSHTO, $tags=subprocess)
Rel_Right(preprod_build, preprod_helm, $TEXT_SUCCESS)
Rel(preprod_cp, preprod_heartbeat, $TEXT_SUCCESS)
Rel(preprod_heartbeat, prod_build, $TEXT_SUCCESS)
Rel(prod_build, prod_ecr, $TEXT_PUSHTO, $tags=subprocess)
Rel(prod_helm, prod_service, $TEXT_PUSHTO, $tags=subprocess)
Rel_Right(prod_build, prod_helm, $TEXT_SUCCESS)
Rel(prod_cp, prod_heartbeat, $TEXT_SUCCESS)
Rel(circleci, email, "On stage(s) failed")
Lay_Right(unittest, smoketest)
SHOW_DYNAMIC_LEGEND()
@enduml