PR을 올리고 deploy까지 다 된걸 깃허브상에서 확인했는데 서버에 코드 반영이 굉장히 느리게 됨
그 이유를 찾고있다
이게 깃허브에서 올라가는게 아니라 내 인텔리제이에서 boot.jar가 만들어져서 cicd되는거임? name: deploy
on:
pull_request:
branches:
- dev
# - main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set up JDK 17
uses: actions/setup-java@v1
with:
java-version: 17
- name: Grant execute permission for gradlew
run: chmod +x ./gradlew
shell: bash
- name: Build with Gradle
run: ./gradlew clean build --stacktrace
shell: bash
- name: Make zip file
run: zip -qq -r ./$GITHUB_SHA.zip .
shell: bash
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.ACCESS_KEY_SECRET }}
aws-region: ap-northeast-2
- name: Upload to S3
run: aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.zip s3://moayoeats/$GITHUB_SHA.zip
- name: Code Deploy
run: aws deploy create-deployment --application-name moayoeats --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name dev --s3-location bucket=moayoeats,bundleType=zip,key=$GITHUB_SHA.zip
ChatGPT
ChatGPT
이 GitHub Actions workflow는 주로 Java로 작성된 Spring Boot 애플리케이션을 빌드하고, AWS S3에 업로드한 후 AWS CodeDeploy를 사용하여 배포하는 작업을 수행합니다. 각 단계에 대한 간략한 설명은 다음과 같습니다:
1.
Checkout: 소스 코드를 가져오기 위해 GitHub 저장소를 체크아웃합니다.
2.
Set up JDK 17: JDK 17을 설치합니다.
3.
Grant execute permission for gradlew: Gradle wrapper에 실행 권한을 부여합니다.
4.
Build with Gradle: Gradle을 사용하여 프로젝트를 빌드합니다.
5.
Make zip file: 빌드된 결과물을 압축 파일로 만듭니다.
6.
Configure AWS credentials: AWS 액세스 키 및 시크릿 키를 사용하여 AWS 자격 증명을 구성합니다.
7.
Upload to S3: 빌드된 애플리케이션을 AWS S3 버킷에 업로드합니다.
8.
Code Deploy: AWS CodeDeploy를 사용하여 배포를 수행합니다. aws deploy create-deployment 명령어를 통해 CodeDeploy 애플리케이션, 배포 구성 및 배포 그룹을 지정하고, S3에 업로드한 압축 파일을 사용하여 배포를 시작합니다.
이 workflow는 주로 CI/CD (Continuous Integration/Continuous Deployment) 프로세스의 일부로 사용되며, 변경 사항이 푸시되거나 pull request가 생성될 때 dev 브랜치에서만 실행됩니다. 배포는 AWS CodeDeploy를 통해 수행되며, S3 버킷을 통해 빌드된 애플리케이션을 제공합니다.
You
그럼 내가 깃허브에 pr올릴때 깃허브에서 boot.jar를 생성하는게 아니라 그냥 내 데스크탑의 인텔리제이에서 생성된 boot.jar가 올라가는 거야?
ChatGPT
ChatGPT
네, 맞습니다. 주어진 GitHub Actions workflow를 살펴보면, 빌드 단계에서 ./gradlew clean build 명령어를 사용하여 Gradle을 통해 프로젝트를 빌드하고, 그 결과물로 생성된 JAR 파일을 사용하지 않고 압축 파일로 만들고 S3에 업로드한 후 AWS CodeDeploy를 통해 배포합니다.
따라서 GitHub Actions를 사용하여 pull request를 올릴 때, 빌드는 GitHub에서 진행되며, 생성된 압축 파일이 S3에 업로드되어 AWS CodeDeploy를 통해 배포됩니다. 이 과정에서 로컬 인텔리제이에서 생성된 boot.jar 파일이 직접적으로 GitHub에 업로드되거나 사용되는 것은 아닙니다.
boot.jar 파일은 GitHub Actions의 빌드 단계에서 생성됩니다. 더 구체적으로 말하면, 다음 단계에서 생성됩니다:
yamlCopy code
- name: Build with Gradle
run: ./gradlew clean build --stacktrace
shell: bash
YAML
복사
이 단계에서 ./gradlew clean build 명령어를 사용하여 Gradle을 실행하여 프로젝트를 빌드하게 됩니다. 이 빌드 과정에서 Spring Boot 애플리케이션의 소스 코드 및 종속성들이 컴파일되고 build/libs 디렉토리에 boot.jar 파일이 생성됩니다.
그리고 나서 빌드된 애플리케이션은 다음 단계에서 압축 파일로 만들어지고 S3에 업로드되며, 마지막으로 AWS CodeDeploy를 통해 배포됩니다.
이 GitHub Actions workflow에서 boot.jar은 다음 단계에서 생성됩니다:
yamlCopy code
- name: Build with Gradle
run: ./gradlew clean build --stacktrace
shell: bash
YAML
복사
여기서 ./gradlew clean build 명령어를 사용하여 Gradle을 실행하고, 이를 통해 Spring Boot 프로젝트를 빌드합니다. Spring Boot 프로젝트의 빌드 결과물로서, 보통은 build/libs 디렉토리에 위치한 JAR 파일 중에서 boot.jar가 생성됩니다.
따라서 이 빌드 단계는 GitHub Actions workflow가 실행되는 환경에서 빌드를 수행합니다. 따라서 만약 당신이 로컬 인텔리제이에서 빌드한 JAR 파일이 아닌 GitHub Actions workflow에서 생성된 boot.jar 파일이 S3에 업로드되고 서버에 배포됩니다.
You
GitHub Actions workflow에서 생성된 boot.jar 파일은 내 데스크탑이랑 상관이 없는거지?
ChatGPT
ChatGPT
네, 맞습니다. GitHub Actions workflow에서 생성된 boot.jar 파일은 GitHub의 원격 서버에서 빌드되고, 해당 서버의 환경에서 생성됩니다. 따라서 이 파일은 로컬 데스크탑 환경과 직접적인 관련이 없습니다.
GitHub Actions은 GitHub 쇼촏ㄴ무의 자체 서비스로, 코드를 푸시하거나 이벤트가 발생할 때 특정 작업을 수행하는 데 사용됩니다. 따라서 GitHub Actions workflow에서 빌드된 boot.jar 파일은 GitHub의 인프라에서 생성되었으며, 이 파일이 업로드되고 서버에 배포되는 것은 GitHub Actions workflow의 일부로 이루어집니다. 로컬 데스크탑에서의 빌드와는 별개의 환경입니다.