안녕하세요! BTC 1-tier팀의 One입니다 ㅎㅎ
오늘은 Github Action에 대해서 알아보겠습니다.
🤔Git Hub Action?
Git 리포지토리에서 바로 소프트웨어 개발 워크플로우를 자동화하고 실행하는 툴 입니다.
CI/CD를 포함하여 원하는 작업을 수행하기 위한 작업을 검색, 생성 및 공유합니다.
🔎 Git Hub Action의 컴포넌트
리포지토리에서 이벤트가 발생할 때, 트리거가 되도록 Github 워크 플로우를 구성할 수 있습니다.
워크플로우에는 하나 이상의 작업이 포함되어있으며, 스크립트를 실행하거나 작업을 실행하는 단계가 있습니다.
Git Hub Action의 컴포넌트에는 다음과 같은 것들이 있습니다.
- WorkFlow
워크플로우는 하나 이상의 작업을 실행하는 구성 가능한 자동화 프로세스입니다.
워크플로우는 리포지토리의 디렉토리에 정의됩니다.
.github/workflows
- Event
이벤트는 워크플로우 실행을 Trigger하는 저장소의 특정 활동입니다.
예를 들어 누군가 Pull 요청을 생성하거나 Commit을 Push 할 때 워크플로우가 실행될 수 있습니다.
아래 링크에서 워크플로우를 트리거하는 이벤트 목록을 확인할 수 있습니다.
https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows
- 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 즉, 의존성 패키지를 설치해줘야 합니다.
먼저 테스트를 위한 flake8과 pytest 패키지를 설치해줍니다.
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 |
댓글