2022.7.28 기준
기본 실행 전략
브랜치 보호
- main 브랜치로 PR 했을 때, CI/CD 작업을 수행하는 GIthub Action workflow를 통과해야 merge할 수 있습니다.
CI
- Github Action에서 할당받은 가상 머신을 활용합니다.
- 테스트용 mysql을 가상 머신에 설치합니다.
- 소스 코드를 테스트한 뒤 jar로 build 합니다.
CD
- CI가 성공적으로 끝났을 때 실행됩니다.
- CI에서 빌드된 jar 파일을 docker image로 build합니다.
- build된 이미지를 dockerhub에 push 합니다.
- ssh를 통해 EC2에 접속한 뒤 아래 작업을 수행합니다.
- 실행중인 서버 컨테이너 종료 및 삭제
- dockerhub에서 새로운 이미지 pull
- 이미지 실행
애플리케이션 비밀 정보
🔐 Github Secret
현재 github secret으로 괸리하고 있습니다. 페이지
- AWS KMS 보다 나은 점
- AWS KMS는 데브코스 지원이 끊길 수 있음
- 유지보수 일원화(github secret와 KMS를 둘 다 관리하기는 번거롭다)
github action에서 사용합니다.
- 스크립트에서
${{ secrets.비밀 이름 }}
으로 접근할 수 있습니다.
저장된 secret은 다시 확인이 불가능합니다.
- 필요할 경우 담당자에게 물어보세요
- 수정 / 삭제는 가능합니다.
SECRET | 설명 |
DOCKERHUB_SECRET | 서버 애플리케이션 이미지 저장소 계정 Access Token |
DOCKERHUB_USERNAME | 서버 애플리케이션 이미지 저장소 계정 이름 |
RDBMS_PASSWORD | AWS RDS 비밀번호 |
RDBMS_URL | AWS RDS 엔드포인트 |
RDBMS_USERNAME | AWS RDS 사용자명 |
SERVER_SSH_HOST | AWS EC2 호스트 주소 |
SERVER_SSH_KEY | AWS EC2 SSH 비공개 키 |
SERVER_SSH_KEY_NAME | AWS EC2 SSH 비공개 키 파일 이름 |
SERVER_SSH_USER | AWS EC2 SSH 접속 목적지 : 사용자명@호스트 |
PINPOINT_HOST | PINPOINT collector 서버 호스트 IP |
AWS_ACCESS_KEY | s3 버킷 CRUD 권한을 가진 AWS 엑세스 키 |
AWS_S3_BUCKET | s3 버킷 이름 및 경로 |
AWS_S3_REGION | s3 버킷 지역 |
AWS_SECRET_KEY | s3 버킷 CRUD 권한을 가진 AWS 시크릿 키 |
배포용 application.yml 활용 시나리오
- docker container 실행 명령에서 환경 변수 지정
- 셸 스크립트 변수들은 github secret에서 가져옵니다.
# server_script sudo docker run -p 80:80 -d \ --env RDBMS_URL="$RDBMS_URL" \ --env RDBMS_USERNAME="$RDBMS_USERNAME" \ --env RDBMS_PASSWORD="$RDBMS_PASSWORD" \ $image_name
- Spring에서 application.yml을 읽어올 때 container에 설정된 환경 변수를 통해 비밀 정보를 읽어옵니다.
# application-prod.yml url: "jdbc:mysql://${RDBMS_URL}:3306/rg" username: ${RDBMS_USERNAME} password: ${RDBMS_PASSWORD}