Github Action

wonhee·2021년 9월 1일
1
post-thumbnail

공식 홈페이지, 공식 문서

Github Action 이란?

  • github에서 제공하는 workflow를 자동화할 수 있도록 도와주는 도구

  • 대표적인 예 : CI/CD

    CI/CD란?

    • CI: Continuous Integration(지속적 통합)
      • 테스트, 빌드, Dockerizing, 저장소에 전달하는 것까지 프로덕션 환경으로 서비스를 배포할 수 있도록 준비하는 프로세스
    • CD: Continuous Delivery(지속적 전달)
      • 저장소로 전달된 프로덕션 서비스를 실제 사용자들에게 배포하는 프로세스

    한마디로 배포 자동화라고 할 수 있겠다

Github Action의 코어 개념

  • 구성 : Workflow, Event, Job, Step, Action, Runner

1. Workflow

  • 최상위 개념
  • 여러 Job으로 구성
  • Event에 의해 예약되거나 트리거될 수 있는 자동화된 프로세스
  • Workflow 파일은 YAML으로 작성
  • .github/workflows 폴더 아래에 저장됨
  • github에게 YAML 파일로 정의한 자동화 동작을 전달하면, Github Actions는 해당 파일을 기반으로 그대로 실행함

2. Event

  • Workflow를 트리거(실행)하는 특정 활동이나 규칙
  • 예를 들면
    • 특정 branch로 Push / Pull Request
    • 특정 시간대에 Cron

3. Job

  • 여러 Step으로 구성
  • 가상환경의 인스턴스에서 실행됨
  • 다른 Job에 의존 관계를 가질 수도 있고, 독립적으로 병렬 실행도 가능

4. Step

  • Job안에서 순차적으로 실행되는 프로세스 단위
  • step에서 명령을 내리거나, action을 실행할 수 있음

5. Action

  • Workflow의 가장 작은 빌드 단위
  • Job을 만들기 위해 Step들을 연결할 수 있음
  • Workflow에서 action을 사용하려면 action이 step을 포함해야 함
  • 재사용이 가능한 컴포넌트
  • 개인적으로 커스텀 코드를 만들수도 있고, Marketplace에 있는 공용 Action을 사용할 수도 있음

6. Runner

  • Github Action Runner 어플리케이션이 설치된 머신
  • Workflow가 실행될 인스턴스

Action 생성 (python package)

  1. 레포지토리의 Actions
  2. 원하는 서비스의 Set up this workflow
    예시로는 python package를 선택했다
    그러면 아래와 같은 코드가 나온다
name: Python package

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        python-version: [3.7, 3.8, 3.9]

    steps:
    - uses: actions/checkout@v2
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        python -m pip install flake8 pytest
        if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
    - name: Lint with flake8
      run: |
        # stop the build if there are Python syntax errors or undefined names
        flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
        # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
        flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
    - name: Test with pytest
      run: |
        pytest

  • Python package 라는 이름의 Workflow
name: Python package

  • main 브랜치에 push/pull request가 왔을 때 Job이 실행된다.
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

_그 아래 Job은 대충 flask8을 통해 pytest를 실행하는내용으로, 실행하고 싶은 코드를 작성해야 함

profile
unknown

0개의 댓글