만약 CircleCI Docker 이미지를 테스트하고 배포하려는 방법을 찾고 있다면, CI/CD 파이프라인을 생성하여 소프트웨어 전달을 향상시키는 길에 큰 도움이 될 수 있습니다.
이 튜토리얼에서는 Docker 이미지에 대한 CI/CD 파이프라인을 개발할 수 있는 방법을 알아보게 될 것입니다. CircleCI를 사용하여 진행합니다.
계속 읽고 테스트를 통과한 경우에만 Docker 이미지를 배포하세요!
전제 조건
이 튜토리얼은 실습을 중심으로 진행됩니다. 따라가려면 다음이 필요합니다:
- A GitHub account and GitHub repository that is already set up.
- A CircleCI account linked to your GitHub account.
- Docker가 설치되어 있어야 합니다.
- A Linux machine – This tutorial uses Ubuntu 20.04.3 LTS.
파이썬 기반 애플리케이션의 Docker 이미지 만들기
CI/CD 파이프라인을 생성하기 전에 먼저 웹 브라우저에서 텍스트를 표시하는 Python 애플리케이션을 기반으로 Docker 이미지를 빌드합니다. 애플리케이션이 어떻게 구축되는지 간략하게 살펴보고, 애플리케이션에 대한 테스트 케이스를 작성한 다음 애플리케이션을 컨테이너화합니다.
1. 터미널을 열고 다음 명령을 실행하여 Flask 및 Pytest를 설치
합니다. Flask는 Python으로 웹 애플리케이션을 만드는 데 사용되는 프레임워크이며 Pytest는 Python 코드를 테스트하는 데 사용됩니다.
2. 다음으로, 선호하는 이름으로 프로젝트 디렉토리를 만듭니다. 그러나 이 데모에서는 프로젝트 디렉토리를 flask-circleci
라고 합니다. 이 디렉토리에는 이 튜토리얼에 필요한 리소스를 저장합니다.
3. flask-circleci/main.py라는 파일을 만들고 다음 코드를 채웁니다.
아래 코드는 브라우저의 홈 페이지에서 “내 Flask 앱에 오신 것을 환영합니다” 텍스트를 표시합니다.
4. 이제 다른 파일을 만들어 flask-circleci/test_main.py를 복사/붙여넣기합니다.
아래 코드는 응용 프로그램에 대한 테스트 클라이언트를 만듭니다.
pytest는 아래에 설명된 대로 테스트 파일의 이름이 test_로 시작해야합니다.
5. 다음 명령을 실행하여 프로젝트 디렉토리(flask-circleci
)로 이동하고 프로젝트를 테스트합니다.
테스트가 성공하면 아래와 같이 100% 진행률이 표시됩니다.

6. 마지막으로, 루트 디렉토리에 종속성을 문서화하는 텍스트 파일(requirements.txt)을 만들고 아래의 텍스트를 채웁니다. 이 파일은 Docker 이미지를 빌드할 때 정상적으로 작동하도록 필수적입니다.
7. 마지막으로, 새 파일(flask-circleci/Dockerfile)을 생성하고 아래의 명령을 Dockerfile에 작성하여 Docker 이미지를 빌드합니다.
Dockerfile의 명령은 다음을 수행합니다:
- 이미지에 파일을 생성합니다.
- 현재 디렉토리(flask-circleci)의 파일을 모두 복사합니다.
- 코드를 실행합니다.
CircleCI CI/CD 파이프라인 생성
이제 Docker 이미지가 준비되었으므로 코드를 테스트하고 모든 테스트가 통과되면 Docker 이미지가 만들어져 Docker 허브로 푸시됩니다. Docker 허브는 GitHub과 유사한 서비스이지만 Docker 이미지를 찾고 공유하는 데 도움이 되는 서비스입니다.
CI/CD 파이프라인을 만들려면 다음 단계를 따르세요:
1. 좋아하는 웹 브라우저를 열고 Docker 허브 계정에 로그인합니다.
2. Docker 허브 홈페이지에서 저장소 만들기 옵션을 클릭하여 Docker 허브에 저장소를 만듭니다.

3. 귀하의 저장소에 고유한 이름을 설정하십시오. 이 튜토리얼에서는 circleci-tutorial라는 저장소를 사용합니다.

