Search
🛫

배포 자동화(feat. GitHub Actions, CodeDeploy)

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
복사

4. Nginx 설정

Reference