Skip to content

Commit 39444dc

Browse files
committed
Update github-actions.yml
1 parent 8f2c337 commit 39444dc

10 files changed

Lines changed: 186 additions & 0 deletions

File tree

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
name: CI/CD with github actions & docker
2+
3+
on:
4+
push:
5+
branches: [ "ci-cd/#38-independence-implementation" ]
6+
7+
jobs:
8+
build-and-deploy:
9+
name: Build
10+
runs-on: ubuntu-latest
11+
strategy:
12+
matrix:
13+
service:
14+
- name: "eureka"
15+
folder: "com.bkmarriott.eureka"
16+
- name: "gateway"
17+
folder: "com.bkmarriott.gateway"
18+
- name: "auth"
19+
folder: "com.bkmarriott.auth"
20+
- name: "coupon"
21+
folder: "com.bkmarriott.coupon"
22+
- name: "charge"
23+
folder: "com.bkmarriott.charge"
24+
- name: "promotion"
25+
folder: "com.bkmarriott.promotion"
26+
- name: "hotel"
27+
folder: "com.bkmarriott.hotel"
28+
- name: "reservation"
29+
folder: "com.bkmarriott.reservation"
30+
- name: "payment"
31+
folder: "com.bkmarriott.payment"
32+
33+
steps:
34+
- name: Checkout
35+
uses: actions/checkout@v4
36+
37+
- name: Detect Changed Services
38+
id: detect_changes
39+
run: |
40+
# Get the list of changed files between the current and the previous commit
41+
CHANGED_FILES=$(git diff --name-only HEAD^ HEAD)
42+
43+
# Initialize a variable to store services to include
44+
SERVICES_TO_BUILD=""
45+
46+
# Loop through all services in the matrix
47+
for SERVICE_FOLDER in $(echo "${{ toJSON(matrix.service) }}" | jq -r '.[] | .folder'); do
48+
if echo "$CHANGED_FILES" | grep -q "$SERVICE_FOLDER"; then
49+
SERVICES_TO_BUILD="$SERVICES_TO_BUILD $SERVICE_FOLDER"
50+
fi
51+
done
52+
53+
echo "Services to build: $SERVICES_TO_BUILD"
54+
echo "services_to_build=$SERVICES_TO_BUILD" >> $GITHUB_ENV
55+
56+
- name: Skip Unchanged Services
57+
if: ${{ !env.services_to_build || !contains(env.services_to_build, matrix.service.folder) }}
58+
run: |
59+
echo "Skipping unchanged service: ${{ matrix.service.name }}"
60+
61+
- name: Set up JDK 17
62+
uses: actions/setup-java@v4
63+
with:
64+
java-version: '17'
65+
distribution: 'temurin'
66+
67+
- name: Inject application.yml
68+
run: |
69+
if [ "${{ matrix.service.name }}" == "eureka" ]; then
70+
echo "${{ secrets.EUREKA_SERVER_APPLICATION_DEV_YML }}" > ${{ matrix.service.folder }}/src/main/resources/application-dev.yml
71+
elif [ "${{ matrix.service.name }}" == "auth" ]; then
72+
echo "${{ secrets.AUTH_APPLICATION_DEV_YML }}" > ${{ matrix.service.folder }}/src/main/resources/application-dev.yml
73+
elif [ "${{ matrix.service.name }}" == "charge" ]; then
74+
echo "${{ secrets.CHARGE_APPLICATION_DEV_YML }}" > ${{ matrix.service.folder }}/src/main/resources/application-dev.yml
75+
elif [ "${{ matrix.service.name }}" == "coupon" ]; then
76+
echo "${{ secrets.COUPON_APPLICATION_DEV_YML }}" > ${{ matrix.service.folder }}/src/main/resources/application-dev.yml
77+
elif [ "${{ matrix.service.name }}" == "gateway" ]; then
78+
echo "${{ secrets.GATEWAY_APPLICATION_DEV_YML }}" > ${{ matrix.service.folder }}/src/main/resources/application-dev.yml
79+
elif [ "${{ matrix.service.name }}" == "hotel" ]; then
80+
echo "${{ secrets.HOTEL_APPLICATION_DEV_YML }}" > ${{ matrix.service.folder }}/src/main/resources/application-dev.yml
81+
elif [ "${{ matrix.service.name }}" == "promotion" ]; then
82+
echo "${{ secrets.PROMOTION_APPLICATION_DEV_YML }}" > ${{ matrix.service.folder }}/src/main/resources/application-dev.yml
83+
elif [ "${{ matrix.service.name }}" == "reservation" ]; then
84+
echo "${{ secrets.RESERVATION_APPLICATION_DEV_YML }}" > ${{ matrix.service.folder }}/src/main/resources/application-dev.yml
85+
elif [ "${{ matrix.service.name }}" == "payment" ]; then
86+
echo "${{ secrets.PAYMENT_APPLICATION_DEV_YML }}" > ${{ matrix.service.folder }}/src/main/resources/application-dev.yml
87+
fi
88+
89+
- name: Build with Gradle
90+
run: |
91+
cd ${{ matrix.service.folder }}
92+
chmod +x gradlew
93+
./gradlew clean
94+
./gradlew build -x test --no-daemon
95+
96+
- name: Build Docker Image
97+
env:
98+
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
99+
run: |
100+
cd ${{ matrix.service.folder }}
101+
docker buildx build -t $DOCKER_USERNAME/bkmarriott-${{ matrix.service.name }}:latest .
102+
103+
- name: Push Docker Image
104+
env:
105+
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
106+
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
107+
run: |
108+
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
109+
docker push $DOCKER_USERNAME/bkmarriott-${{ matrix.service.name }}:latest
110+
111+
- name: Deploy Docker Image to EC2
112+
env:
113+
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
114+
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
115+
EC2_SSH_PRIVATE_KEY: ${{ secrets.EC2_SSH_PRIVATE_KEY }}
116+
EC2_INSTANCE_IP: ${{ secrets.EC2_INSTANCE_IP }}
117+
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
118+
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
119+
run: |
120+
# Set up SSH Key for EC2 instance
121+
echo "$EC2_SSH_PRIVATE_KEY" > private_key.pem
122+
chmod 600 private_key.pem
123+
124+
case ${{ matrix.service.name }} in
125+
"eureka")
126+
SERVICE_PORT=${{ secrets.EUREKA_PORT }}
127+
;;
128+
"gateway")
129+
SERVICE_PORT=${{ secrets.GATEWAY_PORT }}
130+
;;
131+
"auth")
132+
SERVICE_PORT=${{ secrets.AUTH_PORT }}
133+
;;
134+
"coupon")
135+
SERVICE_PORT=${{ secrets.COUPON_PORT }}
136+
;;
137+
"charge")
138+
SERVICE_PORT=${{ secrets.CHARGE_PORT }}
139+
;;
140+
"promotion")
141+
SERVICE_PORT=${{ secrets.PROMOTION_PORT }}
142+
;;
143+
"hotel")
144+
SERVICE_PORT=${{ secrets.HOTEL_PORT }}
145+
;;
146+
"reservation")
147+
SERVICE_PORT=${{ secrets.RESERVATION_PORT }}
148+
;;
149+
esac
150+
151+
# SSH into EC2 and debug Docker variables
152+
ssh -i private_key.pem -o StrictHostKeyChecking=no ubuntu@$EC2_INSTANCE_IP << EOF
153+
echo "Using Docker image: $DOCKER_USERNAME/bkmarriott-${{ matrix.service.name }}:latest"
154+
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
155+
sudo docker stop ${{ matrix.service.name }}
156+
sudo docker rm ${{ matrix.service.name }}
157+
sudo docker pull $DOCKER_USERNAME/bkmarriott-${{ matrix.service.name }}:latest
158+
sudo docker run -d --name ${{ matrix.service.name }} -p $SERVICE_PORT:$SERVICE_PORT $DOCKER_USERNAME/bkmarriott-${{ matrix.service.name }}:latest
159+
EOF