4. 프로젝트 루트에 새 파일을 만들고 (flask-circleci/config.yml), 아래의 코드를 config.yml 파일에 복사/붙여넣기하십시오.
아래 코드는 준비된 Python 이미지를 가져와 의존성을 설치하고 단위 테스트를 실행하여 Docker 이미지를 빌드하고 해당 이미지를 저장소 Docker Hub에 푸시합니다.
일반적으로 라이브 프로젝트의 경우, CircleCI 내에서 사용자 이름과 암호를 보호하거나 .env 파일에 저장하는 것이 좋습니다.
5. 마지막으로, 프로젝트의 루트에서 다음 명령을 실행하여 코드를 커밋
하고 푸시
하세요. (flask-circleci/config.yml)를 GitHub 저장소에
활성화 중: CircleCI CI/CD 파이프라인
CircleCI CI/CD 파이프라인을 만들었지만 현재는 그냥 놔둔 상태이며 아무것도 수행하지 않습니다. CircleCI 계정에서 프로젝트를 설정하여 파이프라인을 활성화해야 합니다.
1. 웹 브라우저에서 GitHub 계정으로 CircleCI 계정에 로그인합니다.
2. 다음으로 왼쪽 패널에서 프로젝트 탭을 클릭하고 프로젝트 오른쪽에 있는 프로젝트 설정 버튼을 클릭하여 프로젝트에서 CircleCI 파이프라인을 활성화합니다.
GitHub 계정으로 CircleCI에 로그인했으므로 프로젝트가 CircleCI와 동기화되어 이미지에 표시됩니다(아래 이미지 참조).

3. 대시보드 탭으로 돌아가면 성공 상태가 표시됩니다. 성공 상태는 모든 것이 예상대로 실행되었음을 나타내며 이미지가 Docker Hub 저장소로 푸시되었습니다.
모든 단계를 확인하려면 빌드를 클릭하세요.

아래에서 CircleCI가 파이프라인에서 실행한 단계 목록을 볼 수 있습니다.

4. 마지막으로 Docker Hub 저장소로 돌아가면 CircleCI 파이프라인을 통해 푸시한 이미지가 표시됩니다.

GitHub에 변경 사항을 푸시하여 CircleCI 파이프라인을 트리거합니다.
지금까지 작동하는 CircleCI 파이프라인이 이미 있습니다. 그러나 프로젝트에 변경 사항을 가했다면 파이프라인이 여전히 작동하는지 어떻게 알 수 있을까요? GitHub 저장소에 변경 사항을 푸시하여 CircleCI를 트리거하고 테스트가 성공하는지 확인할 수 있습니다.
1. 로컬 머신에서 test_main.py에 있는 코드를 아래의 코드로 대체합니다. 아래의 코드는 의도적으로 테스트가 실패하도록 설계되었습니다. 왜냐하면 상태 코드가 200
에서 400
으로 변경되었기 때문입니다.
2. 다음으로, Docker 이미지를 빌드하고 Docker Hub에 푸시하는 config.yml의 steps
를 아래의 코드로 대체합니다.
아래의 코드에서는 버전만 변경하여 새로운 변경 사항만 GitHub 저장소에 푸시되도록 합니다.
3. 프로젝트의 루트에서 다음 명령을 실행하여 코드를 GitHub 저장소에 commit
하고 push
합니다.
4. 이제 CircleCI 대시보드로 이동하면 아래와 같이 빌드가 실패한 것을 확인할 수 있습니다.
클릭하여 빌드를 실행하고 변경 사항을 확인하여 빌드가 실패한 원인을 확인하십시오.


5. 마지막으로 Docker Hub 저장소로 이동하여 변경 사항이 전송되지 않았는지 확인하십시오.
아래 이미지에서 확인할 수 있듯이 테스트가 실패했기 때문에 v2가 업로드되지 않았습니다.

결론
이 튜토리얼을 통해 테스트 작성 및 Python 애플리케이션을 Dockerize하는 방법을 배웠습니다. CircleCI를 사용하여 애플리케이션을 테스트하고 Docker 이미지를 Docker Hub에 푸시하는 CI/CD 파이프라인을 만들었습니다.
이 시점에서 이미 CircleCI를 사용한 CI/CD 파이프라인을 개발하는 기본 지식이 있습니다. 이 새로운 지식을 어떻게 활용할 계획이신가요? 어쩌면 Docker 이미지를 Heroku에 배포하는 CI/CD 파이프라인을 생성할까요?
Source:
https://adamtheautomator.com/circleci-docker-images/