diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 771ad5d7..fd7adab2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -54,7 +54,4 @@ jobs: run: chmod +x ./gradlew - name: Build and Test with Gradle - run: ./gradlew bootJar -Pprofile=dev --info - - - + run: ./gradlew bootJar -Pprofile=dev diff --git a/.github/workflows/cicd-ec2-dev.yml b/.github/workflows/cicd-ec2-dev.yml index ba398f3e..fc7b82cc 100644 --- a/.github/workflows/cicd-ec2-dev.yml +++ b/.github/workflows/cicd-ec2-dev.yml @@ -8,9 +8,9 @@ on: # 환경 변수 $변수명으로 사용 env: PROJECT_NAME: "devdevdev" - BUCKET_NAME: "devdevdev-cicd-bucket" - CODE_DEPLOY_APP: "devdevdev-server" - CODE_DEPLOY_DEPLOYMENT_GROUP: "devdevdev-server-deployment-group" + BUCKET_NAME: "dev-devdevdev-cicd-bucket" + CODE_DEPLOY_APP: "dev-devdevdev-server" + CODE_DEPLOY_DEPLOYMENT_GROUP: "dev-devdevdev-server-deployment-group" jobs: build: @@ -36,7 +36,6 @@ jobs: run: | ## create application-dev.yml cd ./src/main/resources - echo "${{ secrets.application_dev }}" >> ./application-dev.yml echo "${{ secrets.application_jwt_dev }}" >> ./application-jwt-dev.yml echo "${{ secrets.application_oauth2_dev }}" >> ./application-oauth2-dev.yml @@ -44,23 +43,31 @@ jobs: echo "${{ secrets.application_open_ai }}" >> ./application-open-ai.yml echo "${{ secrets.application_opensearch_dev }}" >> ./application-opensearch-dev.yml - # Dockerfile 주입 - - name: make Dockerfile + # Dockerfile-dev 주입 + - name: make Dockerfile-dev run: | cd $GITHUB_WORKSPACE ls rm Dockerfile - echo "${{ secrets.dockerfile_dev }}" >> ./Dockerfile + cat ./Dockerfile-prod >> ./Dockerfile + + # appspec.yml, deploy.sh 주입 + - name: make appspec.yml, deploy.sh + run: | + cd $GITHUB_WORKSPACE + ls + rm appspec.yml + rm deploy.sh + cat ./appspec-dev.yml >> ./appspec.yml + cat ./deploy-dev.sh >> ./deploy.sh ## 테스트 코드에도 sotrage-s3, open-ai 가 필요함! - name: make application-test.yml run: | cd ./src/test/resources - echo "${{ secrets.application_storage_s3 }}" >> ./application-storage-s3.yml echo "${{ secrets.application_open_ai }}" >> ./application-open-ai.yml echo "${{ secrets.application_opensearch_test }}" >> ./application-opensearch-test.yml - shell: bash ## Springboot 프로젝트 빌드 @@ -80,8 +87,8 @@ jobs: - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v1 with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-access-key-id: ${{ secrets.DEV_AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.DEV_AWS_SECRET_ACCESS_KEY }} aws-region: ${{ secrets.AWS_REGION }} # S3에 빌드파일 업로드 diff --git a/.github/workflows/cicd-ec2-prod.yml b/.github/workflows/cicd-ec2-prod.yml index 01a3767d..7cfd1fc9 100644 --- a/.github/workflows/cicd-ec2-prod.yml +++ b/.github/workflows/cicd-ec2-prod.yml @@ -36,7 +36,6 @@ jobs: run: | ## create application-prod.yml cd ./src/main/resources - echo "${{ secrets.application_prod }}" >> ./application-prod.yml echo "${{ secrets.application_jwt_prod }}" >> ./application-jwt-prod.yml echo "${{ secrets.application_oauth2_prod }}" >> ./application-oauth2-prod.yml @@ -44,23 +43,31 @@ jobs: echo "${{ secrets.application_open_ai }}" >> ./application-open-ai.yml echo "${{ secrets.application_opensearch_prod }}" >> ./application-opensearch-prod.yml - # Dockerfile 주입 - - name: make Dockerfile + # Dockerfile-prod 주입 + - name: make Dockerfile-prod run: | cd $GITHUB_WORKSPACE ls rm Dockerfile - echo "${{ secrets.dockerfile_prod }}" >> ./Dockerfile + cat ./Dockerfile-dev >> ./Dockerfile + + # appspec.yml, deploy.sh 주입 + - name: make appspec.yml, deploy.sh + run: | + cd $GITHUB_WORKSPACE + ls + rm appspec.yml + rm deploy.sh + cat ./appspec-prod.yml >> ./appspec.yml + cat ./deploy-proc.sh >> ./deploy.sh ## 테스트 코드에도 storage-s3, open-ai 가 필요함! - name: make application-test.yml run: | cd ./src/test/resources - echo "${{ secrets.application_storage_s3 }}" >> ./application-storage-s3.yml echo "${{ secrets.application_open_ai }}" >> ./application-open-ai.yml echo "${{ secrets.application_opensearch_test }}" >> ./application-opensearch-test.yml - shell: bash ## Springboot 프로젝트 빌드 diff --git a/Dockerfile b/Dockerfile-dev similarity index 75% rename from Dockerfile rename to Dockerfile-dev index 4e7012c0..2cede7fc 100644 --- a/Dockerfile +++ b/Dockerfile-dev @@ -6,4 +6,4 @@ COPY build/libs/*.jar app.jar ENV TZ Asia/Seoul # 시스템 진입점 정의 -CMD java -jar -Dspring.profiles.active=local /app.jar \ No newline at end of file +CMD java -jar -Dspring.profiles.active=dev /app.jar \ No newline at end of file diff --git a/Dockerfile-prod b/Dockerfile-prod new file mode 100644 index 00000000..8a31340e --- /dev/null +++ b/Dockerfile-prod @@ -0,0 +1,9 @@ +FROM openjdk:21-jdk +# JAR 파일 메인 디렉토리에 복사 +COPY build/libs/*.jar app.jar + +# 타임존 설정 +ENV TZ Asia/Seoul + +# 시스템 진입점 정의 +CMD java -jar -Dspring.profiles.active=prod -javaagent:/pinpoint-agent/pinpoint-bootstrap-3.0.1.jar -Dpinpoint.agentId=devdevdev -Dpinpoint.applicationName=devdevdev-server /app.jar \ No newline at end of file diff --git a/appspec-dev.yml b/appspec-dev.yml new file mode 100644 index 00000000..a8e27009 --- /dev/null +++ b/appspec-dev.yml @@ -0,0 +1,24 @@ +version: 0.0 +os: linux + +# 배포 파일에 대한 설정 +files: + - source: / # 인스턴스에 복사할 디렉토리 경로 + destination: /home/ec2-user/devdevdev # 인스턴스에서 파일이 복사되는 위치 + overwrite: yes # 복사할 위치에 파일이 있는 경우 덮어쓰기 + +# files 섹션에서 복사한 파일에 대한 권한 설정 +permissions: + - object: / # 권한이 지정되는 파일 또는 디렉토리 + pattern: "**" # 매칭되는 패턴에만 권한 부여 + owner: ec2-user # object의 소유자 + group: ec2-user # object의 그룹 이름 + +# 배포 이후에 수행할 스크립트 지정 +# 파일 설치 후 기존 실행중이던 컨테이너 종료, 컨테이너 삭제, 도커 이미지 삭제 후 +# 새로운 도커 이미지 빌드와 컨테이너 실행 +hooks: + AfterInstall: + - location: deploy.sh # hooks 에서 실행할 스크립트 위치 + timeout: 500 # (optional) 스크립트 실행에 허용되는 최대 시간이며, 넘으면 배포 실패로 간주됨 + runas : ec2-user # (optional) 스크립트를 실행하는 사용자 \ No newline at end of file diff --git a/appspec.yml b/appspec-prod.yml similarity index 100% rename from appspec.yml rename to appspec-prod.yml diff --git a/deploy.sh b/deploy-dev.sh similarity index 93% rename from deploy.sh rename to deploy-dev.sh index cb846057..8da80efb 100644 --- a/deploy.sh +++ b/deploy-dev.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash APP_NAME=devdevdev -REPOSITORY=/home/ubuntu/devdevdev +REPOSITORY=/home/ec2-user/devdevdev echo "> Check the currently running container" CONTAINER_ID=$(docker ps -aqf "name=$APP_NAME") diff --git a/deploy-prod.sh b/deploy-prod.sh new file mode 100644 index 00000000..253c1ee2 --- /dev/null +++ b/deploy-prod.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +APP_NAME=devdevdev +REPOSITORY=/home/ubuntu/devdevdev + +echo "> Check the currently running container" +CONTAINER_ID=$(docker ps -aqf "name=$APP_NAME") + +if [ -z "$CONTAINER_ID" ]; +then + echo "> No such container is running." +else + echo "> Stop and remove container: $CONTAINER_ID" + docker stop "$CONTAINER_ID" + docker rm "$CONTAINER_ID" +fi + +echo "> Remove previous Docker image" +docker rmi "$APP_NAME" + +echo "> Build Docker image" +docker build -t "$APP_NAME" "$REPOSITORY" + +echo "> Run the Docker container" +docker run -d -p 8080:8080 --name "$APP_NAME" -v /home/ubuntu/pinpoint-agent-3.0.1:/pinpoint-agent "$APP_NAME" \ No newline at end of file