1. 준비 작업
가. 작업 흐름
1) 빌드
•
(1) Github Actions에서 프로젝트 빌드 후, jar 파일을 압축해서 S3에 업로드
•
(2) CodeDeploy에게 S3의 빌드파일(jar)로 배포 진행 요청
2) 배포
•
(3), (4) CodeDeploy는 CodeDeploy Agent에게 배포 작업 시작 명령
→ CodeDeploy Agent는 S3에서 jar파일을 받아서 스크립트에 따라 배포 진행
•
배포 실행 시, Nginx Switching 기술에 따라 새로운 WAS(8082 포트로 통신)가 생성되어 무중단 배포 가능
나. 프로젝트 생성
1) 간단한 CRUD 앱 활용
다. workflow 생성
•
테스트 제외하고 빌드
→ 추후 테스트 포함하여 빌드하도록 수정
workflow 스크립트
2. S3에 jar 파일 업로드
가. S3 bucket 생성 및 설정
1) S3 bucket 생성
2) 퍼블릭 엑세스 차단
•
IAM으로 최소한의 권한 생성하여 workflow 설정할 예정
나. IAM
1) 배포서버의 권한 설정
•
S3 Full Access
•
CodeDeploy Full Access
다. workflow 수정
1) 환경변수 정의
•
env: script에서 사용할 환경 변수 정의
# logging-deploy.yml
on: workflow_dispatch:
env: # 새로 추가한 부분
S3_BUCKET_NAME: build-file-storage
PROJECT_NAME: jdbc_template_test
jobs:
build:
runs-on: ubuntu-latest
Bash
복사
2) Steps 추가
•
$GITHUB_SHA: GitHub Actions에서 제공하는 환경변수
→ 커밋의 해쉬값 지정됨
•
AWS credentials 설정은 S3 CLI 사용을 위한 선결조건
jobs:
build:
runs-on: ubuntu-latest
steps:
# 중략
### 새로 추가한 부분 ###
- 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_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_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/$PROJECT_NAME/$GITHUB_SHA.zip
Bash
복사
3) GitHub Secrets 설정
•
IAM의 access key, secret key, region 정보를 GitHub 환경변수로 설정
→ GitHub Repository - Settings - Secrets - Repository Secret
→ Environment secrets이 아니라 Repository Secret에서 환경변수를 설정해야 함
3. CodeDeploy 설정
가. CodeDeploy Agent 설정
1) CodeDeploy Agent 설치
•
CodeDeploy 리소스 키트 파일 다운로드
2) EC2에 권한 부여
•
EC2에 S3, CodeDeploy에 대한 권한 부여
→ 서비스에 대한 권한 부여이므로 IAM의 '역할 생성'
•
EC2 인스턴스 - 보안 - IAM 역할 수정
→ IAM 적용(S3, CodeDeploy Full Access)
3) CodeDeploy에 권한 부여
•
CodeDeploy에 CodeDeployRole
4) CodeDeploy 서비스 실행
나. CodeDeploy 스크립트 작성
1) 스크립트 파일 생성
•
프로젝트 내 appsepc.yml 스크립트 작성
→ CodeDeploy Agent가 참조할 스크립트
# appspec.yml
version: 0.0
os: linux
files:
- source: /
destination: /home/ubuntu/jdbc_template_test/ # 프로젝트 이름
overwrite: yes
permissions:
- object: /
pattern: "**"
owner: ubuntu
group: ubuntu
Bash
복사
2) workflow 스크립트 추가
### S3의 빌드파일로 배포 실행 ###
- name: Code Deploy
run: aws deploy create-deployment --application-name deploy-server --deployment-config-name CodeDeployDefault.AllAtOnce --deployment-group-name issue-tracker --s3-location bucket=$S3_BUCKET_NAME,bundleType=zip,key=$PROJECT_NAME/$GITHUB_SHA.zip
Bash
복사