Github Actions 기반의 CD(Continuous Delivery) 구축기

Dongkyu Ko
딜리버스
Published in
6 min readMar 31, 2022

--

이 글은 딜리버스의 Github Actions을 사용해 딜리버스의 CD Pipeline(Continuous Integration)을 구성하는 내용을 다룹니다.

Github Branch 및 인프라 환경

딜리버스는 총 4개의 클라우드 인프라 환경(dev, stage, beta, prod)을 가지고 있기 때문에 Github Branch 구성도 클라우드 인프라 환경과 동일하게 구성했습니다. 아래의 그림은 각 브랜치 머지(merge) 시 배포되는 딜리버스의 AWS 계정을 나타냅니다.

딜리버스 클라우드 환경에 대해 궁금한 내용이 있다면 아래 블로그에서 확인할 수 있습니다.

딜리버스 클라우드 인프라 구축기 Part 1

딜리버스 클라우드 인프라 구축기 Part 2

Branch 및 AWS 구조

Github Actions (Continuous Integration)

CD(Continuous Integration) 도구로 Github Actions을 사용하기로 했습니다. 유명한 Jenkins부터 TeamCity, GitLab 등이 있지만 Github Actions을 사용하게 된 이유는 다음과 같습니다.

Github Actions을 사용하게 된 이유

위와 같은 이유로 Github Actions을 사용하기로 결정했습니다. 물론 추후에 규모가 커진다면 다시 한번 생각해봐야겠지만 현재 딜리버스에서는 다양한 제품을 개발하고 있고 빠른 생산성을 요구하기 때문에 현실적인 판단이라고 생각했습니다.

아래의 내용부터는 Github Actions에 대한 기본적인 내용은 다루지 않기 때문에 Github Actions에 대한 기본적인 내용을 보시고 싶으면 Github Actions에공식 문서 확인 및 튜토리얼을 하신 후 보시길 권장합니다.

Github Actions Docs

Repositories

제품에 따라 Repositories을 나눴으며, 각 Repositories에 맞게 CD를 설정해줘야 합니다.

Github Repositories

Repositories 정보

  • daas-infra → IaC (Infrastructure as Code), AWS CDK
  • daas-react → Bunny App (PWA), Amplify
  • daas-server → 통합 서버, AWS ECS
  • daas-Lambda → 서버리스 (AWS SAM), AWS Lambda
  • [Public] delivus-aws-cdk-example → AWS CDK로 만든 Cloud Infra 예제

사전 준비 사항

1. AWS 계정 접근을 위해 CD 전용 사용자(AWS IAM) 계정 생성

  • AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY 필요

2. CD 결과 알림을 위한 Slack Token 생성

3. Github Organizations Secrets 또는 Github Repository Secrets에 Secret Key 등록 (민감한 정보 보안을 위해)

Infra CD (daas-infra, AWS CDK)

IaC(Infrastructure as Code)의 저장소인 daas-infra repository는 AWS CDK(Cloud Development Kit) 기반이며, 프로그래밍 언어는 Python을 사용하고 있습니다.

사전 준비 사항

  1. AWS CDK 기반으로 AWS 계정에 사전 배포

Github Actions Workflow

코드 실행 순서는 위에서부터 아래로

[daas-infra] Github Actions Workflow

실행 결과

실행 결과는 모든 CD 동일 (아래에서는 실행 결과에 대해 언급하지 않겠습니다.)

CD 성공

CD 성공

CD 실패

CD 실패

Server CD (daas-server, AWS ECS, ECR)

Server(daas-server repository)는 웹 애플리케이션 프레임워크인 Django를 사용했으며, 프로그래밍 언어는 Python을 사용하고 있습니다.

사전 준비 사항

  1. AWS 계정에 ECS, ECR 사전 배포 필요 (ECS Service 정상작동 필수)
  • AWS ECS, ECR이 사전에 만들어져 있고 배포한 정상적으로 서비스가 동작되어야함

Github Actions Workflow

코드 실행 순서는 위에서부터 아래로

[daas-server] Github Actions Workflow

Serverless CD (daas-lambda, AWS SAM)

SAM(daas-lambda repository)은 서버리스 애플리케이션을 구축할 때 사용할 수 있는 오픈소스 프레임 워크이며, 프로그래밍 언어는 Python을 사용하고 있습니다.

Github Actions Workflow

코드 실행 순서는 위에서부터 아래로

[daas-lambda] Github Actions Workflow

글을 마무리하며

지금까지 딜리버스의 첫 CD pipeline 구성 방법을 구성을 볼 수 있었습니다.

다음 블로그 주제는 “Daas AWS CodeDeploy Blue/Green 배포 적용기 (with ECS, Github Actions, AWS CDK)”에 대해 다뤄보겠습니다.

많이 부족한 글을 읽어주셔서 감사합니다.

--

--