본문 바로가기

개발정보

GitHub Action 알아보기

GitHub Action은 빌드, 테스트 및 배포 파이프라인을 자동화 할 수 있는  지속적인 통합과 지속적인 배포 플랫폼이다. 

[ Like CI / CD ] ( Like가 아닌 그 자체임 )

우리는 워크플로우를 만들어서 우리의 레포지토리를 테스트하고 배포할 수 있으며, 합쳐서 배포할 수 있다. 

 

그 외에도 이슈를 만들면 해당 이슈에 적절한 Label을 붙여주는 등 특정 이벤트에 반응하는 워크플로우도 만들 수 있다. 

 

The components of GitHub Actions

PR이 열리거나 이슈가 만들어지는 등 레포지토리에 이벤트가 발생하면 GitHub Action의 워크플로우가 트리거 되도록

구성할 수 있다. 워크플로우는 직렬 또는 병렬로 실행할 수 있는 하나 또는 여러개의 작업을 포함하고 있다. 

각 작업은 자체 가상 머신 또는 컨테이너 내에서 실행되며, 정의된 스크립트를 실행하거나 워크플로를 간소화할 수 있는

재사용 가능한 확장 기능인 작업을 실행하나의 하나 이상의 단계가 있다. 

 

Workflows 

Workflow는 하나 이상의 작업을 실행하는 구성 가능한 자동화된 프로세스이다. Workflow는 레포지토리에서 체크된 YAML 파일로 정의되며, 레포지토리의 이벤트에 의해 트리거될 때 실행되거나 스케쥴로 정의되거나 수동으로 트리거 될 수 있다. 

 

Workflow는 레포지토리의 .github/workflows 디렉토리에 정의되어 있으며, 레포지토리는 여러 개의 Workflow를 가질 수 있고 각자 다른 작업을 수행할 수 있다. 

예를들어, PR을 빌드하고 테스트하는 Workflow, 릴리스가 만들어질 때마다 애플리케이션을 배포하는 Workflow, 새 이슈를 열 때마다 Label을 추가하는 Workflow를 한번에 가질 수 있다. 

 

Events 

Event는 Workflow 실행을 트리거하는 레포지토리의 특정 활동이다. 예를들어 PR을 만들거나, 이슈를 열거나, 레포지토리에 커밋을 하는 행위들이 될 수 있다. 

 

Jobs

Job은 동일한 Runner에서 실행되는 Workflow의 단계 집합이다. 각 단계는 셸 스크립트이거나 실행될 작업이다. 

단계는 순서대로 실행되며 서로 종속된다. 동일한 Runner에서 실행되므로 다른 단계들과 데이터를 공유할 수 있다. 

예를들어, 애플리케이션을 빌드하는 단계와 빌드된 애플리케이션을 테스트하는 단계가 있을 수 있다. 

 

우리는 Job의 종속성을 다른 Job들과 구성할 수 있으며, 기본적으로 Job은 종속성이 없이 병렬로 실행된다. 

Job이 다른 Job에 종속된 경우, 해당 작업이 끝날 때 까지 기다린 다음 완료되면 실행된다. 

예를들어, 종속성이 없는 여러 아키텍처에 대한 빌드 작업과 이러한 작업에 종속된 패키징 작업이 어러 개 있을 수 있다. 

빌드는 병렬로 실행되며, 모두 완료하면 패키징 작업을 실행한다. 

 

Actions

Action은 복잡하지만 자주 반복되는 작업을 수행하는 GitHub Action 플랫폼용 사용자 지정 애플리케이션이다. Action을 사용하면 Workflow 파일에 작성하는 반복적인 코드의 양을 줄일 수 있다. GitHub에서 git 레포지토리를 가져오거나, 빌드 환경에 적합한 설정을 하거나, 클라우드 제공 업체에 대한 인증을 설정할 수 있다. 

 

Runners

Workflow가 트리거될 때 Workflow를 실행하는 서버이다. 각 Runner는 한 번에 하나의 작업을 실행할 수 있다. 

GitHub는 Workflow를 실행할 수 있는 OS별 Runner를 제공하며, Workflow의 실행은 가상 머신에서 실행된다. 

 