com.bkmarriott.auth/Dockerfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
FROM eclipse-temurin:17-alpine
2+
COPY ./build/libs/eureka-0.0.1.jar app.jar
3+
ENTRYPOINT ["java", "-Dspring.profiles.active=dev", "-jar", "app.jar"]

com.bkmarriott.charge/Dockerfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
FROM eclipse-temurin:17-alpine
2+
COPY ./build/libs/eureka-0.0.1.jar app.jar
3+
ENTRYPOINT ["java", "-Dspring.profiles.active=dev", "-jar", "app.jar"]

com.bkmarriott.coupon/Dockerfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
FROM eclipse-temurin:17-alpine
2+
COPY ./build/libs/eureka-0.0.1.jar app.jar
3+
ENTRYPOINT ["java", "-Dspring.profiles.active=dev", "-jar", "app.jar"]

com.bkmarriott.eureka/Dockerfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
FROM eclipse-temurin:17-alpine
2+
COPY ./build/libs/eureka-0.0.1.jar app.jar
3+
ENTRYPOINT ["java", "-Dspring.profiles.active=dev", "-jar", "app.jar"]

com.bkmarriott.gateway/Dockerfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
FROM eclipse-temurin:17-alpine
2+
COPY ./build/libs/eureka-0.0.1.jar app.jar
3+
ENTRYPOINT ["java", "-Dspring.profiles.active=dev", "-jar", "app.jar"]

com.bkmarriott.hotel/Dockerfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
FROM eclipse-temurin:17-alpine
2+
COPY ./build/libs/eureka-0.0.1.jar app.jar
3+
ENTRYPOINT ["java", "-Dspring.profiles.active=dev", "-jar", "app.jar"]

com.bkmarriott.payment/Dockerfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
FROM eclipse-temurin:17-alpine
2+
COPY ./build/libs/eureka-0.0.1.jar app.jar
3+
ENTRYPOINT ["java", "-Dspring.profiles.active=dev", "-jar", "app.jar"]
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
FROM eclipse-temurin:17-alpine
2+
COPY ./build/libs/eureka-0.0.1.jar app.jar
3+
ENTRYPOINT ["java", "-Dspring.profiles.active=dev", "-jar", "app.jar"]
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
FROM eclipse-temurin:17-alpine
2+
COPY ./build/libs/eureka-0.0.1.jar app.jar
3+
ENTRYPOINT ["java", "-Dspring.profiles.active=dev", "-jar", "app.jar"]

0 commit comments

Comments
 (0)