인텔리제이 아이디어(IntelliJ IDEA) 커뮤니티 버전, Spring JPA 및 롬복(Lombok) 사용을 전제로 합니다.
- 스프링 부트 버전: 2.3.1
- Gradle 버전: 6.4.1
출처: 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
Travis CI (Continuous Integration)와 AWS Code Deploy를 이용하면 깃허브에 푸시만 해도 자동으로 웹 서비스가 빌드 및 배포되도록 할 수 있습니다.
하나의 EC2 계정에 여러 레퍼지토리를 빌드 및 배포할 수 있습니다. 아래 차례에서 6번 부분만 조심하면 됩니다.
자세한 내용은 위 출처에 나와 있으며, 이 게시물은 제가 나중에 다시 보기 위해 요약하였습니다.
travis-ci.org
에서 깃허브 아이디로 회원가입 및 로그인내 프로필 아이콘 > Settings
에서 깃허브 레퍼지토리 추가- AWS에서 Travis-CI가 접근할 수 있는 사용자를
IAM
에서 생성 S3
버킷 생성- IAM에서 EC2에 연동되는 코드 디플로이 역할(
Role
) 생성 후 EC2에 연동 - 코드 디플로이 역할(Role) 생성,
CodeDeploy
애플리케이션 및 배포 그룹 생성 - EC2 리눅스에 코드디플로이
에이전트
설치 .travis.yml
,appspec.yml
파일 생성 후 깃허브에 푸시
1. travis-ci.org 에서 깃허브 아이디로 회원가입 및 로그인
2. 내 프로필 아이콘 > Settings 에서 깃허브 레퍼지토리 추가
3. AWS에서 Travis-CI가 접근할 수 있는 사용자를 IAM에서 생성
https://console.aws.amazon.com/에서 IAM 선택
4. S3 버킷 생성
AWS S3은 파일을 저장할 수 있는 공간(버킷)을 제공하는 서비스입니다. 여기서 프로젝트 압축 zip을 Travis-CI와 AWS가 주고 받는 용도로 사용하기 위해 사용합니다.
5. IAM에서 EC2에 연동되는 코드 디플로이 역할(Role) 생성 후 EC2에 연동
6. 코드 디플로이 역할(Role) 생성, CodeDeploy 애플리케이션 및 배포 그룹 생성
7. EC2 리눅스에 코드디플로이 에이전트 설치
EC2 터미널에 접속한 다음 아래 명령어를 입력합니다.
aws s3 cp s3://aws-codedploy-ap-northeast-2/latest/install . --region ap-northeast-2
내려받기가 성공한 경우 아래 메시지가 콘솔에 출력됩니다.
download: s3://aws-codedploy-ap-northeast-2/latest/install to ./install
install
파일에 실행 권한을 부여합니다.
chmod +x ./install
install
파일로 설치를 진행합니다.
sudo service codedeploy-agent status
설치가 끝났으면 Agent가 정상적으로 실행되고 있는지 상태 검사를 합니다.
sudo service codedeploy-agent status
아래 메시지가 출력되었다면 정상입니다.
The AWS CodeDeploy agent is running as PID *******
8. .travis.yml, appspec.yml 파일 생성 후 깃허브에 푸시
.travis.yml
과 appspec.yml
파일을 Git 레퍼지토리의 루트 디렉토리에 넣고 다음과 같이 입력합니다.
그 전에 .travis.yml
에 사용할 변수를 설정합니다.
language: java jdk: - openjdk8 branches: only: - master # Travis CI 서버의 Home cache: directories: - '$HOME/.m2/repository' - '$HOME/.gradle' script: "./gradlew clean build" # CI 실행 완료 시 메일 전송 notifications: email: recipients: - [안내받을_이메일_주소] before_deploy: - mkdir -p before-deploy - cp scripts/*.sh before-deploy/ - cp appspec.yml before-deploy/ - cp build/libs/*.jar before-deploy/ - cd before-deploy && zip -r before-deploy * # before-deploy로 이동 후 전체 압축 - cd ../ && mkdir -p deploy - mv before-deploy/before-deploy.zip deploy/[프로젝트_이름].zip deploy: - provider: s3 access_key_id: $AWS_ACCESS_KEY secret_access_key: $AWS_SECRET_KEY bucket: [s3의_버킷_이름] region: ap-northeast-2 skip_cleanup: true acl: private local_dir: deploy wait-until-deployed: true - provider: codedeploy access_key_id: $AWS_ACCESS_KEY secret_access_key: $AWS_SECRET_KEY bucket: [s3의_버킷_이름] key: [프로젝트_이름].zip bundle_type: zip application: [코드디플로이_애플리케이션_이름] # 웹 콘솔에서 등록한 코드디플로이 애플리케이션 deployment_group: [바로위_코드디플로이_애플리케이션의_배포그룹_이름] region: ap-northeast-2 wait-until-deployed: true
[_한글_]
로 되어있는 부분들을 커스터마이징 하면 됩니다.
트래비스 빌드가 안되는 이유는 첫째, 확장자가 yml
이어야 합니다. (yaml
인 경우 동작이 안됐습니다) 둘째, 문법에 맞지 않으면 설정 파일을 인식하지 못하고 빌드가 되지 않습니다. 불편한 점은 설정 파일의 어디가 잘못되었는지 알려주지 않기 때문에 직접 찾아야 한다는 점입니다.
version: 0.0 os: linux files: - source: / destination: /home/ec2-user/[애플리케이션_파일들이_위치할_경로] overwrite: yes permissions: - object: / pattern: "**" owner: ec2-user group: ec2-user hooks: ApplicationStart: - location: deploy.sh # scripts/deploy.sh timeout: 60 runas: ec2-user
마지막으로 /scripts/deploy.sh
에 빌드 및 배포 작업을 실행할 스크립트 파일을 작성합니다. 이 부분은 프로젝트 성격에 따라 차이가 있을 수 있습니다.
#!/bin/bash REPOSITORY=/home/ec2-user/[애플리케이션_파일들이_위치할_경로] PROJECT_NAME=[프로젝트_이름] echo "> 빌드 파일 복사" cp $REPOSITORY/zip/*.jar $REPOSITORY/ echo "> 현재 구동중인 애플리케이션 pid 확인" CURRENT_PID=$(pgrep -fl ${PROJECT_NAME} | grep jar | awk '{print $1}') echo "> 현재 구동중인 애플리케이션 pid: $CURRENT_PID" if [ -z "$CURRENT_PID" ]; then echo "> 현재 구동중인 애플리케이션이 없으므로 종료하지 않습니다." else echo "> kill -9 $CURRENT_PID" kill -9 $CURRENT_PID sleep 5 fi echo "> 새 애플리케이션 배포" JAR_NAME=$(ls -tr $REPOSITORY/ | grep jar | tail -n 1) echo "> JAR Name: $JAR_NAME" echo "> $JAR_NAME 에 실행권한 추가" chmod +x $REPOSITORY/$JAR_NAME echo "> $JAR_NAME 실행" nohup java -jar \ -Dspring.config.location=classpath:/application-real.properties \ -Dspring.profiles.active=real \ $REPOSITORY/$JAR_NAME > $REPOSITORY/nohup.out 2>&1 &
1개의 댓글
외츤 · 2021년 6월 2일 10:55 오전
안녕하세요
Travis와 Github 연결을 하는 방법을 배우려고 들어왔는데,
제가 사용하는 Github의 연동이 끊어진 것 같아서 문의를 좀 드리고자 글을 남깁니다.
아래 주소에 있는 글을 읽어주시면 정말 큰 도움이 될 것 같아요..
https://blog.naver.com/kyo4588/222380425819