최근에 개인 프로젝트를 여러 개 시작 했다. 배포에 대한 걱정을 좀 줄여보고자 처음으로 CI/CD를 공부해보자 마음 먹었다.

CI/CD에 대해서 아는게 하나도 없어서, 서칭을 하다가 그저 탭으로만 마주한 GitHub Actions이 CI/CD 툴인걸 알게 되었다. 굉장히 많은 툴들이 있었는데, GitHub Actions은 GitHub에서 CI/CD에 대한 고민도 바로 해결 해주는 느낌이였다.

이렇게 툴은 결정했고 GihHub Actions Learning 문서를 보면서 공부한 내용을 블로그에 정리했다.

문서의 내용이 많으니 블로그 글은 나눠서 게시하겠다.

CI/CD 란?

CI/CD에 대한 개념은 굉장히 많은 자료가 있다. 그렇기 때문에 간단하게만 적고 넘어가겠다.

  • CI(Continuous Integration) : Build, Test를 실시하는 프로세스를 상시로 실시 해줌으로써 품질을 유지하는게 목표다.

  • CD(Continuous Delivery or Continuous Deploy) : 소프트웨어를 더 빠르게, 더 주기적으로 빌드하고 테스트하고 출시하는 것을 목표로 한다.

GitHub Actions 란?

GitHub Actions은 CI/CD를 포함하여 다양한 소프트웨어 개발 과정을 자동화 해준다. 아마 CI/CD 용도로 제일 많이 사용하겠지만, awesome-actions(괜찮은 GitHub Actions들을 리스트업 해놓은 레포지토리다.)를 보면 GitHub Actions으로 테스트나 배포 자동화 말고도 주기적으로 SMS 보내기, 모니터링 등 다양한 것들을 만들 수 있다.

GitHub Actions은 특정 이벤트가 발생하면 실행된다. 예를 들어, 개발자가 push(이벤트)를 하면 정의 해놓은 GitHub Actions이 작동하게 된다.

그림으로 한 번 더 살펴보면,

이벤트가 발생하면 Job을 포함하고 있는 workflow가 자동적으로 실행된다. 그러면 workflow 안의 Job은 action을 순서대로 실행시키기 위해 step을 사용한다.

이런 방식으로 테스트 또는 배포 등 GitHub Actions가 작동한다.

GitHub Actions의 컴포넌트들

Job을 실행하기 위해 함께 작동하는 GitHub Actions의 컴포넌트들을 알아보자. 나무를 보기 전에 그림으로 숲을 한 번 보자.

Workflows

workflow는 레포지토리에 추가되는 자동화된 절차다. Workflow는 하나 이상의 job으로 구성되고 이벤트가 발생 될 때 실행된다. 또는 cron처럼 주기적으로 workflow를 실행 시킬 수 있다.

Events

workflow를 실행시키는 특정한 행동이다. 예를 들어, 우리에게 친숙한 GitHub에 커밋을 push하기, issue 또는 PR 생성하기 등이 있다. 이것 말고 다양한 이벤트들을 공식 문서에 정리 된 리스트를 통해 알 수 있다.

Jobs

Job은 step들의 집합이다. Job은 같은 runner(서버. 뒤에서 자세히 설명한다)에서 실행 되는 step(테스크. 뒤에서 자세히 설명한다)들의 집합이다. 기본적으로 workflow는 여러 개의 job들을 병렬로 실행한다. 물론 순차적으로 실행 할 수 있다. A job의 결과에 따라 B job을 실행 시키고 싶을 수도 있으니깐 말이다.

Steps

Step은 job 안에서 명령어를 실행시키는 테스크다. step은 action(명령어. 뒤에서 자세히 설명한다) 또는 쉘 명령어로 이루어진다. step들은 같은 runner에서 실행되고, actions들끼리 데이터를 공유 할 수 있게 해준다.

Actions

Action은 step에서 job을 만드는 독립적인 명령어다. 자신이 직접 만들거나 GitHub Marketplace에서 만들어진 action을 사용 할 수 있다. Action을 사용하기 위해서, 무조건 step에 action을 넣어야 한다. 필자는 Action의 개념이 정확히 이해되지 않았다. 추가 설명보다는 예제를 만들면서 더 이해 해보도록 하겠다.

Runners

Runner는 GitHub Actions runner application가 설치 된 서버다. GitHub Actions runner application는 GitHub Actions workflow으로부터 job을 실행시켜주는 어플리케이션이다. Runner는 한 번에 하나의 job을 실행시키며 과정, 로그, 결과를 기록해서 GitHub에게 돌려준다. 이후 예제에서 GitHub Actions를 실행시키면 GitHub에서 로그들이 보일 것이다.

이렇게 나무들을 알아보았다. 마지막으로 숲을 보며 스스로 정리해보자.

다음 글에서는 예제를 만들어보겠다.


Reference