DOCKER, TRAVIS CI, GITHUB 연결 (1)
프로젝트를 도커로 띄우는 데 성공했다.
이제는 travis CI를 이용해 git push 할 때마다 docker image를 새로 띄우는 작업을 자동화 했으면 좋겠다.
내가 원하는 프로세스는
travis CI가 push를 인식 -> 테스트 코드 실행 -> 성공하면 운영환경의 이미지 build -> 빌드된 이미지를 ->dockerhub에 보낸다
-> AWS ec2에 dockerhub에 이미지를 보냈다고 알림 -> AWS ec2에서 DockerHub에 있는 이미지를 가져온 후 배포
..
그래서 먼저 travis CI에 github 계정을 연결하고 travis CI에서 제공하는 무료 plan을 이용하기로 했다.
Travis CI - Test and Deploy with Confidence
app.travis-ci.com
그리고 .travis.yml 파일을 작성해준다.
< .travis.yml >
language: node_js
branches:
only:
- main
services:
- docker
before_install:
- docker build -t tjddnjs7559/nemo_test -f ./Dockerfile.dev .
script:
- docker run -e CI=true tjddnjs7559/nemo_test npm run dev
after_success:
#각 이미지 빌드
- docker build -t tjddnjs7559/nemo_test .
#도커 허브 로그인
#아이디는 travis CI 홈페이지에 미리 넣어준다.
- echo "$DOCKER_HUB_PASSWORD" | docker login -u "$DOCKER_HUB_ID" --password-stdin
#빌드된 이미지 도커 허브에 push
- docker push tjddnjs7559/nemo_test
그런데 before_install에서 Dockerfile.dev 파일을 실행하는 도중 에러가 발생했다.
여기서 $를 쓰는 환경변수는 travis-ci 에서 불러와진 나의 git repository의 settings에서 직접 입력할 수 있다.
환경변수 설정까지 마치면 해야할 작은 작업들이 있다.
1. 프로젝트 최상위 폴더의 .git 파일을 삭제한다.
2. git rm --cached . -rf를 실행해서 폴더를 다시 인식하게 끔 캐시를 지워준다.
git rm --cached . -rf
3. git 원격저장소를 이용해 add , commit , push를 하면 travis-ci 에서 모니터링이 가능하다.
< Dockerfile.dev >
# 노드를 베이스로 생성
FROM node:16.13.1
# mysql이 실행 할 준비가 되고 나서 실행할 수 있도록
# dockerize는 도커 컨테이너의 실행순서를 결정해줄 수 있는 프로그램
# ENV DOCKERIZE_VERSION v0.2.0
# RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
# && tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz
# app 디렉토리 , working 디렉토리 생성
RUN npm install -g nodemon
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install dependencies
COPY package*.json ./
RUN npm install
# Bundle app source
COPY . .
# RUN chmod +x docker-entrypoint.sh
# ENTRYPOINT ./docker-entrypoint.sh
# Exports
EXPOSE 8080
CMD ["npm", "run", "dev"]
※ 이전 포스팅과 달리 db는 rds에서 실행 할 예정이라 dockerize와 docker-entrypoint 부분은 주석처리 했다.
문제는 Install dependencies에서 RUN npm install 하는 부분이었는데
이런 에러가 발생해서 어디부터 에러가 났는지 확인해보니..
위와 같이 FROM node:16.13.1 을 써줬음에도 불구하고
현재 버전이 node:0.10.48, npm:2.15.1 이라 모듈 설치가 안되는 에러였다.
node : 0.10.48은 nvm install 0.10 에서 같이 설치되는 듯 했고, 이 코드를 작성한 부분이 없어서 황당했다.
저 코드를 어떻게 핸들링 하는지 몰라서 헤메다가 stack overflow에서 해결했다 ㅠ
How can I install a specific node.js version on a PHP container on Travis CI? - Stack Overflow
How can I install a specific node.js version on a PHP container on Travis CI?
For a Laravel project I use Travis Ci with the language option as PHP. Besides PHP I want to do some Node JS testing. The default installed version of Node JS does not meet my requirements. How can I
stackoverflow.com
그리고 .travis.yml 파일을 수정하면서 해결했다.
language: node_js
- node
branches:
only:
- main
services:
- docker
before_install:
# node 버전 최신화
- nvm install node
- docker build -t tjddnjs7559/nemo_test -f ./Dockerfile.dev .
script:
- docker run -e CI=true tjddnjs7559/nemo_test npm run dev
after_success:
#각 이미지 빌드
- docker build -t tjddnjs7559/nemo_test .
#도커 허브 로그인
#아이디는 travis CI 홈페이지에 미리 넣어준다.
- echo "$DOCKER_HUB_PASSWORD" | docker login -u "$DOCKER_HUB_ID" --password-stdin
#빌드된 이미지 도커 허브에 push
- docker push tjddnjs7559/nemo_test
여기까지 되면 남은건 AWS와 DOCKER HUB 연동뿐이다.
다음 포스팅에 이어서...