이전에 실제 도메인을 사서 웹 사이트를 배포해보고 싶다는 마음에 만든 사이트가 있다.
오늘의 역사
css가...pc에서만 볼 수 있을 것이다....
내용과 css나 그런걸 떠나서 내가 하고자 했던건 실제 배포 환경 구축이였다.
그런데 이 과정이 시간이 지나면서 다 까먹었기 때문에 지금 간략하게나마 정리하려고 한다.
sudo yum install git
mkdir ~/app && mkdir ~/app/저장할디렉터리이름
cd ~/app/저장할디렉터리이름
git clone 깃주소
와 같은 방식으로 깃 프로젝트를 클론 했었다.
이러한 깃 클론을 이용하여 서버에 프로젝트를 받고, 새로운 코드들을 pull 하고 재 빌드하고 다시 프로젝트를 런하고... 이러한 과정들을 배포 라고 한다.
하지만 매번 작성한 코드들을 직접 명령어를 치면서 실행하는 것은 불편함이 많다.
그래서 우리는 script를 짜서 위의 명령들을 자동화 할 것이다.
예컨데,
1. 프로젝트로 이동
2. git pull
3. 빌드
4. jar파일 복사/이동
5. 현재 프로젝트 종료
6. 실행한 jar파일을 찾아 실행
이 과정을 script화 하여 편리하게 배포를 할 수 있다.
하지만 우리가 script를 실행할 필요도 없이 자동화 할 수 있다.
git에 소스코드가 반영되면 자동으로 빌드가 수행되면서 배포할 jar파일을 만드는 과정,
이 결과물을 운영 서버에 무중단 배포까지 하며 진행하는 것
이 둘을 CI(Continuous Integeration) & CD(Continuous Deployment), 지속적 통합과 배포
라고 부른다.
소스코드를 CI해주는 툴로는 젠킨스, Travis와 같은 것들이 있는 것 같은데
나는 제3의 툴을 더 이상 사용하기 싫어서 github에서 제공해주는 git actions
를 사용하였다.
name: Git Actions
on:
push:
branches:
- master
pull_request:
branches:
- master
env:
S3_BUCKET_NAME: S3버켓네임
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Grant execute permission for gradlew
run: chmod +x ./gradlew
shell: bash
- name: Grant execute permission for .sh
run: chmod +x scripts/*.sh
shell: bash
- name: Build with Gradle
run: ./gradlew build
shell: bash
- name: Make zip file
run: zip -r ./$GITHUB_SHA.zip .
shell: bash
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_S3_ACCESS_KEY}}
aws-secret-access-key: ${{ secrets.AWS_S3_SECRET_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- name: Upload to S3
run: aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.zip s3://$S3_BUCKET_NAME/$GITHUB_SHA.zip
- name: Code Deploy
run: aws deploy create-deployment --application-name 어플리케이션네임 --deployment-config-name CodeDeployDefault.AllAtOnce --deployment-group-name 배포그룹네임 --s3-location bucket=$S3_BUCKET_NAME,bundleType=zip,key=$GITHUB_SHA.zip
위의 script를 보면 깃에 master브랜치에 push, pull request 될 때마다 반영 되게 해놓았고,
build잡을 통해 jar파일을 .zip 형태로 만들어 S3 Bucket에 올리는 것을 확인 할 수 있다.
jar파일을 저장할 S3
저장소를 만들어준다. S3
에 올라간 jar 파일은 다시 AWS내에서 code deploy
라는 서비스를 통해 EC2
에 배포하게 된다.
code deploy
를 이용하기 전에 배포 대상인 EC2
가 code deploy
를 연동 받을 수 있게 IAM
역할을 생성했다.
그리고 EC2
에서 code deploy
를 이용할 수 있게 code deploy 에이전트
를 설치했다.
위의 과정들은 단순히 과정을 복기하고자 쓴 내용이고
이 과정안에 이루어졌던 많은 일들은 아직도 나에겐 너무 어렵다.
nginx를 이용하여 무중단 배포를 해보았고, https를 적용하기 위해 CA에서 인증서를 발급받고..
여러 일들이 있었는데 고작 한번 해본거로는 잘 정리가 안된다.
프로젝트를 진행할 때 정리를 해놨어야 조금은 기억이 날텐데 그 때는 급한 마음에 우선 빨리 만들어보자라는 식으로 여러 블로그나 책을 뒤져가며 코드만 급급하게 썻었다. 다시 한번 반성....
아무튼 위의 과정들을 시간이 되면 꼭 꼭 다시 한번 해보면서 모든 과정들을 기록하고 복기하자!!!!!