티스토리 뷰

ETC

Github Actions

berom 2023. 4. 24. 21:19

Github Actions

GitHub Actions는 GitHub에서 공식 제공하는 CI/CD 도구로, 개발 워크플로우를 자동화합니다.

핵심 요소

  • Workflow: YAML로 작성되며, 이벤트에 의해 트리거되는 자동화된 프로세스입니다.
    • 워크플로우는 여러 Job으로 구성되며, .github/workflows 디렉토리에 저장됩니다.
  • Event: 워크플로우를 실행하는 규칙으로, push, pull request, cron, webhook과 같은 외부 이벤트에 의해 실행됩니다.
  • Job: Step들로 구성되어 가상 환경의 인스턴스에서 실행됩니다.
    • 다른 Job에 의존관계를 가질 수 있고, 독립적으로 병렬 실행도 가능합니다.
  • Step: Task들의 집합으로, 커맨드를 실행하거나 action을 실행합니다.
  • Action: 가장 작은 단위로, 재사용 가능한 컴포넌트입니다.
    • Step을 연결해 Job을 구성하며, GitHub Marketplace에서 제공되는 라이브러리나 개인이 만든 action을 사용할 수 있습니다.

예제

name: CI
on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Check out repository
      uses: actions/checkout@v2
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: 3.8
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
    - name: Run tests
      run: pytest

위의 예제에서 워크플로우는 pushpull_request 이벤트에 의해 실행되며, build라는 Job을 수행합니다.
이 Job은 4개의 Step으로 구성되어 있으며, 각각 저장소를 체크아웃하고, 파이썬을 설치하며, 의존성을 설치하고, 테스트를 실행합니다.

환경 변수

GitHub Actions 워크플로우에서 환경 변수를 사용하여 스크립트에 값을 전달할 수 있습니다.
환경 변수는 워크플로우, Job, Step 수준에서 설정할 수 있습니다.
이렇게 하면 워크플로우에서 전역 변수를 설정하거나 각 Step에 대해 개별적으로 값을 지정할 수 있습니다.

jobs:
  build:
    runs-on: ubuntu-latest
    env:
      MY_ENV_VAR: my_value
    steps:
    - name: Print environment variable
      run: echo $MY_ENV_VAR

컨텍스트 및 표현식

워크플로우 파일에서는 표현식을 사용하여 다양한 컨텍스트에 액세스할 수 있습니다.
이를 통해 GitHub 이벤트, 작업 상태, 워크플로우 데이터 등에 액세스할 수 있습니다

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Print event context
      run: echo ${{ github.event_name }}

캐싱

워크플로우 실행 시간을 줄이기 위해 종종 캐싱을 사용합니다.
예를 들어, 패키지 종속성을 캐싱하여 각 실행에서 다시 다운로드할 필요가 없도록 할 수 있습니다.

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Cache dependencies
      uses: actions/cache@v2
      with:
        path: ~/.cache/pip
        key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt

아티팩트

워크플로우가 생성한 결과물(빌드 결과, 테스트 결과 등)을 다운로드할 수 있는 아티팩트를 생성할 수 있습니다.
이를 통해 워크플로우의 출력을 쉽게 관리할 수 있습니다.

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Generate artifact
      run: |
        echo "Hello, world!" > hello.txt
    - name: Upload artifact
      uses: actions/upload-artifact@v2
      with:
        name: my-artifact
        path: hello.txt

Tags

태그는 소프트웨어의 특정 버전 또는 중요한 마일스톤을 나타내는데 사용되며, 이를 통해 개발자들은 프로젝트의 특정 상태를 식별하고 추적할 수 있습니다.
워크플로우를 트리거할 때 태그 푸시를 감지하려면, 워크플로우 파일의 on 섹션에서 push 이벤트에 대한 tags 필터를 사용해야 합니다.

on:
 push:
   tags:
     - '*'

특정 패턴의 태그 푸시만 감지하려면, 패턴을 지정할 수 있습니다:

on:
  push:
    tags:
      - 'v*'

이 경우, v로 시작하는 태그가 푸시될 때 워크플로우가 실행됩니다. 이렇게 하면 필요한 태그 푸시 이벤트에 따라 워크플로우를 실행할 수 있습니다.

마치며, Don’t Reinvent the Wheel

CI/CD 파이프라인은 그 절차와 각 단계에서의 할 일이 정해져 있는 편이다
이미 만들어진 것에 커스터마이즈 하는 것이 CI/CD 스크립트 짜는 시간을 개발에 투입 가능하다

CI/CD를 잘사용하고, Github Action을 잘 다루고 싶다면, shell을 아는 것이 좋다

부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>

728x90