Skip to content

Commit 06d007c

Browse files
authored
Merge pull request #53 from CS3219-AY2425S1/feat/35-continuous-deployment
2 parents f62a4b2 + acdb1a4 commit 06d007c

File tree

5 files changed

+268
-27
lines changed

5 files changed

+268
-27
lines changed

.github/workflows/deploy.yml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
name: Deploy to GCP
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
8+
jobs:
9+
deploy:
10+
permissions:
11+
contents: "read"
12+
id-token: "write"
13+
14+
runs-on: ubuntu-latest
15+
steps:
16+
- uses: actions/checkout@v3
17+
18+
- id: "auth"
19+
name: "Authenticate to Google Cloud"
20+
uses: "google-github-actions/auth@v2"
21+
with:
22+
credentials_json: "${{ secrets.GCP_SA_KEY }}"
23+
24+
- name: "Set up Cloud SDK"
25+
uses: "google-github-actions/setup-gcloud@v2"
26+
27+
- name: "Use gcloud CLI"
28+
run: "gcloud info"
29+
30+
- name: "Trigger Cloud Build"
31+
run: "gcloud builds submit --config cloudbuild.yaml"

cloudbuild.yaml

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
steps:
2+
# Step 1: build and push all images to Artifact Registry
3+
4+
# Build and push peerprep-fe
5+
- name: "gcr.io/cloud-builders/docker"
6+
args:
7+
[
8+
"build",
9+
"-t",
10+
"asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/peerprep-fe:latest",
11+
"-f",
12+
"peerprep-fe/Dockerfile",
13+
"peerprep-fe",
14+
]
15+
16+
# Push the peerprep-fe image to Artifact Registry
17+
- name: "gcr.io/cloud-builders/docker"
18+
args:
19+
[
20+
"push",
21+
"asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/peerprep-fe:latest",
22+
]
23+
24+
# Build and push question-service
25+
- name: "gcr.io/cloud-builders/docker"
26+
args:
27+
[
28+
"build",
29+
"-t",
30+
"asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/question-svc:latest",
31+
"-f",
32+
"question-service/Dockerfile",
33+
"question-service",
34+
]
35+
36+
# Push the question-service image to Artifact Registry
37+
- name: "gcr.io/cloud-builders/docker"
38+
args:
39+
[
40+
"push",
41+
"asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/question-svc:latest",
42+
]
43+
44+
# Build and push user-service
45+
- name: "gcr.io/cloud-builders/docker"
46+
args:
47+
[
48+
"build",
49+
"-t",
50+
"asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/user-svc:latest",
51+
"-f",
52+
"user-service/Dockerfile",
53+
"user-service",
54+
]
55+
56+
# Push the user-service image to Artifact Registry
57+
- name: "gcr.io/cloud-builders/docker"
58+
args:
59+
[
60+
"push",
61+
"asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/user-svc:latest",
62+
]
63+
64+
# Step 2: Clean up and deploy to GKE
65+
66+
# Clean up before deploying peerprep-fe
67+
- name: "ubuntu"
68+
args: ["rm", "-rf", "output"]
69+
70+
# Deploy peerprep-fe to Google Kubernetes Engine (GKE)
71+
- name: "gcr.io/cloud-builders/gke-deploy"
72+
args:
73+
- run
74+
- --filename=k8s/peerprep-fe.yml
75+
- --image=asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/peerprep-fe:latest
76+
- --location=asia-southeast1
77+
- --cluster=cs3219-g11-peerprep-kubes
78+
79+
# Clean up before deploying question-service
80+
- name: "ubuntu"
81+
args: ["rm", "-rf", "output"]
82+
83+
# Deploy question-service to Google Kubernetes Engine (GKE)
84+
- name: "gcr.io/cloud-builders/gke-deploy"
85+
args:
86+
- run
87+
- --filename=k8s/question-service.yml
88+
- --image=asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/question-svc:latest
89+
- --location=asia-southeast1
90+
- --cluster=cs3219-g11-peerprep-kubes
91+
92+
# Clean up before deploying user-service
93+
- name: "ubuntu"
94+
args: ["rm", "-rf", "output"]
95+
96+
# Deploy user-service to Google Kubernetes Engine (GKE)
97+
- name: "gcr.io/cloud-builders/gke-deploy"
98+
args:
99+
- run
100+
- --filename=k8s/user-service.yml
101+
- --image=asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/user-svc:latest
102+
- --location=asia-southeast1
103+
- --cluster=cs3219-g11-peerprep-kubes
104+
105+
# Step 3: update the deployments with the new images
106+
107+
# Update the peerprep-fe deployment
108+
- name: "gcr.io/cloud-builders/kubectl"
109+
args:
110+
- "set"
111+
- "image"
112+
- "deployment/peerprep-fe"
113+
- "peerprep-fe=asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/peerprep-fe:latest"
114+
env:
115+
- "CLOUDSDK_COMPUTE_ZONE=asia-southeast1"
116+
- "CLOUDSDK_CONTAINER_CLUSTER=cs3219-g11-peerprep-kubes"
117+
118+
# Update the question-service deployment
119+
- name: "gcr.io/cloud-builders/kubectl"
120+
args:
121+
- "set"
122+
- "image"
123+
- "deployment/question-svc"
124+
- "question-svc=asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/question-svc:latest"
125+
env:
126+
- "CLOUDSDK_COMPUTE_ZONE=asia-southeast1"
127+
- "CLOUDSDK_CONTAINER_CLUSTER=cs3219-g11-peerprep-kubes"
128+
129+
# Update the user-service deployment hi
130+
- name: "gcr.io/cloud-builders/kubectl"
131+
args:
132+
- "set"
133+
- "image"
134+
- "deployment/user-svc"
135+
- "user-svc=asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/user-svc:latest"
136+
env:
137+
- "CLOUDSDK_COMPUTE_ZONE=asia-southeast1"
138+
- "CLOUDSDK_CONTAINER_CLUSTER=cs3219-g11-peerprep-kubes"
139+
140+
options:
141+
dynamic_substitutions: true
142+
143+
images:
144+
- "asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/peerprep-fe:latest"
145+
- "asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/question-svc:latest"
146+
- "asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/user-svc:latest"

