인프런 커뮤니티 질문&답변

seohyeonjin787님의 프로필 이미지
seohyeonjin787

작성한 질문수

비전공자도 이해할 수 있는 CI/CD 입문·실전

[실습] 일반 프로젝트에서 많이 쓰는 CI/CD 구축 방법

일반 프로젝트에서 많이 쓰는 CI/CD 구축 방법의 스크립트 질문

해결된 질문

작성

·

176

1

      - name: SSH(원격접속)로 EC2에 접속하기
        uses: appleboy/ssh-action@v1.0.3
        #env:
          #APPLICATION_PROPERTIES: ${{ secrets.APPLICATION_PROPERTIES }}
        with:
          #SSH로 접속할 때 필요한 값들이 있음. IP주소, ubuntu, 키페어 (EC2에 접속하기 위한 과정)
          host: ${{ secrets.EC2_HOST }}
          username: ${{ secrets.EC2_USERNAME }}
          key: ${{ secrets.EC2_PRIVATE_KEY }}
          #envs: APPLICATION_PROPERTIES
          #문제가 있으면 스크립트 중단.
          script_stop: true
          script: |
            rm -rf /home/ubuntu/instargram-server/current
            mkdir /home/ubuntu/instargram-server/current
            mv /home/ubuntu/instargram-server/tobe/project.jar /home/ubuntu/instargram-server/current/project.jar
            cd /home/ubuntu/instargram-server/current
            sudo fuser -k -n tcp 8080 || true
            nohup java -jar project.jar > ./output.log 2>&1 &
            rm -rf /home/ubuntu/instargram-server/tobe

스크립트에서 실행 순서에 대한 질문입니다.

기존에 있던 서버는 current 파일의 project.jar 로 실행되고 있었을텐데 current 파일을 먼저 날리고 기존의 서버를 종료시켜 주는 부분이 이해가 되지 않습니다.

 

아마도 제 생각에는 current 폴더 안의 project.jar로 실행되고 있던 8080포트의 프로세스가 current 폴더를 삭제해주면 에러가 생길 것 같은데 에러가 생기지 않는 이유가 궁금합니다. 프로젝트 종료 -> 프로젝트가 담겨있던 폴더 삭제 -> 새 프로젝트 폴더 생성 순으로 가야 할 것 같은데 기존 프로젝트 폴더 삭제 -> 새 프로젝트 폴더 생성 -> 프로젝트 이동 -> 기존 프로젝트 종료 -> 새 프로젝트 실행 이런 순서로 해도 에러가 안나는 이유가 궁금합니다. 두서없이 써서 죄송합니다 ㅎㅎ;

답변 1

2

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

안녕하세요 seohyeonjin787님!

충분히 궁금해하실 수 있는 부분으로 질문 잘 해주셨습니다!

 

스크립트의 순서는 말씀해주신 순서인 '프로젝트 종료 -> 프로젝트가 담겨있던 폴더 삭제 -> 새 프로젝트 폴더 생성 순'으로 작성하셔도 괜찮습니다!

 

그런데 위의 스크립트 코드도 정상적으로 작동하는 이유는,
실행하고 있는 프로젝트의 파일에 대한 내용이 컴퓨터 메모리에 이미 복사되어 올라가있기 때문이에요!

그래서 프로젝트의 원본 파일을 지우더라도 프로젝트의 파일 내용이 컴퓨터 메모리에 여전히 남아있는 상태이기 때문에 에러가 안 나고 여전히 정상적으로 서버가 실행되고 있는 것입니다.

 

위 설명 중에 이해 안 되시는 부분이 있다면 편하게 또 질문 남겨주세요:D

seohyeonjin787님의 프로필 이미지
seohyeonjin787

작성한 질문수

질문하기