Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions .github/workflows/app-ci-prod.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: 🏭 Makers Prod App CI

on:
pull_request:
branches: [ "main" ]

jobs:
build:
runs-on: ubuntu-latest

steps:
- name: checkout
uses: actions/checkout@v3

- name: Set up JDK 21
uses: actions/setup-java@v3
with:
java-version: '21'
distribution: 'corretto'

- name: Copy yml
run: |
touch ./src/main/resources/application-prod.yml
touch ./src/test/resources/application-test.yml

echo "${{ secrets.APPLICATION_PROD_YML }}" >> ./src/main/resources/application-prod.yml
echo "${{ secrets.APPLICATION_TEST_YML }}" >> ./src/test/resources/application-test.yml

shell: bash

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Build with Gradle
run: ./gradlew build
90 changes: 61 additions & 29 deletions .github/workflows/release-prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,18 @@ name: 🚀MAKERS-APP-RELEASE!
on:
push:
branches: [ 'main' ]
tags: [ 'makers-app-develop' ]
tags: [ 'makers-app-prod' ]

env:
RESOURCE_PATH: ./src/main/resources/application-prod.yml
SPRING_PROFILES_ACTIVE: prod
ECR_APP_NAME: ${{ secrets.ECR_APP_NAME }}-prod
APP_ECR_REPO: ${{ secrets.ECR_HOST }}/${{ secrets.ECR_APP_NAME }}-prod
ECR_HOST: ${{ secrets.ECR_HOST }}

jobs:
build:
name: CD Pipeline
runs-on: ubuntu-latest
strategy:
matrix:
deployment-group-name: [ makers-app ]
codedeploy-application-name: [ app ]
s3-bucket: [ sopt-makers-app ]


steps:
- name: checkout
Expand All @@ -28,42 +26,76 @@ jobs:
distribution: 'corretto'
java-version: '21'

- name: mkdir resources folder
- name: touch yml files
run: |
touch ./src/main/resources/application-prod.yml
touch ./src/test/resources/application-test.yml
shell: bash

- name: copy yml file
- name: copy application.yml files
run: |
echo "${{ secrets.APPLICATION_PROD_YML }}" > ./src/main/resources/application-prod.yml
echo "${{ secrets.APPLICATION_TEST_YML }}" > ./src/test/resources/application-test.yml

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: 🐈 Gradle Build
run: ./gradlew clean build

- name: 📂 Make zip file
run: zip -r ./$GITHUB_SHA.zip .

- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v2
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY }}
aws-region: ap-northeast-2

- name: 🚀 s3 upload
run: aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.zip s3://${{matrix.s3-bucket}}/deploy/$GITHUB_SHA.zip

- name: CodeDeploy~!
run: aws deploy create-deployment
--application-name ${{matrix.codedeploy-application-name}}
--deployment-group-name ${{matrix.deployment-group-name}}
--s3-location bucket=${{matrix.s3-bucket}},bundleType=zip,key=deploy/$GITHUB_SHA.zip
--region ap-northeast-2

- name: 🐘Gradle Build
run: |
chmod +x ./gradlew
./gradlew clean build -x test

- name: Login to ECR
run: |
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin $ECR_HOST

- name: 🐳Docker Image Build & Push
run: |
docker build \
--no-cache \
--build-arg SPRING_PROFILES_ACTIVE=$SPRING_PROFILES_ACTIVE \
-t $ECR_APP_NAME .
docker tag $ECR_APP_NAME:latest $APP_ECR_REPO
docker push $APP_ECR_REPO

- name: Copy docker-compose.yml
run: echo "${{ secrets.DOCKER_COMPOSE_PROD_YML }}" > ./docker-compose.yml

- name: Send docker-compose.yml to EC2 Instance
uses: appleboy/scp-action@master
with:
username: ec2-user
host: ${{ secrets.PROD_SERVER_IP }}
key: ${{ secrets.PROD_PEM_KEY }}
source: "./docker-compose.yml"
target: "/home/ec2-user/app/"

- name: Send deploy script to EC2 Instance
uses: appleboy/scp-action@master
with:
username: ec2-user
host: ${{ secrets.PROD_SERVER_IP }}
key: ${{ secrets.PROD_PEM_KEY }}
source: "./script/"
target: "/home/ec2-user/app/"

- name: Docker Container Run
uses: appleboy/ssh-action@master
with:
username: ec2-user
host: ${{ secrets.PROD_SERVER_IP }}
key: ${{ secrets.PROD_PEM_KEY }}
script: |
cd ~
cd ./app
echo "Creating .env file..."
echo "AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_ID }}" > .env
echo "AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_KEY }}" >> .env

sudo chmod +x ./script/*.sh
./script/deploy.sh
docker image prune -f
9 changes: 9 additions & 0 deletions Dockerfile-prod
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
FROM amazoncorretto:21
WORKDIR /app
COPY ./build/libs/app-server-0.0.1-SNAPSHOT.jar /app/app-application.jar
COPY ./src/main/resources/application-prod.yml /app/application-prod.yml

ARG SPRING_PROFILES_ACTIVE
ENV SPRING_PROFILES_ACTIVE=$SPRING_PROFILES_ACTIVE

CMD ["java", "-jar", "-Dspring.profiles.active=${SPRING_PROFILES_ACTIVE}", "-Dspring.config.location=file:/app/application-prod.yml", "app-application.jar"]