2022. 7. 12. 13:46ㆍ☁️ Cloud
Travis CI 의 가입과정과 github 연동 과정은 생략.
Travis CI 의 흐름
이건 Travis 에만 한정된 내용은 아니고, github action, Jenkins, 등 다양한 CI tool 에 공통되는 내용이라 생각한다.
.travis.yml 파일 작성하기
Travis CI 를 이용해 테스트 코드를 실행하고 애플리케이션을 배포까지 하기 위해선 travis.yml 파일을 작성해주어야 한다.
.travis.yml
sudo: required
language: generic
services:
- docker
before_install:
- echo "start Creating an image with dockerfile"
- docker build -t tbnsok/docker-react-app -f Dockerfile.dev ./
script:
- docker run -e CI=true tbnsok/docker-react-app npm run test --coverage
after_success:
- echo "Test success"
- sudo : 관리자 권한 찾기
- language : 언어 (플랫폼) 선택
- services : 도커 환경 구성
- before_install : 스크립트를 실행할 수 있는 환경 구성
- docker build -t <사용자 아이디/이미지 이름> -f <개발환경 전용 도커파일> ./
- script : 실행할 스크립트 (테스트 실행)
- docker run -e CI=true <사용자 아이디/이미지 이름> npm run test --coverage
- 해당 도커 이미지 실행 후 테스트 까지 수행하는 명령어
- after_success : 테스트 성공 후 할 일
.travis.yml 파일 작성 완료 후 소스코드를 github 에 푸시해주면 자동으로 Travis CI 에서 빌드가 진행된다.
Travis CI 에서 테스트가 성공적으로 수행됐으니, 다음 단계로 AWS 같은 클라우드 호스팅 서비스에 배포를 해보자!
AWS Service 간단히 살펴보기
- EC2 (Elastic Compute Cloud)
- AWS 클라우드에서 제공하는 확장식 컴퓨팅으로, 하드웨어에 투자할 필요 없이 애플리케이션을 개발하고 배포할 수 있다. EC2 를 사용해 원하는 만큼 가상 서버를 구축하고 보안 및 네트워크 구성과 스토리지 관리가 가능하다.
- 쉽게 말해, EC2 인스턴스를 생성한다는 것은, 한대의 컴퓨터를 임대하는 것과 같다. 그 컴퓨터에 OS를 설치하고 웹서비스를 위한 프로그램(웹서버, DB 등) 을 설치하여 사용할 수 있다. 1대의 컴퓨터를 하나의 EC2 인스턴스라고 부른다.
- EB(Elastic Beanstalk)
- EB 는 EC2 인스턴스나 DB 처럼 다양한 요소를 포함한 "환경"을 구성하며 만들고 있는 소프트웨어를 업데이트 할 때 마다 자동으로 이 환경을 관리해준다.
- 즉 EB 는 환경이다. 어떤 환경이냐? 다양한 클라우드 컴퓨팅 서비스로 구성된 환경이다.
AWS EB 생성
하단의 환경 생성 버튼을 눌러준다.
Docker 를 플랫폼으로 사용하는 EB 가 생성됐다. 이제 해당 EB 에 Travis CI 가 소스코드를 배포할 수 있도록 세팅 해주자.
기존에 작성해뒀던 .travis.yml 파일에 아래처럼 Deploy 설정을 추가 작성해주자.
sudo: required
language: generic
services:
- docker
before_install:
- echo "start Creating an image with dockerfile"
- docker build -t tbnsok/docker-react-app -f Dockerfile.dev ./
script:
- docker run -e CI=true tbnsok/docker-react-app npm run test --coverage
after_success:
- echo "Test success"
-- 여기 아래부터 추가
deploy:
provider: elasticbeanstalk
region: "us-east-1"
app: "docker-react-app"
env: "Dockerreactapp-env"
bucket_name: "elasticbeanstalk-us-east-1-084448106455"
bucket_path: "elasticbeanstalk-us-east-1-084448106455"
on:
branch: main
access_key_id: $AWS_ACCESS_KEY
secret_access_key: $AWS_SECRET_ACCESS_KEY
- provider : 외부 서비스 표시 (elasticbeanstalk, s3, firebase 등)
- region : 현재 사용하고 있는 AWS 의 물리적 장소
- app : 생성한 애플리케이션 이름
- env : 환경 이름
- bucket_name : 해당 EB 를 위한 S3 버킷 이름. Travis CI 에서 보낸 소스코드를 압축하여 S3 에 저장하기 때문에 설정이 필요하다.
- on.branch : Github Repository 에서 어떤 브랜치에 푸시 됐을 때 AWS 로 자동 배포할 지 설정한다.
Travis CI 의 AWS 접근을 위한 API 생성
위에서 deploy 설정을 통해 Travis CI 와 AWS 간의 연결을 설정했지만, Travis CI 가 AWS 에 실질적으로 접근하기 위해선 인증 관련 키가 필요하다.
.travis.yml 파일에 AWS 에서 제공하는 Access_key 와 Secret_access_key 를 입력해줘야 한다. IAM 유저를 생성하여 키 값을 발급받자.
다음 버튼을 계속 눌러 사용자를 생성한다.
IAM 사용자를 발급받은 이유는 access key 와 Secret access key 를 얻기 위함이었다. 위 두 값은 한번 발급 받으면 다시 알 수 있는 방법이 없기 때문에 메모장 같은 곳에 꼭 복사를 해두자.
이제 이 key 를 .travis.yml 파일에 삽입하면 되는데, 잘 아시다시피 .travis.yml 파일은 깃허브에 올라가는 공개 파일이다. access key 같은 민감정보를 그대로 드러낼 수 없기 때문에, Travis 웹사이트의 해당 저장소에 키 값을 저장하는 방식을 택할 수 있다.
Travis CI 대시보드로 가서 settings 버튼을 누른다.
AWS IAM 유저 설정으로 발급 받은 key 를 Environment Variables 에 저장해준다. 이로써 민감 정보인 키 값을 github 로부터 감출 수 있다.
.travis.yml 의 deploy 설정 중 access_key_id 와 secret_access_key 의 value 자리에 $AWS_ACCESS_KEY, $AWS_SECRET_ACCESS_KEY
를 설정해주면 된다.
이로써 Travis CI 가 AWS 의 EB 에 접근할 수 있게 됐다. 이제는 Github 의 main 브랜치에 소스를 PUSH 하면 자동으로 AWS 에 소스코드가 전달되어 배포할 수 있게 됐다!
'☁️ Cloud' 카테고리의 다른 글
알림시스템 구축을 위한 SQS, SNS, MSK 비교 (0) | 2023.07.02 |
---|---|
[docker 에러] When using COPY with more than one source file, the destination must be a directory and end with a / (0) | 2022.07.18 |
Docker 개발/운영 환경 분리 (0) | 2022.07.12 |
Docker 간단한 node js 어플리케이션 실행하기 (0) | 2022.07.10 |
Docker 이미지 직접 만들어보기 (0) | 2022.07.09 |