GitHub Action을 곁들인 우당탕탕 CI/CD 적용기

시훈·2022년 6월 28일
11
post-thumbnail

(내용이 산만해도 이해 부탁드려요😉 , CI/CD가 무엇인지는 CICD란? 이 글에서 확인해보시는걸 추천해요!)

CD를 적용한 이유

2022년 클라우드 컴퓨팅 직종 지방기능대회가 끝나고 나서 학교 친구들과 함께 진행하기로 한
프로젝트를 진행하면서 있던 일이다 프로젝트의 자세한 내용은 이 글의 중심 내용이 아니니 넘기기로 하고
원래 서버의 프레임워크는 NestJS였다 그렇게 큰 프로젝트가 처음인 나는 우당탕탕 개발을 하기 시작했다

개발을 진행하면서 PR을 날리고 제대로 되는지 검사하기 위해 CI를 먼저 적용한 후 배포를 하는데
배포방법이 docker로 수동으로 테스트 서버에 올렸는데 안드로이드 , IOS , 프론트로 배포해야
하는 프로젝트 특성상 .env설정이 변경될 때가 많았다 하지만 매 .env가 수정될 때마다

docker build -> docker push -> docker run

을 하기엔 시간도 오래걸리고 귀찮음이 심했다 그렇게 나는 CD를 적용하기로 마음 먹었다...!

CD 적용기

우선 CD는 간단히 말하자면 배포 자동화 과정 이다.
CD를 할 수 있는 도구 중 나는 이번에 GitHub Action이라는 도구를 사용하게 되었다
GitHub Action은 깃허브에서 제공하는 CICD 도구이다!

우선 구글에 NestJS서버 Github Action으로 CD하기 같은 것들을 찾아보았다 자료는 많았지만
난 AWS에 EC2에 배포를 해야하기 때문에

- uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.HOST }}
          username: ubuntu
          key: ${{ secrets.SSH_KEY }}
          script: |
            sudo rm -rf /home/ubuntu/MSG-BackEnd-V2
            mkdir -p /home/ubuntu/MSG-BackEnd-V2

위와 같은 코드들로 내 EC2에 접속한 후 원래 있던 파일들을 삭제하고 폴더를 새로 생성하였다!
그 후

   - uses: burnett01/rsync-deployments@4.1
        with:
          switches: -avzr --delete
          remote_path: /home/ubuntu/MSG-BackEnd-V2
          remote_host: ${{ secrets.HOST }}
          remote_user: ubuntu
          remote_key: ${{ secrets.SSH_KEY }}

위 코드들로 내 파일들을 내 EC2에 만들어논 폴더로 .env등을 포함한 파일들을 복사하였다!
그 후 마지막으로

 - uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.HOST }}
          username: ubuntu
          key: ${{ secrets.SSH_KEY }}
          script: |
            cd sh
            sh deploy.sh

라는 코드로 내가 EC2에 만들어논 쉘스크립트 파일을 실행하도록 하였다 (쉘스크립트의 내용은 yarn install 후
그렇게 CD가 완성이 되었었다..! 기쁜 마음에 바로 적용을 시켜보였다 그렇게 내 서버는 CI/CD가 작동하기 시작했다..!

그러면 우당탕탕이 아니라 원트에 끝난거 아닌가요??

놀랍게도 그랬으면 정말 좋았었겠지만..
사실 위 코드들로 구성하기전 내 계획은

 - uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.HOST }}
          username: ubuntu
          key: ${{ secrets.SSH_KEY }}
          script: |
            cd MSG-BACKEND-V2
            yarn install frozen lockfile
            yarn build
            nohup yarn start:prod &

에서 스크립트의 내용들을 yarn install frozen lockfileyarn build로 제대로 작동하는 코드인지 체크 후 성공하면 nohup yarn start:prod &로 실행하고 싶었다
하지만 계획대로 되는것이 없었다 무슨 오류인진 모르겠지만 서버는 실행됬지만 빌드 성공이 안뜨고 계속 빌드가 무한으로 돌아가고 있었다...
결국 위와 같은 에러를 해결해내지 못하고 docker를 사용하게 되었다.

Docker로 배포하는 CD의 문제점


사실 CD는 Docker로 했을때도 성공하였었다 근데 잘 동작중 문제점이 생겼었다 내가 짠 로직은
내 EC2에서 docker파일로 빌드를 하고 빌드한 이미지를 실행하였었다 근데 한 10번 정도 CD가 작동 후
알수없는 에러가 발생하기 시작했다 아무리 고쳐도 고쳐질 생각을 하지않아 아는 선배에게 조언을 구했더니 원래있던 이미지들이 계속해서 삭제되지 않고 쌓여서 생기는 문제였다고 한다 고치는 방법은 있었지만 시간이 너무 없었기 때문에 처음에 방법인 쉘스크립트를 통해 서버를 실행시키게 되었다.

CI/CD를 적용 후 좋아진점

CI/CD를 적용하고 나니 main브런치에 push가 될떄마다 EC2에 서버가 갱신되니 행복해졌다😀
그리고 무엇보다 에러가 나면 우리에게 알려주는게 너무 좋았다 원래대로면 머지가 다되고나서 서로 일일히 코드의 에러를 찾아다녔는데 이제는 그럴 필요가 없어졌다!

느낀점

이번 프로젝트에서 만든 CD는 정석에서 많이 벗어난거 같다 나중에 시간이 된다면 정석대로 만들어보고 싶고 Heroku라는 도구를 사용해보고 싶다 우리팀 모두 화이팅 했으면 좋겠다 🤗!

지금까지 소프트웨어마이스터고등학교 2학년의 마구잡이글 읽어주셔서 감사합니다 :)

profile
배움을 좋아하는 학생입니다.

8개의 댓글

comment-user-thumbnail
2022년 6월 28일

와 정말 이해가 잘돼요

1개의 답글
comment-user-thumbnail
2022년 6월 29일

역시 더모먼트 출신은 다르다...

1개의 답글
comment-user-thumbnail
2022년 6월 29일

감사합니다.

답글 달기
comment-user-thumbnail
2022년 7월 4일

I had a great time reading your essay and found it to be very beneficial. Please join me in playing five nights at freddy's if you have some free time.

답글 달기
comment-user-thumbnail
2022년 7월 5일

CI/CD의 시작은 필요성을 느끼는것이라고 생각하는데, 고등학생이신데 벌써 필요성을 느끼고 구축까지... 대단하시네요!

답글 달기
comment-user-thumbnail
2022년 11월 21일

What a nice post! Thank you so much and I am really looking forward to reading more and more articles from you. Keep posting in the future please
godskin apostle

답글 달기