k8s/peerprep-fe.yml

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
apiVersion: apps/v1
22
kind: Deployment
3-
metadata:
3+
metadata:
44
name: peerprep-fe
55
labels:
66
type: frontend
@@ -18,11 +18,15 @@ spec:
1818
app: peerprep-fe
1919
spec:
2020
containers:
21-
- name: peerprep-fe
22-
image: asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/peerprep-fe:latest
23-
# imagePullPolicy: Never # only used for local builds
24-
ports:
25-
- containerPort: 3000
21+
- name: peerprep-fe
22+
image: asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/peerprep-fe:latest
23+
# imagePullPolicy: Never # only used for local builds
24+
ports:
25+
- containerPort: 3000
26+
envFrom:
27+
- secretRef:
28+
name: peerprep-config
29+
dnsPolicy: ClusterFirst
2630
---
2731
apiVersion: v1
2832
kind: Service
@@ -49,9 +53,9 @@ spec:
4953
minReplicas: 1
5054
maxReplicas: 5
5155
metrics:
52-
- type: Resource
53-
resource:
54-
name: cpu
55-
target:
56-
type: Utilization
57-
averageUtilization: 80
56+
- type: Resource
57+
resource:
58+
name: cpu
59+
target:
60+
type: Utilization
61+
averageUtilization: 80

k8s/question-service.yml

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
apiVersion: apps/v1
22
kind: Deployment
3-
metadata:
3+
metadata:
44
name: question-svc
55
labels:
66
type: backend
@@ -18,14 +18,14 @@ spec:
1818
app: question-svc
1919
spec:
2020
containers:
21-
- name: question-svc
22-
image: asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/question-svc:latest
23-
# imagePullPolicy: Never # only used for local builds
24-
ports:
25-
- containerPort: 4001
26-
envFrom:
27-
- configMapRef:
28-
name: question-service-config
21+
- name: question-svc
22+
image: asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/question-svc:latest
23+
# imagePullPolicy: Never # only used for local builds
24+
ports:
25+
- containerPort: 4001
26+
envFrom:
27+
- secretRef:
28+
name: question-service-config
2929
dnsPolicy: ClusterFirst
3030
---
3131
# This is an internal service, not exposed
@@ -54,9 +54,9 @@ spec:
5454
minReplicas: 1
5555
maxReplicas: 5
5656
metrics:
57-
- type: Resource
58-
resource:
59-
name: cpu
60-
target:
61-
type: Utilization
62-
averageUtilization: 80
57+
- type: Resource
58+
resource:
59+
name: cpu
60+
target:
61+
type: Utilization
62+
averageUtilization: 80

k8s/user-service.yml

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: user-svc
5+
labels:
6+
type: backend
7+
app: user-svc
8+
spec:
9+
selector:
10+
matchLabels:
11+
type: backend
12+
app: user-svc
13+
template:
14+
metadata:
15+
name: user-svc
16+
labels:
17+
type: backend
18+
app: user-svc
19+
spec:
20+
containers:
21+
- name: user-svc
22+
image: asia-southeast1-docker.pkg.dev/cs3219-g11-peerprep/cs3219-g11-repo/user-svc:latest
23+
ports:
24+
- containerPort: 3001
25+
envFrom:
26+
- secretRef:
27+
name: user-service-config
28+
dnsPolicy: ClusterFirst
29+
---
30+
apiVersion: v1
31+
kind: Service
32+
metadata:
33+
name: user-svc
34+
spec:
35+
type: LoadBalancer
36+
ports:
37+
- port: 3001
38+
targetPort: 3001
39+
selector:
40+
type: backend
41+
app: user-svc
42+
---
43+
apiVersion: autoscaling/v2
44+
kind: HorizontalPodAutoscaler
45+
metadata:
46+
name: user-svc
47+
spec:
48+
scaleTargetRef:
49+
apiVersion: apps/v1
50+
kind: Deployment
51+
name: user-svc
52+
minReplicas: 1
53+
maxReplicas: 5
54+
metrics:
55+
- type: Resource
56+
resource:
57+
name: cpu
58+
target:
59+
type: Utilization
60+
averageUtilization: 80

0 commit comments

Comments
 (0)