DevOps는 개발과 운영의 경계를 허물고 각 팀이 협업하며 아이디어를 개발/배포하는 개발 환경이나 도구를 의미합니다. DevOps는 소프트웨어 개발 및 IT 운영 팀의 작업을 결합하고 자동화함으로써 고품질의 소프트웨어를 보다 빠르게 제공합니다.

이 글에서는 github actions 를 통해 깃허브에 CI/CD (Continuous Integration/Continuous Delivery) 를 추가하는 법을 배웁니다.


github actions


목표 : 어떻게 Github의 코드가 여러 단계를 거쳐 최종 배포 과정까지 자동화되는지 DevOps 전체 흐름을 이해하고 구현합니다.

1. 실습을 위한 간단한 flask app과 파이썬 프로그램 구현

https://github.com/chaeyeongyun/OSS_mlops

위 repository를 clone하여 실습을 수행할 수 있습니다.

directory 구조가 다음과 같이 구성되어 있습니다.

OSS_mlops
├── Dockerfile # 빌드에 사용할 Dockerfile
├── README.md
├── **core_codes** # 실제 실행할 코드들이 모여있는 폴더 ****
│   ├── __init__.py
│   ├── app.py # flask app 실행 코드
│   ├── application # flask app codes
│   │   ├── __init__.py
│   │   ├── memo.txt
│   │   ├── utils
│   │   │   ├── __init__.py
│   │   │   └── image.py
│   │   └── views
│   │       └── main_views.py
│   └── quiz # CI/CD 실습을 위한 간단한 파이썬 코드들
│       ├── __init__.py
│       ├── coined_term_quiz.py
│       ├── hello_world.py
│       └── up_down_quiz.py
└── **tests** # test 수행을 위한 폴더 ****
    ├── test_coined_term.py
    ├── test_hello_world.py
    └── test_updown.py

2. github actions로 CI를 동작시키기

이제부터 일반적인 오픈소스 프로젝트 과정을 이해하고 수행해봅시다.

전체 과정을 먼저 설명해보겠습니다.

  1. 새로운 branch 생성 git branch <branchname>

  2. git fetch 명령어를 통해 git repository의 내용을 새로운 branch로 가져온다.

    git fetch <원격저장소이름> git checkout -b <branchname>

  3. 개발을 수행한 후, tests폴더에 유닛테스트 코드를 추가

  4. git push 혹은 pull request를 수행하면 자동으로 flake8을 통한 lint와 pytest를 통한 유닛테스트가 수행되도록 github actions workflow를 설정.

  5. 코드 add / commit 하고 branch를 push