DevOps는 개발과 운영의 경계를 허물고 각 팀이 협업하며 아이디어를 개발/배포하는 개발 환경이나 도구를 의미합니다. DevOps는 소프트웨어 개발 및 IT 운영 팀의 작업을 결합하고 자동화함으로써 고품질의 소프트웨어를 보다 빠르게 제공합니다.
이 글에서는 github actions 를 통해 깃허브에 CI/CD (Continuous Integration/Continuous Delivery) 를 추가하는 법을 배웁니다.
목표 : 어떻게 Github의 코드가 여러 단계를 거쳐 최종 배포 과정까지 자동화되는지 DevOps 전체 흐름을 이해하고 구현합니다.
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
이제부터 일반적인 오픈소스 프로젝트 과정을 이해하고 수행해봅시다.
전체 과정을 먼저 설명해보겠습니다.
새로운 branch 생성 git branch <branchname>
git fetch 명령어를 통해 git repository의 내용을 새로운 branch로 가져온다.
git fetch <원격저장소이름>
git checkout -b <branchname>
개발을 수행한 후, tests폴더에 유닛테스트 코드를 추가
git push 혹은 pull request를 수행하면 자동으로 flake8을 통한 lint와 pytest를 통한 유닛테스트가 수행되도록 github actions workflow를 설정.
코드 add / commit 하고 branch를 push