diff --git a/.docker/docker-compose-override.yml b/.docker/docker-compose-override.yml deleted file mode 100644 index 5777a6a8..00000000 --- a/.docker/docker-compose-override.yml +++ /dev/null @@ -1,26 +0,0 @@ -services: - ilildb: - image: mysql:8.0 - container_name: ilildb - environment: - MYSQL_DATABASE: ${DOCKER_MYSQL_DATABASE} - MYSQL_ROOT_PASSWORD: ${DOCKER_MYSQL_PASSWORD} - ports: - - 3306:3306 - volumes: - - ./mysql_data:/var/lib/mysql - - ililBooks: - build: .. - container_name: ililBooks - ports: - - 8080:8080 - environment: - - SPRING_DATASOURCE_URL=${DB_URL} - - SPRING_DATASOURCE_USERNAME=${DB_USER} - - SPRING_DATASOURCE_PASSWORD=${DB_PASSWORD} - depends_on: - ilildb: - condition: service_healthy - volumes: - - ./mysql_data:/var/lib/mysql diff --git a/.docker/docker-compose.yml b/.docker/docker-compose.yml deleted file mode 100644 index 91d82ed4..00000000 --- a/.docker/docker-compose.yml +++ /dev/null @@ -1,15 +0,0 @@ -services: - ililBooks: - build: .. - container_name: ililBooks - ports: - - 8080:8080 - environment: - - SPRING_DATASOURCE_URL=${DOCKER_MYSQL_URL} - - SPRING_DATASOURCE_USERNAME=${DOCKER_MYSQL_USER} - - SPRING_DATASOURCE_PASSWORD=${DOCKER_MYSQL_PASSWORD} - depends_on: - ilildb: - condition: service_healthy - volumes: - - ./mysql_data:/var/lib/mysql \ No newline at end of file diff --git a/.github/workflows/build_test.yml b/.github/workflows/build_test.yml index 3f02da14..dc1c13f5 100644 --- a/.github/workflows/build_test.yml +++ b/.github/workflows/build_test.yml @@ -4,7 +4,7 @@ on: push: branches: - dev - # - feat/ci_cd # 테스트 용 +# - feat/ci_cd # 테스트용 pull_request: branches: @@ -12,7 +12,6 @@ on: types: - closed - jobs: test: name: Run Tests @@ -33,8 +32,8 @@ jobs: - name: Give permission to gradlew run: chmod +x ./gradlew - - name: Run tests with coverage - run: ./gradlew clean test jacocoTestReport + - name: Run tests with coverage verification + run: ./gradlew clean testCoverage - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v5 @@ -45,7 +44,7 @@ jobs: notify: name: Send Notification - needs: test # job + needs: test runs-on: ubuntu-latest steps: diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 2f43f8af..98681717 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -4,7 +4,6 @@ on: push: branches: - main -# - feat/ci_cd # 테스트 jobs: deploy: @@ -12,8 +11,7 @@ jobs: env: AWS_REGION: ${{ secrets.AWS_REGION }} IMAGE_TAG: ${{ github.sha }} - # ECR_REGISTRY: ${{ secrets.ECR_REGISTRY }} - # IMAGE_URI: ${{ secrets.ECR_REGISTRY }}/${{ secrets.ECR_REPOSITORY }}:${{ github.sha }} + VERSION_LABEL: v-${{ github.run_number }} steps: - name: Checkout code @@ -38,27 +36,29 @@ jobs: docker build -t $IMAGE_URI . docker push $IMAGE_URI - - name: Render task definition using sed - run: sed "s|__IMAGE_URI__|${{ env.IMAGE_URI }}|g" ecs-task-def-template.json > ecs-task-def.json + - name: Replace image URI in Dockerrun.aws.json + run: | + sed -i "s|__IMAGE_URI__|${{ secrets.ECR_REGISTRY }}/${{ secrets.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}|g" Dockerrun.aws.json -# - name: debug task definition -# run: cat ecs-task-def.json # 디버그용 + - name: Zip deployment package + run: zip deploy.zip Dockerrun.aws.json - - name: Render updated task definition - id: render-task-def - uses: aws-actions/amazon-ecs-render-task-definition@v1 - with: - task-definition: ecs-task-def.json - container-name: ilil-books-app - image: ${{ env.IMAGE_URI }} + - name: Upload to S3 + run: | + aws s3 cp deploy.zip s3://${{ secrets.AWS_S3_BUCKET_NAME }}/deploy-${{ github.run_number }}.zip - - name: Deploy to ECS - uses: aws-actions/amazon-ecs-deploy-task-definition@v1 - with: - task-definition: ecs-task-def.json - service: ililbooks-service - cluster: ilil-books - wait-for-service-stability: true + - name: Create new application version + run: | + aws elasticbeanstalk create-application-version \ + --application-name ${{ secrets.EB_APP_NAME }} \ + --version-label ${{ env.VERSION_LABEL }} \ + --source-bundle S3Bucket=${{ secrets.AWS_S3_BUCKET_NAME }},S3Key=deploy-${{ github.run_number }}.zip + + - name: Deploy to Elastic Beanstalk + run: | + aws elasticbeanstalk update-environment \ + --environment-name ${{ secrets.EB_ENV_NAME }} \ + --version-label ${{ env.VERSION_LABEL }} - name: Notify via Slack uses: rtCamp/action-slack-notify@v2 diff --git a/Dockerfile b/Dockerfile index 52e2671a..a6356055 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,3 @@ -# TODO 전승민 dockerfile # Build 스테이지 FROM gradle:8.10.2-jdk17 AS builder # 작업 디렉토리 설정 @@ -7,7 +6,8 @@ WORKDIR /apps COPY . /apps # 어플리케이션 빌드 RUN chmod +x gradlew -RUN ./gradlew build -x test # 테스트용 +RUN ./gradlew build + # 실행 스테이지 # OpenJDK 17 slim 기반 이미지 사용 FROM amazoncorretto:17.0.12 @@ -17,9 +17,6 @@ LABEL type="application" WORKDIR /apps # 애플리케이션 jar 파일을 컨테이너로 복사 COPY --from=builder /apps/build/libs/ilil-books-0.0.1-SNAPSHOT.jar /apps/app.jar -#COPY wait-for-it.sh /apps/wait-for-it.sh -#RUN chmod +x /apps/wait-for-it.sh - # 애플리케이션이 사용할 포트 노출 EXPOSE 8081 # 애플리케이션을 실행하기 위한 엔트리포인트 정의 diff --git a/Dockerrun.aws.json b/Dockerrun.aws.json new file mode 100644 index 00000000..b541b7de --- /dev/null +++ b/Dockerrun.aws.json @@ -0,0 +1,12 @@ +{ + "AWSEBDockerrunVersion": "1", + "Image": { + "Name": "__IMAGE_URI__", + "Update": "true" + }, + "Ports": [ + { + "ContainerPort": 8081 + } + ] +} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index f5a4822a..eab4e81f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,41 +1,6 @@ version: '3.8' services: -# app: -# build: -# context: . -# dockerfile: Dockerfile -# container_name: ililBooks -# ports: -# - "8080:8080" -# depends_on: -## - db -## - elasticsearch -## - redis -# elasticsearch: -# condition: service_healthy -# db: -# condition: service_healthy -# redis: -# condition: service_started -# environment: -# - SPRING_DATASOURCE_URL=${DB_URL_DOCKER} -# - SPRING_DATASOURCE_USERNAME=${DB_USER} -# - SPRING_DATASOURCE_PASSWORD=${DB_PASSWORD} -# - JWT_SECRET_KEY=${JWT_SECRET_KEY} -# - BOOK_API_KEY=${BOOK_API_KEY} -# - SPRING_PROFILES_ACTIVE=docker -# - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} # 추가 -# - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} # 추가 -# - AWS_S3_BUCKET_NAME=${AWS_S3_BUCKET_NAME} # 추가 -# - AWS_REGION=${AWS_REGION} -# networks: -# - esnet -# -# env_file: -# - .env # .env 파일 로드 - - db: image: mysql:8.0 container_name: mysql-db @@ -59,11 +24,10 @@ services: container_name: redis ports: - "6379:6379" -# command: redis-server --requirepass ${REDIS_PASSWORD} networks: - esnet healthcheck: - test: [ "CMD", "redis-cli", "-a", "ping" ] # ${REDIS_PASSWORD}" + test: [ "CMD", "redis-cli", "-a", "ping" ] interval: 10s timeout: 5s retries: 5 diff --git a/ecs-task-def-template.json b/ecs-task-def-template.json deleted file mode 100644 index 4f31bc29..00000000 --- a/ecs-task-def-template.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "family": "ililbooks-task", - "networkMode": "awsvpc", - "executionRoleArn": "arn:aws:iam::198109037411:role/ecsTaskExecutionRole", - "requiresCompatibilities": [ - "FARGATE" - ], - "cpu": "512", - "memory": "1024", - "containerDefinitions": [ - { - "name": "ilil-books-app", - "image": "__IMAGE_URI__", - "portMappings": [ - { - "containerPort": 8081 - } - ], - "essential": true, - "environment": [ - { - "name": "SPRING_PROFILES_ACTIVE", - "value": "docker" - } - ] - } - ] -} \ No newline at end of file diff --git a/scripts/start.sh b/scripts/start.sh deleted file mode 100644 index 058698f4..00000000 --- a/scripts/start.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -APP_NAME=my-app -JAR_NAME=$(ls /home/ec2-user/app/*.jar | head -n 1) -LOG_FILE=/home/ec2-user/app/logs/$APP_NAME.log -PID_FILE=/home/ec2-user/app/$APP_NAME.pid - -echo "> Starting $JAR_NAME" - -# 백그라운드로 Spring Boot 앱 실행 -nohup java -jar "$JAR_NAME" > "$LOG_FILE" 2>&1 & - -# PID 저장 -echo $! > "$PID_FILE" - -echo "> Application started with PID $(cat $PID_FILE)" \ No newline at end of file diff --git a/src/main/java/com/example/ililbooks/IlilBooksApplication.java b/src/main/java/com/example/ililbooks/IlilBooksApplication.java index fc2c821b..3b441866 100644 --- a/src/main/java/com/example/ililbooks/IlilBooksApplication.java +++ b/src/main/java/com/example/ililbooks/IlilBooksApplication.java @@ -9,9 +9,9 @@ import static org.springframework.data.web.config.EnableSpringDataWebSupport.PageSerializationMode.VIA_DTO; @SpringBootApplication +@EnableScheduling @EnableSpringDataWebSupport(pageSerializationMode = VIA_DTO) @EnableElasticsearchRepositories(basePackages = "com.example.ililbooks.domain.search.repository") -@EnableScheduling public class IlilBooksApplication { public static void main(String[] args) { SpringApplication.run(IlilBooksApplication.class, args); diff --git a/src/test/resources/application-test.yml b/src/test/resources/application-test.yml deleted file mode 100644 index 45746d3d..00000000 --- a/src/test/resources/application-test.yml +++ /dev/null @@ -1,13 +0,0 @@ -spring: - datasource: - url: jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE - driver-class-name: org.h2.Driver - username: sa - password: - jpa: - hibernate: - ddl-auto: create-drop - show-sql: true - properties: - hibernate: - dialect: org.hibernate.dialect.H2Dialect \ No newline at end of file