새로운 프로젝트에 github action을 이용하여 CI/CD를 구현하였다.
main 브랜치에 push가 되면 배포가 진행 되도록 설정해두었고 항상 성공하는 것을 확인 하였다.
name: CI/CD with Node.js and Docker
on:
push:
branches:
- main # 원하는 브랜치로 변경 가능
하지만 새로 만든 API를 확인하기 위해 요청을 보내보니 404에러가 발생했다.
이를 통해 최신 코드로의 배포가 제대로 이루어지지 않았음을 알게 되었다
처음엔 Docker Hub에 push가 잘 되지 않는것이라 판단하여 workflows에서 Docker Hub로 이미지를 push를 할때 문제가 발생하는것이라 생각하였다.
정말 그것 때문인지 확인을 하기 위해 SSH 환경에 들어가 아래 명령어를 입력하여 이미지에 최신 코드가 잘 들어가 있나 확인을 해 보앗다.
docker login
docker pull image_name:tag
docker run -it image_name:tag /bin/sh
컨테이너의 쉘에 접속한 후 폴더를 확인하고 최신 코드가 업데이트된 폴더로 이동한다.
cat myfile.txt
명령어로 최신코드로 이미지가 잘 push가 되었나 확인해 보았다.
확인 결과 최신 코드가 정상적으로 반영되어 있음을 확인했다.
그 다음 실행 중인 컨테이너가 Docker Hub에서 push한 최신 이미지를 사용하고 있는지 확인하기 위해 이미지 이름과 태그를 주의 깊게 살펴보았다.
docker ps
명령어를 사용하여 Docker 컨테이너의 목록을 확인했을 때 실행 중인 이미지가 Docker Hub에 push한 "yisuho/프로젝트명:태그"의 최신 이미지가 아니었다.
그래서 최신 코드가 반영이 되지 않았던 것이다.
docker-compose 파일을 확인해보니 로컬에 정의된Dockerfile을 기반으로 빌드가 이루어지고 있었다.
nest-server:
container_name: nest
env_file:
- .env
build:
context: .
dockerfile: Dockerfile
volumes:
- '.:/app'
ports:
- '3000:3000'
environment:
- NODE_ENV=development
이를 해결하기 위해 Docker Hub에 push 한 최신 이미지를 사용하도록 docker-compose 파일을 수정해 주었다.
nest-server:
image: yisuho/프로젝트명:태그
env_file:
- .env
container_name: nest
volumes:
- '.env:/app/.env'
ports:
- '3000:3000'
environment:
- NODE_ENV=production
image: yisuho/프로젝트명:태그 를 추가하여 "yisuho/프로젝트명:태그" 이미지를 사용할 수 있도록 해 주었다.
최신 이미지를 사용하여 배포가 된 것을 확인할 수 있었다.