본문 바로가기
CI CD

GitHub Action이란

by yoon_seon 2023. 5. 9.

개발 프로세스의 핵심은 자동화이다.

CI/CD는 메인 리포지토리에 새롭게 추가되는 기능들을 CI서버에서 자동으로 빌드하고 테스트해서 지속적으로 배포하는 것을 말한다. CI/CD에서도 핵심포인트는 바로 자동화이다.

 

버전관리 시스템으로 가장 많이 쓰이는 Git과 Git을 배포할 수 있는 GitHub가 있는데 이것을 자동화를 이용하려면 예전에는 Jenkins, BuildKite, circleci와 같은 외부 툴들을 사용했어야 했다. 하지만 이제는 GitHub Action을 통해 별도의 외부 툴 없이 자동화 프로세스를 만들 수 있다.

어떻게 GitHub Action을 통해서 CI/CD를 구축할 수 있는지 알아보기위해 포스팅 하게 되었다.

 

📌 GitHub Action이란?

깃허브 액션은 크게 Events, Workflows, Jobs, Actions, Runners 5가지 개념으로 알 수 있다.

 

깃허브액션은 특정한 이벤트가 발생했을 때 내가 원하는 일을 자동으로 수행할 수 있도록 만들어주는 툴이다. 그렇기 때문에 어떤 일이 발생했는지를 지정할 수 있는 이벤트를 잘 이해해야 한다.

 

이벤트(Events)

깃허브에서 발생할 수 있는 대부분의 행위를 이벤트로 지정할 수 있다. 예를 들어 나의 PR을 메인 브런치로 머지할 때 어떤 테스트를 수행해야 한다면 그 이벤트를 지정해 줄 수도 있고 또는 커밋 후 푸시를 하거나 누군가가 새로운 이슈를 만든다면 그때 수행해야 하는 일이 있다면 이벤트를 지정할 수 있다.

 

워크플로우(Workflows)

워크플로우는 특정 이벤트가 발생했을 때 내가 어떤 일을 수행할지 명시하는 것이다. 예를 들어 푸시라는 이벤트가 발생하면 워크플로우에 지정된 것들이 수행이 될 것이다. 또 다른 예로  워크플로우는 현실세계의  요리책을 예로 들면 내가 '파스타를 먹고 싶다!'는 이벤트가 발생한다면 파스타를 만들 수 있는 레시피책을 보는 것처럼 이벤트가 발생하면 워크플로우를 볼 수 있다!라고 생각하면 된다.

 

잡(Jobs)

워크플로우 안에는 잡(Jobs)이 있다. 하나 또는 다수의 잡을 가지고 있을 수 있는데 하나의 잡은 무언가를 한다. 예를 들어 하나의 잡은 유닛테스트를 동작하게 하거나 E2E 테스트를 진행하게 할 수 있다. 기본적으로 하나의 잡이 수행하는 동안 다른 잡이 수행되도록 병렬적으로 동시다발적으로 실행이 된다. 경우에 따라 만약 하나의 잡이 끝난 다음에 또 다른 잡을 수행 해야 한다면 순차적으로 진행될 수 있도록 만들 수도 있다.

각각의 잡 안에는 어떠한 순서대로 이 잡이 실행이 되어야 하는지 스텝을 하나씩 명시해 줄 수 있는데 쉘 스크립트를 사용해서 어떤 스텝을 해야 하는지를 명시할 수 있고 명령어도 수행할 수 있다. 그리고 잡에서는 깃허브 액션에서 정말 유용한 액션을 사용할 수도 있다.

 

액션(Actions)

깃허브 액션에는 재사용할 수 있는 공개적으로 오픈되어 있는 많은 액션들이 있다. 흔하게 사용할 수 있는 다양한 명령들이 액션으로 정의되어 있다. 예를 들어 [action check out]처럼 리포지토리를 체크아웃해서 우리가 원하는 명령어도 수행할 수 있고 [action check out] 한 후에 [action setup node]를 사용하면 자동적으로 노드 환경을 설정할 수 있는 코드들이 실행이 된다.

깃허브 액션에는 우리가 라이브러리를 가져다가 사용하는 것처럼 이미 잘 만들어진 액션들이 공개적으로 있기 때문에 갖다가 쓰기만 하면 된다.

 

러너(Runners)

잡을 실행하는 것이 바로 러너이다. 러너는 vm머신 또는 docker 컨테이너라고 보면 된다. 그래서 각각의 잡들은 개별적이고 독립적인 각각의 러너라는 컨테이너에서 실행된다고 볼 수 있다.

 

 

최종적으로 정리해 보면 특정한 이벤트가 발생했을 때 실행 하고 싶은, 자동화하고 싶은 스크립트를 워크플로우 안에 작성해 둘 수 있고 워크플로우 안에는 하나의 잡이나 또는 다수의 잡을 정의할 수 있다. 그래서 각각의 잡 안에는 어떤 순서대로 일들이 수행되어야 하는지 스크립트 형태로 작성할 수 있고 또는 깃허브에서 제공해 주는 유용한 액션을 가져다 쓸 수도 있다. 기본적으로 각각의 잡들은 병렬적으로 실행이 되는데 이 잡을 실행하는 것이 바로 러너이다.

 

 

📌 간단한 GitHub Action 예제

깃허브 액션을 사용하기 위해선 프로젝트 경로 안의  깃허브 폴더 안에  워크플로우 폴더를 생성하고 원하는 yml 파일을 만들면 된다.

.github/workflows/workflow.yml

yml 파일 이름은 상관없으며 어떤 워크플로우 인지에 따라 이름을 정해주면 된고 꼭 워크플로우 폴더 안에만 있으면 된다.

 

yml 파일은 이러한 형태로 구성되어 있다.

// workflow.yml 샘플

name: learn-github-actions
on: [push]
jobs:
  check-bats-version:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: '14'
      - run: npm install -bats
      - run: bats -v
  • name: 에는 어떤 워크플로우인지 워크플로우의 이름을 명시하면 된다.
  • on: 에는 어떠한 이벤트가 발생했을 때 이 워크플로우가 실행되면 되는지 이벤트를 명시할 수 있다.
  • jobs: 에는 이벤트 발생 시 실행될 잡들을 명시할 수 있다.
  • jobs에 첫 줄(샘플코드에서는 check-bats-version:)에는 잡의 이름이 나와있고
  • runs-on: 에는 러너를 사용할 때 어떤 러너를 사용할 것인지 즉, 어떤 vm머신을 사용할 것인지 명시할 수 있다.
    샘플코드에서는 우분투 최신버전의 vm을 사용한다라고 명시했다.
  • step: 에는 어떤 순서대로 잡들을 수행해야 하는지 명시한다.
    • 첫 번째 uses: 에는 Action을 사용할 것 이고 checkout Action을 사용할 것이다.
    • 두 번째 uses: 에는  Action을 사용할 것이고 node를 setup해주는 Action을 사용할 것이다.
    • with: 라는 문법을 통해서 노드 버전을 명시하고 있는 것을 확인할 수 있다.
    • run: 에는 원하는 명령어 쉘 스크립트를 작성했다.

 

 

'CI CD' 카테고리의 다른 글

CI(지속적통합) CD(지속적제공, 지속적배포)란  (0) 2023.05.09

댓글