이전 글 읽으러 가기
배포 자동화 모식도
간단하게 피그마를 이용하여 Travis와 S3가 어떤 역할을 하고 어떤 방식으로 배포 자동화가 이루어지는 지 책에 있는 그림을 다시 그려보았습니다.
Travis CI와 S3 연동
이제는 위 모식도에서 1번을 위하여 준비합니다.
AWS CodeDeploy에서 바로 빌드하고 배포하는 방법도 있습니다. 하지만 배포와 빌드를 분리하여 빌드없이 배포하고 싶을 경우(기존의 배포 파일을 재사용)를 대비해 이렇게 분리하여 자동화 흐름을 만든다고 합니다.
그리고 S3를 사용하는 이유는 배포를 위한 CodeDeploy에는 `저장`기능이 없습니다. 따라서 우리가 빌드한 JAR 파일을 보관할 곳이 없고 배포 파일 보관 저장소로서 S3를 사용하는 것입니다.
AWS key 발급
저는 기존의 EC2와 S3를 사용하고 있었기에 회원가입이 되어있는 상태입니다. 만약 AWS 회원이 아니시라면 구글 검색을 통해 회원가입을 하시고 프리티어를 사용해보시는걸 추천드립니다.
먼저 IAM 에서 자동 배포를 해줄 사용자를 만들기 위해서 사용자 추가를 합니다.
사용자 이름은 원하는 이름으로 해주시면 됩니다.
S3 접근 정책과 CodeDeploy 접근 정책을 모두 부여합니다. 현재는 함께 정책을 부여하지만 실제 회사에서는 권한도 S3와 CodeDeploy를 분리하여 사용한다고 합니다.
이렇게 하고나면 다음 과같이 summary가 나오게 됩니다.
사용자를 만들게 되면 다음과 같은 액세스 키와 비밀 액세스 키가 발급됩니다. 이 키들을 Travis CI에서 사용할 예정입니다.
Travis에 Key 등록 하러 가기
다시 Travis로 돌아와 프로젝트 Settings로 이동하여 Environment Variables를 설정해주도록 합시다.
액세스키와 시크릿 키를 등록합니다.
이 등록된 값은 .travis.yml 에서 $AWS_ACCESS_KEY, $AWS_SECRET_KEY 란 이름으로 사용할 수 있습니다.
S3 버킷 생성
aws 에서 s3를 검색해 다음 s3 버킷 창으로 이동하여 배포 파일을 저장할 버킷을 만들겠습니다.
버킷의 이름같은 정보는 원하는대로 입력할 수 있습니다.
퍼블릭 액세스 접근은 모두 차단해야 합니다. 이유는 배포 파일을 아무나 자유롭게 접근이 가능하다면 배포 파일 내부의 주요 키값들을 탈취 당할 수 있기 때문입니다. 우리는 IAM 사용자의 키값을 이용해 접근하므로 사용하는데 지장이 없습니다.
S3로 업로드하도록 .travis.yml 설정
다음 코드를 다시 설정해주면 된다.
# 언어와 jdk의 버전을 지정한다.
language: java
jdk:
- openjdk11
# 어느 브랜치가 push 될 때 수행할지 지정한다.
# 오직 main 브랜치가 push될 때 수행하도록 지정하였다.
branches:
only:
- main
# 빌드 전에 gradlew의 권한을 추가한다.
before_install:
- chmod +x gradlew
# Travis CI 서버의 Home
# gradle을 통하여 의존성을 받게 되면 이를 캐시하여 배포할 때 마다 다시 받지 않도록 설정한다.
cache:
directories:
- '$HOME/.m2/repository'
- '$HOME/.gradle'
# main 브랜치에 push 되면 수행되는 명령어이다.
# 프로젝트 내에 권한이 추가된 gradlew를 활용하여 clean, build를 진행한다.
script: "./gradlew clean build"
# CI 실행 완료 시 작성한 이메일로 알람
notifications:
email:
recipients:
- v_donguk@naver.com
# deploy 명령어가 실행되기 전 전처리 과정
# CodeDeploy는 Jar 파일을 인식 못하므로 Jar+기타 설정 파일들을 모아 압축함.
before_deploy:
- zip -r backend_server * # 현재 위치의 모든 파일을 backend_server(프로젝트 이름) 이름으로 압축함
- mkdir -p deploy #Travis CI가 실행중인 위치에 디렉토리 생성
- mv backend_server.zip deploy/backend_server.zip # backend_server.zip 파일을 해당 디렉토리로 이동
# S3 파일 업로드 혹은 CodeDeploy로 배포 등 외부 서비스와 연동될 행위들을 선언.
deploy:
- provider: s3
access_key_id: $AWS_ACCESS_KEY # Travis repo settings에서 설정된 값
secret_access_key: $AWS_SECRET_KEY # Travis repo settings에서 설정된 값
bucket: ldu-springboot-build # S3 버킷 이름
region: ap-northeast-2 # 지역이름
skip_cleanup: true
acl: private # zip 파일 접근을 private으로 설정
local_dir: deploy # before_deploy에서 생성한 디렉토리에 있는 파일들만 S3로 정송
wait-until-deployed: true
on:
all_branches: true # 이 설정 없을시 S3 provider가 못올림.
간단한 오류해결하여 S3 업로드 성공.
- 오류 - Skipping a deployment with the s3 provider because this branch is not permitted: main
- 브랜치에 접근을 못하는 것 같았음. 위의 on: all_branches: true 추가 후 정상 작동.
짜잔~
다음 글에서는 Travis CI와 AWS S3, CodeDeploy를 연동하겠습니다!
'Infra > CI&CD' 카테고리의 다른 글
Docker를 통한 CI/CD (1) - Docker 이해와 설치 및 사용법 (0) | 2024.01.30 |
---|---|
Travis CI 배포 자동화 (3) - Travis CI, AWS S3, CodeDeploy 연동 (0) | 2022.08.21 |
Travis CI 배포 자동화 (1) - Travis 설정하기 (0) | 2022.08.21 |