Skip to content

Commit b34bb2a

Browse files
committed
cicd 수정
1 parent 06d7588 commit b34bb2a

2 files changed

Lines changed: 121 additions & 0 deletions

File tree

.github/workflows/deploy_map.yml

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
name: Build & Deploy (map - deploy)
2+
3+
on:
4+
push:
5+
branches:
6+
- develop
7+
workflow_dispatch:
8+
9+
jobs:
10+
build-and-push:
11+
runs-on: ubuntu-latest
12+
steps:
13+
- name: Checkout
14+
uses: actions/checkout@v4
15+
16+
- name: Setup JDK
17+
uses: actions/setup-java@v4
18+
with:
19+
distribution: corretto
20+
java-version: '21'
21+
22+
- name: Make gradlew executable
23+
run: chmod +x ./gradlew
24+
25+
- name: Build (skip tests)
26+
run: ./gradlew clean build -x test
27+
28+
- name: Docker login
29+
run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
30+
31+
- name: Build & Push
32+
run: |
33+
REPO=${{ secrets.DOCKER_USERNAME }}/map
34+
docker build -t $REPO:latest -t $REPO:latest-${{ github.sha }} .
35+
docker push $REPO:latest
36+
docker push $REPO:latest-${{ github.sha }}
37+
38+
deploy:
39+
runs-on: ubuntu-latest
40+
needs: build-and-push
41+
steps:
42+
- name: Configure AWS credentials
43+
uses: aws-actions/configure-aws-credentials@v4
44+
with:
45+
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
46+
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
47+
aws-region: ${{ secrets.AWS_DEFAULT_REGION }}
48+
49+
- name: Get egress IPv4
50+
id: egress
51+
run: |
52+
IP=$(curl -s https://checkip.amazonaws.com | tr -d '\r\n')
53+
echo "ip=$IP" >> "$GITHUB_OUTPUT"
54+
55+
- name: Allow SSH
56+
id: add
57+
run: |
58+
CIDR="${{ steps.egress.outputs.ip }}/32"
59+
echo "Authorizing SSH from $CIDR"
60+
aws ec2 authorize-security-group-ingress \
61+
--group-id "${{ secrets.AWS_SECURITY_GROUP_ID }}" \
62+
--protocol tcp --port 22 --cidr "$CIDR" || true
63+
64+
65+
- name: Wait for SG propagation
66+
run: sleep 8
67+
68+
- name: Deploy map
69+
uses: appleboy/ssh-action@v1.2.0
70+
with:
71+
host: ${{ secrets.EC2_HOST }}
72+
username: ${{ secrets.EC2_USER }}
73+
key: ${{ secrets.EC2_PRIVATE_KEY }}
74+
timeout: 120s
75+
command_timeout: 15m
76+
script: |
77+
set -e
78+
79+
IMAGE=${{ secrets.DOCKER_USERNAME }}/map:latest
80+
CONTAINER=map
81+
82+
docker pull $IMAGE
83+
84+
if docker ps -a --format '{{.Names}}' | grep -q "^$CONTAINER$"; then
85+
docker stop $CONTAINER
86+
docker rm $CONTAINER
87+
fi
88+
89+
docker run -d --name map \
90+
-p 8080:8080 \
91+
-v /home/ec2-user/certs/http_ca.crt:/certs/http_ca.crt:ro \
92+
-e SPRING_PROFILES_ACTIVE=prod \
93+
-e DB_URL=${{ secrets.DB_URL }} \
94+
-e DB_USERNAME=${{ secrets.DB_USERNAME }} \
95+
-e DB_PASSWORD=${{ secrets.DB_PASSWORD }} \
96+
-e SERVER_PORT=8080 \
97+
--restart unless-stopped \
98+
$IMAGE
99+
100+
docker ps
101+
docker logs --tail 50 map
102+
103+
- name: Revoke SSH
104+
if: always()
105+
run: |
106+
CIDR="${{ steps.egress.outputs.ip }}/32"
107+
echo "Revoking SSH from $CIDR"
108+
aws ec2 revoke-security-group-ingress \
109+
--group-id "${{ secrets.AWS_SECURITY_GROUP_ID }}" \
110+
--protocol tcp --port 22 --cidr "$CIDR" || true

Dockerfile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
FROM eclipse-temurin:21-jre
2+
3+
WORKDIR /app
4+
5+
COPY build/libs/*.jar app.jar
6+
7+
ENV SPRING_PROFILES_ACTIVE=prod
8+
9+
EXPOSE 8080
10+
11+
ENTRYPOINT ["java", "-jar", "app.jar"]

0 commit comments

Comments
 (0)