S3 bucket을 이용한 배포 자동화

yeon·2021년 5월 25일
1
post-custom-banner

호눅스 수업을 참고해서 배포 자동화 하는 법을 정리해보았다.

1. 로컬에서 빌드해서 jar파일 생성


2. S3에서 배포용 bucket 생성

예) my-bucket-practice00

3. 로컬에 aws cli 설치

aws 명령어를 사용하기 위해 aws cli를 설치해야한다.

brew install awscli
하고 aws configure 명령어로 access key, secret key, region을 설정한다.

access key랑 secret key 발급받는건 아래 링크에 나와있음
https://velog.io/@trycatch/AWS-CLI-설치하기
https://lovemewithoutall.github.io/it/aws-cli-configure/

4. jar파일을 S3 버킷으로 복사

스크린샷 2021-05-26 오전 12 42 44 jar파일을 s3 버킷으로 복사한다. aws s3 cp build/libs/jar 파일 s3://bucket이름/파일 이름(baseball.jar)

aws s3 ls s3://s3 버킷 이름/폴더이름
하면 잘 들어갔는지 확인할 수 있다.

5. ec2 서버로 접속 후 S3 access 정책이 연결된 role 추가해주기

ec2 서버로 접속하고, 내 ec2 인스턴스의 AMI는 ubuntu이기 때문에 aws cli 를 설치해야한다. (Amazon Linux를 사용하면 설치하지 않아도 됨)

sudo apt install awscli
위 명령어를 통해 aws cli를 설치한다.

aws s3 ls
를 입력하면 Unable to locate credentilas. You can configure credentials by running "aws configure"라는 문구가 뜬다.

S3에 access할 수 있는 권한을 ec2에 주는 작업을 해야한다.

IAM의 역할로 가서 ec2-s3-download 라는 role(역할)을 만들어준다.
AmazonS3FullAccess 라는 정책을 연결하고

스크린샷 2021-05-26 오전 12 54 45

작업 → 보안 → IAM 역할 수정에서 새로 생성한 ec2-s3-download 역할을 추가한다.

이렇게하고 ec2 서버에서
aws s3 ls를 입력하면 잘 실행될 것이다.

aws s3 cp s3://버킷이름/jar 파일 이름 ./ec2에 저장할 파일이름
입력하고 확인해보면 ec2에 jar파일이 잘 들어와있는 것을 확인할 수 있다.

6. 배포 자동화 하기 (Slack web hook 설정하기)

ec2 서버에서 배포 스크립트를 작성한다.

#!/bin/bash
IP=`curl -s 169.254.169.254/latest/meta-data/public-ipv4`
START="$IP 배포를 시작합니다."
END="$IP 배포가 완료되었습니다."

# real deploy script
CK=`aws s3 ls s3://my-bucket-practice00/baseball.jar`
if [[ ! $CK ]]; then
       echo "no need to build"
       exit 0
fi

curl -X POST --data-urlencod "payload={\"text\": \"$START\"}" 슬랙 웹훅 url

/usr/bin/fuser -k 8080/tcp
aws s3 cp s3://my-bucket-practice00/baseball.jar ./baseball.jar
nohup java -jar baseball.jar &
aws s3 rm s3://my-bucket-practice00/baseball.jar

curl -X POST --data-urlencod "payload={\"text\": \"$END\"}" 슬랙 웹훅 url

echo "Deploy end: `date`"

이제 ./build.sh 명령어로 쉘 스크립트를 실행한다.

s3에 빌드파일이 있으면 배포를 진행하고 없으면 no need to build가 뜬다.

  • ec2 인스턴스의 public 주소 알아내기
    curl -s 169.254.169.254/latest/meta-data/public-ipv4

  • 더불어 slack의 Webhook을 이용하여 배포 진행시 알람이 가도록 했다.
    curl -X POST --data-urlencod "payload={\"text\": \"$START\"}" 슬랙 웹훅 url
    슬랙 Webhook 사용하는법 참고 블로그

  • 포트 번호를 이용해서 실행중인 프로세스 죽이기
    /usr/bin/fuser -k 8080/tcp (전체 경로까지 적어야한다.)

7. 로컬에서 빌드하고 jar파일 s3로 복사하기 자동화

#!/bin/bash
./gradlew build
aws s3 cp build/libs/demo-0.0.1-SNAPSHOT.jar s3://my-bucket-practice00/baseball.jar
echo "Done!"

8. ec2에서 crontab으로 build.sh 1분마다 실행하기

ec2 서버에서 crontab -e 명령어 치고 아래와 같이 작성

* * * * *        /home/ubuntu/build.sh >> log.txt 2>&1

1분마다 build.sh를 실행하고 로그를 log.txt에 남긴다.

cat log.txt를 하면 로그가 보인다

post-custom-banner

0개의 댓글