본문 바로가기
DevOps

GitHub Actions으로 CI/CD 자동화하기

by 떤떤 2024. 3. 6.

CI/CD는 소프트웨어의 개발, 테스트, 배포 프로세스를 자동화하고 워크플로우를 간소화 할 수 있습니다.

 

CI(Continuous Intergration, 지속적 통합)란?

지속적 통합은 개발자가 작성한 코드를 공유 저장소에 병합할 때 빌드와 테스트를 자동으로 실행하는 것을 의미합니다.

그렇기 때문에 여러 개발자가 main 브랜치에 병합할 때 발생할 수 있는 문제를 줄여줍니다.

지속적 통합을 적용하면 함께 작업하는 동료가 먼저 main 브랜치에 병합했을 때 본인은 pull --rebase만 하면 됩니다.

 

CD(Continuous Delivery/Deployment, 지속적 전달/배포)란?

지속적 전달

- 지속적 통합(CI)의 확장 단계

- CI가 정상적으로 통과된 다음 공유 저장소(github, container repository 등)에 업로드

- 변경된 내용을 공유 저장소에서 수동으로 배포

- 프로덕션 환경으로 배포할 준비가 되어 있는 코드베이스를 갖추기 위함

지속적 배포

- 지속적 전달의 확장 단계

- 변경된 내용을 공유 저장소에서 프로덕션으로 자동 배포

- 변경사항을 한 번에 릴리스 하지 않고 작은 단위로 세분화하여 손쉽고 빠르게 릴리스 하기 위함

 

아래 내용은 GitHub Actions을 이용해서 CI/CD 파이프라인을 구축하고 EC2에 배포한 방법입니다.

여러 방법이 많지만 개인 프로젝트 배포 자동화를 위해 간단하게 GitHub Actions을 사용했습니다.

저의 CI/CD 파이프라인은 1~4번까지 github runner에서 실행되고,

5~7번은 EC2에서 실행 중인 self-hosted runner가 배포 스크립트를 실행시켰을 때 발생하는 일입니다.

 

1. 빌드 (test 일단 스킵합니다.)

2. 도커파일 빌드

3. 도커 허브 로그인

4. 도커 허브에 이미지 올리기

--여기까지 github runner에서 실행--

5. 도커 허브 로그인

6. 최신 이미지 가져오기

7. 컨테이너 실행

 

1. Docker Hub private repository 만들기

https://hub.docker.com 사이트에 접속해서 로그인하고 Repositories > Create repository 버튼 눌러줍니다.

무료 계정은 계정 당 1개의 private repository를 생성할 수 있습니다.

전 이미 만들어놔서 안 눌리게 되어 있는데 무시하고 private 선택하시면 됩니다.

2. AWS EC2에서 Self-hosted runner 설정

보통 개인프로젝트는 GitHub에 많이 올리잖아요? 형상관리와 CI/CD까지 GitHub를 이용한다면 아주 간편합니다.

 

Self-hosted runner란?

사용자가 직접 관리하는 서버나 가상 머신에 설치하여 GitHub Actions의 워크플로우를 실행할 수 있도록 하는 컴포넌트입니다.

EC2 안에서 실행할 것이기 때문에 yaml 파일에서 별도 ssh 접속 없이 사용 가능하여 보안적으로 괜찮다고 생각합니다.

 

EC2 안에서 실행하기 위해서 먼저 해야할 일이 있습니다. 아래 화면에서 New self-hosted runner를 클릭해주세요.

 

서버 환경에 맞게 이미지 선택하시고 Download와 Configure에 적혀있는대로 해주시면 됩니다.

 

 

그런데 한 가지 문제는 public repository에서 self-hosted runner를 사용하면 보안 문제가 발생할 수 있습니다.

pull_request에 대한 트리거를 설정해놨을 경우 다른 사람이 리포지토리를 포크해서 pull_request를 요청하면 워크플로우가 실행될 수 있습니다. 이를 방지하기 위해 아래와 같이 pull_request 요청 했을 때 워크플로우 실행을 승인 받아야 실행할 수 있도록 설정 해주셔야 합니다. 중요한 프로젝트라면 private로 변경해야합니다.

 

repository 화면에서 Settings 클릭하고 Require approval for all outside collaborators 선택해주세요.

아래 링크 본문 참고하세요.

https://github.com/orgs/community/discussions/26722

 

3. Docker Hub 로그인 정보 환경변수 설정

Docker Hub에 로그인할 때 필요한 USERNAME과 PASSWORD가 필요합니다. 저는 PASSWORD 대신 TOKEN으로 로그인하기로 했습니다. New repository secret 버튼을 눌러서 설정해줍니다. 해당 변수 이름은 GitHub Actions yaml 파일에 넣어줘야 합니다.

 

4. GitHub Actions yaml 파일 설정

 

만들어 놓은 개인 프로젝트에 테스트 코드가 없어서 CI에서 빠지면 안 되는 테스트를 뺀 점이 아쉬웠는데요.

다음에는 TDD와 실시간 모니터링 글을 작성해보겠습니다.

'DevOps' 카테고리의 다른 글

[Docker] 명령어 정리  (0) 2023.11.28