안녕하세요!! 저번 글에서 CI/CD가 무엇인지 간단하게 알아봤습니다. 그러면 CI/CD를 어떻게 구현하는지 어떤 툴을 사용하는 지를 알아볼 필요가 있겠죠?? 오늘은 많은 툴 중에서 Github Actions 기능을 활용해보도록 하겠습니다!!

1. 초기 세팅
우선, 깃헙 리포지토리에 등록해야 사용할 수 있으므로, 테스트 파일과 함께 작성해줍니다.
practice.py
def isEqual(x, y):
if(x==y):
print("x and y are the same number.")
return True
else:
print("x and y are not the same number.")
return False
print("Trun on")
위 실습은 단순히, github의 Actions 기능을 사용하는 것이므로, 아주 간단한 로직을 통해서 확인해보겠습니다. 위 함수는 인자로 입력된 x와 y가 같은지를 판단하는 함수입니다.
보통은 서버 내에서, 이 로직이 잘 작동하는지를 확인하게 됩니다. 하지만 저희는 가볍게 깃헙 액션을 사용해보기 위한 목적이므로, 서버를 구동하지 않고 print를 통해서, 해당 부분이 작동함을 확인해봅시다. (isEqual 함수는 서버가 live일 때 사용되는 함수라고 생각하시면 됩니다!)
저희는 이 로직을 테스트하기 위해 아래와 같은 테스트 코드를 짭니다.
test.py
import unittest
import practice
class IsEqual(unittest.TestCase):
def testIsEqual(self):
answer = practice.isEqual(1, 1)
self.assertTrue(answer)
def testIsEqual(self):
answer = practice.isEqual(1, 2)
self.assertFalse(answer)
if __name__ == "__main__":
unittest.main()
unittest 라이브러리를 활용해서, 테스트 코드를 짜봤습니다.
2. Docker Hub에 배포
저희는 자동으로 테스트를 해주는 것뿐만 아니라, 자동으로 도커 허브에 반영되도록 만들어보려고 합니다. 이에, 도커 허브에 이미지를 올리도록 하겠습니다. 도커 이미지를 배포하는 것은 일전에 글에서 다뤘기 때문에, 링크를 남기고 넘어가겠습니다.
2023.08.24 - [Python] - [파이썬/Python] 도커 이미지를 생성하고 배포해보자

3. Github Actions 활용하기
자! 이제, 깃헙 액션을 활용하기 위해서 리포지토리에 올려줍니다. 위 과정은 생략합니다.

잘 만들어진 repository의 상단에 Actions가 있습니다. 클릭해줍시다.
저희는 이번에, python test와 docker image까지 바로 올려주는 작업을 할 것이기 때문입니다. 보통은 이것을 한번에 묶어서 하나의 Action으로 처리한다고 하지만, 저는 아직... 처음이라 따로따로 만들어보도록 하겠습니다.
3-1. 파이썬 테스트 자동화하기(CI)
저희가 짰던 test.py 기억하시죠?? 이 함수는, 매 커밋 시점에서 문제없이 잘 작동하는지를 확인해야 배포과정까지 가는데에 버그 없이 진행될 수 있습니다. 그럼 이제, 리포지토리에 자동으로 푸시되면 테스트를 진행하게 만들어봅시다.

이제, 여기서 python application을 검색하시던지 또는 하단으로 스크롤하여 찾아줍시다.

이제 Configure 버튼을 눌러 적용해줍시다. 이 버튼을 누르게 되면, 코드 창으로 이동하게 됩니다. 저희는 여기서 몇가지 작업을 해주겠습니다.

빨간색으로 지워진 부분은 삭제해줍시다. 저희는 pytest가 아닌 unittest를 사용하기 때문입니다.
하단의 마지막에는 아래와 같은 코드로 바꿔줍니다.
python -m unittest discover -p 'test*.py'
이 코드는 코드 전체를 탐색하며 test로 시작하는 모든 테스트를 수행하겠다는 의미입니다.
또한 가장 상단에 on 부분은 어떤 이벤트가 발생했을 때, 이 액션을 취할지를 정해주는 것이며, 지금은 메인 브랜치에 push나 PR할 때 작동됨을 의미합니다.
수정을 했다면, 우측 상단에 초록색으로 Commit changes를 눌러준 후, 아래의 라디오 버튼을 선택하고 커밋해줍니다.

이후, 본인의 리포지토리의 메인으로 가봅시다.

위와 같이 우측에 체크 표시가 되었다면, 문제없이 마무리되었다는 뜻입니다. 또한, 로딩 표시는 진행 중을 의미하고, X 표시는 실패하였음을 의미해줍니다.
이제, 저희 코드를 통해서 CI를 구현하였습니다. 글이 길어졌으니, 다음 글에서 메인의 코드가 변경되었을 때, 도커 이미지까지 자동으로 변경해주는 코드를 작성해보겠습니다. 감사합니다.
'기타' 카테고리의 다른 글
[도커/Docker] multi-stage build란?? (0) | 2023.08.31 |
---|---|
[5주차] 목표 달성 백준 장학금 with 제로베이스 (0) | 2023.08.27 |
CI/CD란? (0) | 2023.08.25 |
[도커/Docker] Docker, Docker compose란? (0) | 2023.08.24 |
[4주차] 목표 달성 백준 장학금 with 제로베이스 (0) | 2023.08.20 |