본문 바로가기
INFRA/DevOps

[Git] Github Action

by BTC_One 2023. 9. 18.

안녕하세요! BTC 1-tier팀의 One입니다 ㅎㅎ

오늘은 Github Action에 대해서 알아보겠습니다.

 

🤔Git Hub Action?

Git 리포지토리에서 바로 소프트웨어 개발 워크플로우를 자동화하고 실행하는 툴 입니다.

CI/CD를 포함하여 원하는 작업을 수행하기 위한 작업을 검색, 생성 및 공유합니다. 

 

🔎 Git Hub Action의 컴포넌트

리포지토리에서 이벤트가 발생할 때, 트리거가 되도록 Github 워크 플로우를 구성할 수 있습니다.

워크플로우에는 하나 이상의 작업이 포함되어있으며, 스크립트를 실행하거나 작업을 실행하는 단계가 있습니다.

Git Hub Action으로 구성한 워크 플로우

Git Hub Action의 컴포넌트에는 다음과 같은 것들이 있습니다.

 

  • WorkFlow

워크플로우는 하나 이상의 작업을 실행하는 구성 가능한 자동화 프로세스입니다.

워크플로우는 리포지토리의 디렉토리에 정의됩니다.

.github/workflows
  • Event

이벤트는 워크플로우 실행을 Trigger하는 저장소의 특정 활동입니다.

예를 들어 누군가 Pull 요청을 생성하거나 Commit을 Push 할 때 워크플로우가 실행될 수 있습니다.

아래 링크에서 워크플로우를 트리거하는 이벤트 목록을 확인할 수 있습니다.

https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows

 

Events that trigger workflows - GitHub Docs

You can configure your workflows to run when specific activity on GitHub happens, at a scheduled time, or when an event outside of GitHub occurs.

docs.github.com

  • Jobs

동일한 스텝에서 실행되는 워크플로우의 일련의 작업입니다. 각 단계는 실행 될 스크립트거나 action일 수 있습니다.

단계는 순서대로 실행되며 서로 의존적입니다.

  • Runner

트리거될 때 워크플로우를 실행하는 서버입니다. 각 러너는 한 번에 하나의 작업을 실행할 수 있습니다.

Ubuntu Linux, Microsoft Windows 및 macOS 실행기를 제공하여 워크플로우를 실행합니다.

각 워크플로우는 프로비저닝 된 가상머신에서 실행됩니다

 

실제로 Git hub action을 한번 생성해보면서 더 자세히 알아보도록 합시다 

 

🛠 Git hub Action으로 Python 빌드 테스트

저는 Flask로 간단한 웹 어플리케이션을 만들어 repository에 push했습니다.

이 코드를 한번 테스트를 해볼건데요 아주아주 간단합니다😆

1. WorkFlow 만들기

테스트를 할 코드가있는 repository의 Action 탭을 클릭해보면 현재 내 코드를 보고 어떤 Workflow를 선택할 지 추천을 해줍니다.

Flask를 검색해보니, Python Application을 테스트하는 Workflow를 보여줍니다.

Configure를 클릭하면 yaml 파일이 생성됩니다. 하나하나씩 살펴 볼까요?

 

2. Yaml 파일 구성

2-1. Event 정의

Workflow의 name은 Python applications이며, Master branch에서 Push나 Pull_request 이벤트가 발생하면 자동으로 Workflow가 실행됩니다.

name: Python application

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]

 

2-2. Jobs 정의

Workflow의 작업을 빌드합니다.

Jobs에서 실행되는 단계(Steps)는 순서대로 실행되며 서로 의존적입니다.

 

Workflow 테스트가 진행되는 OS는 ubuntu의 최신버전입니다.

jobs:
  build:

    runs-on: ubuntu-latest

 

3. Steps 정의

이제 Steps를 차례로 정의해주면 됩니다.

 

3-1. Python 설치

파이썬 3.10 버전에서 테스트가 이루어져야하기 때문에, Python3를 설치하는 단계를 먼저 정의해줍니다.

    steps:
    - uses: actions/checkout@v3
    - name: Set up Python 3.10
      uses: actions/setup-python@v3
      with:
        python-version: "3.10"

 

3-2. 의존성 패키지 설치

다음 단계는 dependencies 즉, 의존성 패키지를 설치해줘야 합니다.

먼저 테스트를 위한 flake8pytest 패키지를 설치해줍니다.

 

requirements.txt 파일이 있으면 참조해서 설치를 하고, 아니라면 직접 명시를 해주면 됩니다.

전 repository에 requirements.txt 파일이 있기 때문에, 따로 지정을 해주진 않았다.

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install flake8 pytest
        if [ -f requirements.txt ]; then pip install -r requirements.txt; fi

 

3-3. flake8, pytest

다음 단계에선 flake8로 코드 정적 분석을 실행 후 pytest로 TDD를 합니다.

    - 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 login.py

 

Action

Commit을 한 후 Action tab에 들어가면 자동으로 build된 Workflow들을 확인할 수 있습니다

로그를 확인하면 Complate job 👍 이 보입니다.

 

이렇게 Git Hub Action과 사용법에 대해서 간략하게 알아봤는데요,

테스트 뿐만 아니라 Docker Repository에 푸쉬하거나, EKS, GKE에 배포하는 등의 다양한 기능이 있었습니다.

 

잘 활용해보면 좋겠죠?

그럼 다음시간에 또 만나요 베바👋

'INFRA > DevOps' 카테고리의 다른 글

[DevOps] Jenkins-Git webhook 설정  (0) 2023.10.04
[K8S] Log  (1) 2023.10.03
[DevOps] Jenkins Git 연동  (0) 2023.09.15
[K8S] Multi Container  (0) 2023.09.13
[K8S] Taint  (0) 2023.09.06

댓글