etc/Weekend, I Learned

항해99 7주차 WIL(github action & docker를 이용한 자동 배포)

yusung_ 2022. 11. 8. 01:40

1. 가장 신경 쓴 부분

- 7주차 클론프로젝트를 진행하면서 가장 신경 쓴 부분은 첫째로 완성도였습니다. 무리하게 기능적으로 스코프를 넓힐게 아니라 FE와 협업을 해서 완성도를 높이는데에 초점을 맞췄습니다. 그러다보니 추가로 자동배포를 집중적으로 학습하고 실행에 옮길 수 있게 되었습니다.

 

2. 기술에 대한 정리

 

- github action & docker 를 이용한 자동 배포

  • Docker file 추가
    • FROM 명령어 부분 : Docker 버전을 Docker hub 내에서 필요한 자원을 검색해서 가져온다.
    • COPY 부분 : Project 내 build 파일 안의 lib 내에 있는 파일을 복사해서 넣어서 이미지화 시켜준다.
  • Build 확인 후 lib 파일 내에 jar 파일을 Dockfile 내의 jar 파일과 같은지 확인 해준다.

  • Docker hub에서 유저 생성 후 repository 생성 (docker image가 올라가는 저장소)

  • 전체 과정을 말하자면 github action에서 build -> docker image를 생성 -> docker hub에 image 업로드
    → 이것을 EC2에서 가져와서 구동해준다. 

  • deploy.yml : git actions에서 New workflow 생성 -> gradle 빌드하는 내용 정의 (파일 이름 자유 ex= main.yml)
    • on : 언제 실행이 되는지의 조건을 나타내준다. (main branch에 push 혹은 pull request가 발생할 때)
    • permission : 이 repository를 읽을 수 있게 해주는 permission (수정 권한)
    • build : 아래 내용의 과정에 대한 이름
  • Settins - Actions - New repository secret (사전에 key 등록)
    • APPLICATION_PROPERTIES / AWS_HOST_ADDRESS / DOCKERHUB_TOKEN / AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY / DOCKERHUB_USERNAME / SSH_PRIVATE_KEY 추가
  •  Private key에 맞는 ubuntu 실행 후 -> EC2 서버에 Docker 설치

 

# 전체적인 flow

EC2 서버 생성 → ssh private key에 맞는 ubuntu 실행
docker 설치(스크립트 따라서) → github actions의 secret에 필요한 파일들 추가(도커허브 토큰, properties 등등) → main.yml 내의 프로젝트 명들을 바꿔준다.
→ resource 파일이 없다고 에러가 뜨면 run: 아래 부분에 mkdir clone-backend(repository명)/src/main/resources 명령어 추가하고 start commit 클릭
→ gradlew 오류는 디렉토리 구조의 문제로 에러가 날 수가 있다. → 웬만해서는 작업할 때 test를 하면서 진행을 해야한다.