Java + Spring 을 사용하였습니다
CICD 란?
CI ( Continuous Integration )
- 여러 개발자가 하나의 프로젝트를 같이 개발할 때 생기는 불 일치를 최소화 해주는 개념
- 애플리케이션 변경 사항 반영 시 자동으로 빌드 및 테스트 되어 잘못된 코드가 공유되는 것을 방지한다 → 코드의 신뢰성을 높이는 개념
CD ( Continuous Deployment )
- 프로젝트의 변경 사항을 가상 환경에서 자동으로 배포하는 것을 의미
- 변경 사항을 배포할 때 사용하는 파이프라인을 공유하여 번거로움을 없앨 수 있다
- 배포 플로우를 자동화하여 누구나 동일한 플로우로 배포할 수 있게 만들어주는 개념
Github Actions와 CodeDeploy를 사용한 CICD
Github Actions란 ?
- github에서 제공하는 cicd 툴이다
- 필요한 workflow ( ex. build, test, deploy ) 를 등록해주면 github의 특정 이벤트 ( ex. push, pull request ) 가 발생했을 때 해당 workflow를 수행한다
아래 사진과 같은 흐름으로 CICD가 진행된다
EC2 설정 추가
Tag 추가
CodeDeploy 를 생성할 때 어떤 인스턴스에서 수행할 지 구분하는 값으로 태그를 사용하기 때문에 추가가 필요
키 값을 입력하고 저장한다. 값은 비워놓아도 된다
EC2 전용 IAM 역할 추가
EC2 인스턴스에서 S3에 올려놓은 파일에 접근할 수 있도록 권한 주어야 한다
[ IAM - 역할 - 역할만들기 ] 를 클릭한다
IAM 역할을 연결할 서비스로 EC2를 선택한다
EC2 인스턴스에서 S3 접근할 수 있도록 AmazonS3FullAccess 권한을 추가한다
원하는 이름 입력 후 역할 생성 완료
ec2 인스턴스에서 IAM 역할 수정을 클릭하여 방금 만든 IAM 역할을 선택한 뒤 저장한다
CodeDepoly Agent 설치
ec2에 접속하여 다음과 같이 codedeploy agent를 설치해준다
$ sudo apt update
$ sudo apt install ruby-full
$ sudo apt install wget
$ cd /home/ubuntu
$ wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
$ chmod +x ./install
$ sudo ./install auto > /tmp/logfile
$ sudo service codedeploy-agent status
AWS S3 생성
빌드한 프로젝트 코드를 압축해서 S3에 저장한 후 EC2 서버에서 S3에 접근하여 압축한 파일을 가져오기 위해 사용
S3 메뉴로 이동해서 버킷 만들기 를 누릅니다
버킷 이름을 설정하구 버킷 생성을 완료한다
나머지 설정들은 변경할 필요 없이 기본값 그대로 두면 된다
AWS CodeDeploy 생성
CodeDeploy 전용 IAM 역할 만들기
위에서 했던 것과 같이 IAM 서비스로 이동해서 역할 만들기를 선택한다
CodeDeploy를 검색한 후 가장 기본적인 걸 선택
역할 이름을 지은 후 역할 생성을 눌러 마무리한다
CodeDeploy 애플리케이션 및 배포그룹 생성
배포-애플리케이션-애플리케이션 생성을 클릭한다
원하는 이름을 입력 후 컴퓨팅 플랫폼은 EC2/온프레미스 를 선택하고 애플리케이션을 생성한다
방금 만든 애플리케이션에서 배포 그룹을 생성한다
원하는 배포 그룹 이름, 역할, 유형을 설정한다. 서비스 역할은 방금 만든 IAM 역할을 선택한다
태그 그룹 1 에서 위에서 만든 우리 인스턴스 태그를 선택하여 어떤 인스턴스에서 동작할 지 선택한다
나머지 설정들은 아래와 같이 한다
CodeDeploy에서 IAM 역할 설정을 해주었으므로 위에서 설치한 codedeploy-agent를 재시작 해주어야 잘 적용된다
$ sudo service codedeploy-agent restart
Github Actions 에서 사용할 IAM 사용자 추가
Github Actions 에서 AWS 를 접근할 수 있는 권한 부여
사용자 이름을 추가하고 Github Actions 에서 사용해야 하기 때문에 IAM 사용자를 생성하고 싶음을 체크합니다
Github actions 워크 플로우에서 CodeDeploy 를 실행해야 하기 때문에 직접 정책 연결에서 다음 두 권한을 추가한 후 사용자 생성을 완료한다
- AWSCodeDeployFullAccess
- AmazonS3FullAccess
[IAM → 사용자 →사용자 선택 → 보안 자격 증명 → 액세스 키 만들기]에서 기타를 선택한다
액세스 키 이름을 지정해준다
만들어진 액세스 키와 비밀 액세스 키는 따로 저장해두어야 한다
[ GitHub - Settings - Secrets and variables - Actions ]에서 New repository secret을 클릭하여 AWS_ACCESS_KEY_ID와 AWS_SECRET_ACCESS_KEY 키를 등록해준다
gitignore한 설정 파일들이 있다면 같이 등록해준다 → 우리 프로젝트에서는 추가로 secrets.PROPERTIES,secrets.DATABASE_YML,secrets.HTTP_YML, secrets.MAP_YML ,secrets.S3_YML,secrets.SECURITY_YML 를 등록해주었다
다음과 같이 CICD를 위한 기본 세팅들을 완료하였습니다
다음 글에서는 본격적으로 코드를 작성하겠습니다 🧑🏻💻