[Library] GitHub Actions - CI / CD 라이브러리

수민🐣·2022년 8월 11일
0

Library

목록 보기
3/6

GitHub Actions

코드 저장소(repository)로 유명한 GitHub에서 제공하는 CI(Continuous Integration, 지속 통합)와 CD(Continuous Deployment, 지속 배포)를 위한 비교적 최근에 추가된 서비스
기존 CI/CD 서비스 대비 간편한 설정과 높은 접근성으로 특히 개발자들 사이에서 많은 호응을 얻고 있다.

  • 자동으로 코드 저장소에서 어떤 이벤트(event)가 발생했을 때 특정 작업이 일어나게 하거나 주기적으로 어떤 작업들을 반복해서 실행시킬 수도 있다.
    • 누군가가 코드 저장소에 Pull Request를 생성하게 되면 GitHub Actions를 통해 해당 코드 변경분에 문제가 없는지 각종 검사를 진행
    • 요. 어떤 새로운 코드가 메인(main) 브랜치에 유입(push)되면 GitHub Actions를 통해 소프트웨어를 빌드(build)하고 상용 서버에 배포(deploy)
    • 특정 시각에 그날 하루에 대한 통계 데이터를 수집

CI/CD

지속적으로 수행해야하는 반복 작업들
즉, 사람이 매번 직접 하기에는 비효율적인데다가 실수할 위험도 있기 때문에 GitHub Actions와 같은 자동화시키는 것이 유리

1. Workflows(작업 흐름)

자동화해놓은 작업 과정

  • .github/workflows 폴더 아래에 위치한 YAML 파일로 설정
  • 하나의 코드 저장소에는 여러 개의 워크플로우, 즉 여러 개의 YAML 파일을 생성할 수 있다.
  • on 속성을 통해서 해당 워크플로우가 언제 실행되는지를 정의
// main 브랜치에 push 이벤트가 발생할 때 마다 워크플로우를 실행
on:
  push:
    branches:
      - main

jobs:
  # ...(생략)...
 
//  매일 자정에 워크플로우를 실행
on:
  schedule:
  - cron: "0 0 * * *"

jobs:
  # ...(생략)...
  • jobs 속성을 통해서 해당 워크플로우가 구체적으로 어떤 일을 해야하는지 명시

2.Jobs(작업)

  • 독립된 가상 머신(machine) 또는 컨테이너(container)에서 돌아가는 하나의 처리 단위를 의미
  • 작업 식별자(ID)와 작업 세부 내용 간의 맵핑(mapping) 형태로 명시
  • 하나의 워크플로우는 여러 개의 작업으로 구성되며 적어도 하나의 작업은 있어야 한다.
  • 모든 작업은 기본적으로 동시에 실행되며 필요 시 작업 간에 의존 관계를 설정하여 작업이 실행되는 순서를 제어할 수도 있다.
// job1, job2, job3이라는 작업 ID를 가진 3개의 작업을 추가
jobs:
  job1:
    # job1에 대한 세부 내용
  job2:
    # job2에 대한 세부 내용
  job3:
    # job3에 대한 세부 내용
  • 필수로 들어거야 하는 runs-on 속성을 통해 해당 리눅스나 윈도우즈와 같은 실행 환경을 지정해야 한다.
jobs:
  job1:
    runs-on: ubuntu-latest
    steps:
      # ...(생략)...

3.Steps(작업 순서)

  • 각 작업(job)이 하나 이상의 단계(step)로 모델링
  • 단순한 커맨드(command)나 스크립트(script)를 실행할 때는 run 속성
  • 액션(action)을 사용할 떄는 uses 속성
  • 각 단계 앞에 반드시 -를 붙여줘야 한다.
// 자바스크립트 프로젝트에서 테스트를 돌리려면 코드 저장소에 코드를 작업 실행 환경으로 내려 받고, 패키지를 설치한 후, 테스트 스크립트를 실행
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - run: npm install
      - run: npm test

4.Actions

  • 빈번하게 필요한 반복 단계를 재사용하기 용이하도록 제공되는 일종의 작업 공유 메커니즘
  • 하나의 코드 저장소 범위 내에서 여러 워크플로우 간에서 공유를 할 수 있을 뿐만 아니라, 공개 코드 저장소를 통해 액션을 공유하면 GitHub 상의 모든 코드 저장소에서 사용이 가능해진다.

워크플로우(workflow)는 자동화 시켜놓은 작업 과정을 뜻하며 YAML 파일을 통해 어떤 작업(job)들이 언제 실행되야 하는지를 설정하며
각 워크플로우는 독립된 환경에서 실행되는 작업(job)이 적어도 한 개 이상으로 구성되며, 각 작업에는 작업 ID가 부여되고 세부 내용(실행 환경, 작업 단계 등)이 명시된다.
하나의 작업은 보통 순차적으로 수행되는 여러 개의 단계(step)로 정의되며, 각 단계는 단순한 커맨드(command)일 수도 있고 추상화된 액션(action)일 수도 있다.

0개의 댓글