Skip to content

Commit 115920b

Browse files
test: k3s deploy action
1 parent 3eb8c97 commit 115920b

File tree

2 files changed

+242
-2
lines changed

2 files changed

+242
-2
lines changed

.github/workflows/k3s.yaml renamed to .github/workflows/k3s-dev.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name: Spring Boot Multi-module K3s Deployment
33
on:
44
push:
55
branches:
6-
- develop
6+
- develop-temp
77

88
env:
99
REGISTRY: "ghcr.io"
@@ -270,7 +270,7 @@ jobs:
270270
EOF
271271
fi
272272
done
273-
273+
274274
275275
- name: Deploy to K3s
276276
run: |

.github/workflows/k3s-prod.yaml

Lines changed: 240 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,240 @@
1+
name: Spring Boot Multi-module K3s Deployment
2+
3+
on:
4+
push:
5+
branches:
6+
- develop
7+
8+
env:
9+
REGISTRY: "ghcr.io"
10+
NAMESPACE: "depromeet"
11+
IMAGE_NAME: "kasukabe-server"
12+
13+
jobs:
14+
setup:
15+
runs-on: ubuntu-latest
16+
permissions:
17+
contents: read
18+
packages: write
19+
outputs:
20+
deploy_target: ${{ steps.set-env.outputs.DEPLOY_TARGET }}
21+
sha_short: ${{ steps.sha_short.outputs.sha_short }}
22+
changed_modules: ${{ steps.detect-changes.outputs.changed_modules }}
23+
steps:
24+
- name: Checkout code
25+
uses: actions/checkout@v1
26+
27+
- name: Setup Env
28+
id: set-env
29+
run: |
30+
if [[ "${GITHUB_REF}" == "refs/heads/develop" ]]; then
31+
echo "DEPLOY_TARGET=production" >> $GITHUB_OUTPUT
32+
else
33+
echo "DEPLOY_TARGET=development" >> $GITHUB_OUTPUT
34+
fi
35+
36+
- name: Get short SHA
37+
id: sha_short
38+
run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
39+
40+
- name: Detect Changed Modules
41+
id: detect-changes
42+
run: |
43+
CHANGED_MODULES=""
44+
45+
if [[ $(git diff --name-only HEAD^ HEAD) =~ ^layer-api/ ]]; then
46+
if [ -z "$CHANGED_MODULES" ]; then
47+
CHANGED_MODULES="layer-api"
48+
else
49+
CHANGED_MODULES="$CHANGED_MODULES,layer-api"
50+
fi
51+
fi
52+
53+
if [[ $(git diff --name-only HEAD^ HEAD) =~ ^layer-batch/ ]]; then
54+
if [ -z "$CHANGED_MODULES" ]; then
55+
CHANGED_MODULES="layer-batch"
56+
else
57+
CHANGED_MODULES="$CHANGED_MODULES,layer-batch"
58+
fi
59+
fi
60+
61+
echo "changed_modules=$CHANGED_MODULES"
62+
echo "changed_modules=$CHANGED_MODULES" >> $GITHUB_OUTPUT
63+
64+
build:
65+
name: build
66+
needs: [ setup ]
67+
runs-on: ubuntu-latest
68+
if: ${{ needs.setup.outputs.changed_modules != '' }}
69+
permissions:
70+
contents: read
71+
packages: write
72+
73+
env:
74+
DEPLOY_TARGET: ${{ needs.setup.outputs.deploy_target }}
75+
APPLICATION_SECRET_PROPERTIES: ${{ secrets.APPLICATION_SECRET_PROPERTIES }}
76+
GOOGLE_CREDENTIALS: ${{ secrets.GOOGLE_CREDENTIALS }}
77+
SHA_SHORT: ${{ needs.setup.outputs.sha_short }}
78+
CHANGED_MODULES: ${{ needs.setup.outputs.changed_modules }}
79+
80+
steps:
81+
- name: Setup Java
82+
uses: actions/setup-java@v4
83+
with:
84+
java-version: '17'
85+
distribution: 'corretto'
86+
87+
- name: Checkout sources
88+
uses: actions/checkout@v4
89+
90+
- name: Gradle Caching
91+
uses: actions/cache@v3
92+
with:
93+
path: |
94+
~/.gradle/caches
95+
~/.gradle/wrapper
96+
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
97+
restore-keys: |
98+
${{ runner.os }}-gradle-
99+
100+
- name: Setup Gradle
101+
uses: gradle/gradle-build-action@bd5760595778326ba7f1441bcf7e88b49de61a25 # v2.6.0
102+
103+
# - name: Create application-secret.properties
104+
# run: |
105+
# for MODULE in $(echo $CHANGED_MODULES | tr "," "\n"); do
106+
# echo "${APPLICATION_SECRET_PROPERTIES}" > ./$MODULE/src/main/resources/application-secret.properties
107+
# done
108+
109+
- name: Build Changed Modules
110+
run: |
111+
for MODULE in $(echo $CHANGED_MODULES | tr "," "\n"); do
112+
./gradlew :$MODULE:build
113+
done
114+
115+
- name: Run Tests for Changed Modules
116+
run: |
117+
for MODULE in $(echo $CHANGED_MODULES | tr "," "\n"); do
118+
./gradlew :$MODULE:test
119+
done
120+
121+
- name: Login to GitHub Container Registry
122+
uses: docker/login-action@v2
123+
with:
124+
registry: ghcr.io
125+
username: ${{ github.repository_owner }}
126+
password: ${{ secrets.GITHUB_TOKEN }}
127+
128+
- name: Extract metadata (tags, labels) for Docker
129+
id: meta
130+
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
131+
with:
132+
images: ${{ env.REGISTRY }}/${{ env.NAMESPACE }}/${{ env.IMAGE_NAME }}/$MODULE
133+
134+
- name: Push Docker Images for Changed Modules
135+
run: |
136+
for MODULE in $(echo $CHANGED_MODULES | tr "," "\n"); do
137+
IMAGE_TAG="${{ env.REGISTRY }}/${{ env.NAMESPACE }}/${{ env.IMAGE_NAME }}/$MODULE:${{ env.SHA_SHORT }}"
138+
docker build ./$MODULE -t $IMAGE_TAG
139+
docker push $IMAGE_TAG
140+
done
141+
142+
deploy:
143+
name: Deploy to K3s
144+
needs: [ build, setup ]
145+
runs-on: ubuntu-latest
146+
if: ${{ needs.setup.outputs.changed_modules != '' }}
147+
env:
148+
DEPLOY_TARGET: ${{ needs.setup.outputs.deploy_target }}
149+
SHA_SHORT: ${{ needs.setup.outputs.sha_short }}
150+
CHANGED_MODULES: ${{ needs.setup.outputs.changed_modules }}
151+
152+
steps:
153+
- name: Checkout sources
154+
uses: actions/checkout@v4
155+
156+
- name: Install kubectl
157+
uses: azure/setup-kubectl@v1
158+
with:
159+
version: 'v1.21.0'
160+
161+
- name: Set up kubeconfig
162+
run: |
163+
mkdir -p $HOME/.kube
164+
echo "${{ secrets.KUBE_CONFIG }}" > $HOME/.kube/config
165+
chmod 600 $HOME/.kube/config
166+
167+
- name: Create K3s deployment files
168+
run: |
169+
for MODULE in $(echo $CHANGED_MODULES | tr "," "\n"); do
170+
cat <<EOF > deployment-$MODULE.yaml
171+
apiVersion: apps/v1
172+
kind: Deployment
173+
metadata:
174+
name: $MODULE-production
175+
namespace: default
176+
labels:
177+
app: $MODULE-production
178+
spec:
179+
replicas: 1
180+
selector:
181+
matchLabels:
182+
app: $MODULE-production
183+
template:
184+
metadata:
185+
labels:
186+
app: $MODULE-production
187+
spec:
188+
containers:
189+
- name: $MODULE-production
190+
image: ${{ env.REGISTRY }}/${{ env.NAMESPACE }}/${{ env.IMAGE_NAME }}/$MODULE:${{ env.SHA_SHORT }}
191+
ports:
192+
- containerPort: $PORT
193+
env:
194+
- name: TZ
195+
value: "Asia/Seoul"
196+
- name: SPRING_PROFILES_ACTIVE
197+
value: "${{ env.DEPLOY_TARGET }}"
198+
volumeMounts:
199+
- name: secret-volume
200+
mountPath: /config/application-secret.properties
201+
subPath: application-secret.properties
202+
- name: log-volume
203+
mountPath: /log
204+
- name: tokens-volume
205+
mountPath: /config/tokens
206+
volumes:
207+
- name: secret-volume
208+
secret:
209+
secretName: app-secret-dev
210+
- name: log-volume
211+
hostPath:
212+
path: /${{ env.DEPLOY_TARGET }}/log/$MODULE
213+
type: DirectoryOrCreate
214+
- name: tokens-volume
215+
emptyDir: { }
216+
---
217+
apiVersion: v1
218+
kind: Service
219+
metadata:
220+
name: $MODULE-service-production
221+
namespace: default
222+
labels:
223+
app: $MODULE-production
224+
spec:
225+
selector:
226+
app: $MODULE-production
227+
ports:
228+
- protocol: TCP
229+
port: 80
230+
targetPort: $PORT
231+
EOF
232+
fi
233+
done
234+
235+
236+
- name: Deploy to K3s
237+
run: |
238+
for MODULE in $(echo $CHANGED_MODULES | tr "," "\n"); do
239+
kubectl apply -f deployment-$MODULE.yaml
240+
done

0 commit comments

Comments
 (0)