Create an example workflow

GitHub Actions는 YAML 구문을 사용해서 Workflow를 정의한다. 각 Workflow는 레포지토리의 .github/workflows라는 디렉토리에 별도 YAML 파일로 저장된다. 

 

레포지토리에 코드가 푸시될 때마다 명령을 자동으로 트리거하는 예제 Workflow를 만들어 볼 것이다. 

이번에는 GitHub Actions을 활용해서 푸시된 코드를 체크아웃하고, bats 테스트 프레임워크를 설치한 다음, bats 버전을 출력하는 기본 명령어인 bats -v를 실행하게 할 것이다. 

   

   1. 레포지토리 안에 .github/workflows 폴더를 만들어준다. 

   2. worksflows 폴더 안에 learn-github-actions.yml 파일을 만들고 코드를 입력한다. 

name: learn-github-actions
run-name: ${{ github.actor }} is learning GitHub Actions
on: [push]
jobs:
  check-bats-version:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: "20"
      - run: npm install -g bats
      - run: bats -v

 

   3. 레포지토리에 커밋을 하고 푸시를 해준다. 

 

코드를 입력하고 레포지토리의 Actions을 확인하면 제대로 동작하는 것을 확인할 수 있다. 

 

이제 Workflow 파일의 YAML 구문을 하나씩 이해해보자. 

name: learn-github-actions

선택 사항으로 레포지토리에서 Actions 탭에 표시할 Workflow의 이름을 나타낸다. 

생략하면 Workflow 파일의 이름이 대신 사용 된다. 

 

run-name: ${{ github.actor }} is learning GitHub Actions

선택 사항으로 Workflow에서 생성된 Workflow 실행의 이름으로, 레포지토리의 Action 탭에 있는 실행 목록에 표시된다. 

github에 있는 표현식을 사용해서 Workflow 실행을 트리거한 사용자의 이름을 표시한다. 

 

on: [push]

Workflow의 트리거를 지정한다. 이번 예제에서는 push 이벤트를 사용했으며, workflow는 push가 발생할 때마다 

실행될 것이다. 

 

jobs:

Workflow에서 실행되는 모든 작업을 함께 그룹화한다. 

 

  check-bats-version:

Job의 이름을 check-bats-version으로 정의하였다. 

 

    runs-on: ubuntu-latest

최신 버전의 우분투 리눅스 런처에서 실행되도록 작업을 구성한다. 

GitHub에서 호스팅하는 새 가상 머신에서 작업이 실행된다.

    steps:

check-bats-version Job에서 실행되는 모든 단계를 한번에 그룹화한다. 

해당 섹션 아래에 중첩된 각 항목은 별도의 작업 또는 셸 스크립트이다. 

 

      - uses: actions/checkout@v4

use 키워드는 이 단계에서 actions/checkout Action의 v4를 실행하도록 지정한다. 

레포지토리를 Runner에 체크 아웃하는 작업으로, 코드에 대해 스크립트나 기타 작업( 빌드 및 테스트 )을 실행할 수 있다. 레포지토리의 코드를 Workflow에서 사용할 때마다 체크아웃 작업을 사용해야 한다. 

 

      - uses: actions/setup-node@v4
        with:
          node-version: '20'

이 단계에서는 actions/setup-node@v4 Action을 사용해서 지정된 버전의 Node.js를 설치한다. 

이렇게 하면 node 및 npm 명령이 모두 설정된다. 

 

      - run: npm install -g bats

run 키워드는 Runner에 명령을 실행하도록 지시한다. 

예시에서는 npm을 사용해서 bats 소프트웨어 테스트 패키지를 설치하고 있다. 

 

      - run: bats -v

마지막으로 소프트웨어 버전을 출력하는 매개변수와 함께 bats 명령을 실행한다. 

반응형

'개발정보' 카테고리의 다른 글

GitHub Action PR 검사  (1) 2024.09.14
GitHub Action Feature 합치기  (2) 2024.09.01
VSCode Git 계정 변경  (0) 2023.04.13
소프트웨어 개발 3대 원칙 - KISS, YAGNI, DRY  (0) 2023.01.26
RSS 피드란?  (2) 2023.01.21