[항해99]

DOCKER, TRAVIS CI, GITHUB 연결 (1)

프잘백 2022. 3. 24. 04:08
728x90

프로젝트를 도커로 띄우는 데 성공했다.

이제는 travis CI를 이용해 git push 할 때마다 docker image를 새로 띄우는 작업을 자동화 했으면 좋겠다.

 

내가 원하는 프로세스는

travis CI가 push를 인식 -> 테스트 코드 실행 -> 성공하면 운영환경의 이미지 build -> 빌드된 이미지를 ->dockerhub에 보낸다

-> AWS ec2에 dockerhub에 이미지를 보냈다고 알림 -> AWS ec2에서 DockerHub에 있는 이미지를 가져온 후 배포 

..

 

그래서 먼저 travis CI에 github 계정을 연결하고 travis CI에서 제공하는 무료 plan을 이용하기로 했다.

https://app.travis-ci.com/

 

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

 

7번의 시행착오끝에 해냄

 

여기까지 되면 남은건 AWS와 DOCKER HUB 연동뿐이다.

다음 포스팅에 이어서...