fix: @Transactional 수정 및 로직 통일 #52
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # github repository actions 페이지에 나타날 이름 | |
| name: WildFirePrediction CI/CD (using github actions & docker) | |
| # event trigger | |
| # main브랜치에 push, pull request가 되었을 때 실행 | |
| on: | |
| push: | |
| branches: [ "main" ] | |
| # 코드의 내용을 이 파일을 실행하여 action을 수행하는 주체(Github Actions에서 사용하는 VM)가 읽을 수 있도록 허용합니다. | |
| permissions: | |
| contents: read | |
| # 실제 실행될 내용들을 정의합니다. | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest # ubuntu 최신 버전에서 script를 실행 | |
| # main 브랜치에 대한 push 이거나, main 대상으로 한 PR이 merge되었을 때만 실행 | |
| if: > | |
| github.ref == 'refs/heads/main' && github.event_name == 'push' || | |
| github.event_name == 'pull_request' && | |
| github.event.action == 'closed' && | |
| github.event.pull_request.merged == true | |
| # 지정한 저장소(현재 REPO)에서 코드를 워크플로우 환경으로 가져오도록 하는 github action | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - name: Set up JDK 21 | |
| uses: actions/setup-java@v3 | |
| with: | |
| java-version: '21' | |
| distribution: "temurin" | |
| # gradle caching - 빌드 시간 향상 | |
| - name: Gradle Caching | |
| uses: actions/cache@v3 | |
| with: | |
| path: | | |
| ~/.gradle/caches | |
| ~/.gradle/wrapper | |
| key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} | |
| restore-keys: | | |
| ${{ runner.os }}-gradle- | |
| # Github secrets로부터 데이터를 받아서, 워크 플로우에 파일을 생성 | |
| - name: make application.yml | |
| run: | | |
| mkdir -p ./src/main/resources # 디렉토리가 없으면 생성 | |
| touch ./src/main/resources/application.yml # application.yml 파일 생성 | |
| echo "${{ secrets.YML }}" > ./src/main/resources/application.yml # github actions에서 설정한 값을 application.yml 파일에 쓰기 | |
| shell: bash | |
| # gradle을 통해 소스를 빌드. | |
| - name: Build with Gradle | |
| run: | | |
| chmod +x ./gradlew | |
| ./gradlew clean build -x test | |
| # dockerfile을 통해 이미지를 빌드하고, 이를 docker hub로 push 합니다. | |
| - name: Docker build and push Docker image | |
| run: | | |
| docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_TOKEN }} | |
| docker build -f Dockerfile -t ${{ secrets.DOCKER_USERNAME }}/wfp . | |
| docker push ${{ secrets.DOCKER_USERNAME }}/wfp | |
| # appleboy/ssh-action@master 액션을 사용하여 지정한 서버에 ssh로 접속하고, script를 실행합니다. | |
| # script의 내용은 도커의 기존 프로세스들을 제거하고, docker hub로부터 방금 위에서 push한 내용을 pull 받아 실행하는 것입니다. | |
| - name: Deploy to server | |
| uses: appleboy/ssh-action@master | |
| id: deploy | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ubuntu | |
| key: ${{ secrets.EC2_KEY }} | |
| envs: GITHUB_SHA | |
| script: | | |
| # 실행 중인 컨테이너 정리 | |
| RUNNING_CONTAINER=$(docker ps -q --filter "ancestor=${{ secrets.DOCKER_USERNAME }}/wfp") | |
| if [ ! -z "$RUNNING_CONTAINER" ]; then | |
| echo "Stopping running container..." | |
| docker stop $RUNNING_CONTAINER | |
| docker rm $RUNNING_CONTAINER | |
| fi | |
| # 8080 포트를 점유 중인 프로세스 강제 종료 | |
| PID=$(sudo lsof -t -i:8080) | |
| if [ ! -z "$PID" ]; then | |
| echo "Killing process on port 8080..." | |
| sudo kill -9 $PID | |
| fi | |
| # 최신 이미지 pull 후 실행 | |
| sudo docker pull ${{ secrets.DOCKER_USERNAME }}/wfp | |
| sudo docker run -d -p 8080:8080 ${{ secrets.DOCKER_USERNAME }}/wfp | |
| docker image prune -f |