이 페이지에서는 Python 애플리케이션을 빌드, 테스트, 컨테이너화, 배포하도록 Cloud Build를 구성하는 방법을 설명합니다.
Cloud Build를 사용하면 공개적으로 사용 가능한 컨테이너 이미지를 사용하여 빌드, 테스트, 컨테이너화, Artifact Registry에 업로드, 배포, 빌드 로그 저장과 같은 개발 태스크를 실행할 수 있습니다. Docker Hub의 공개 python
이미지는 python
및 pip
도구가 사전 설치된 상태로 제공됩니다. 종속 항목을 설치하기 위해 이러한 도구를 사용하도록 Cloud Build를 구성하고, 이러한 도구를 사용해서 단위 테스트를 빌드 및 실행할 수 있습니다.
시작하기 전에
이 페이지 안내에서는 사용자가 Python에 익숙하다고 가정합니다. 또한 다음 사항도 적용됩니다.
-
Enable the Cloud Build, Cloud Run, Cloud Storage and Artifact Registry APIs.
- 이 페이지에서
gcloud
명령어를 실행하려면 Google Cloud CLI를 설치합니다. requirements.txt
파일을 포함하여 Python 프로젝트를 준비합니다. 소스 코드와 함께Dockerfile
이 필요합니다.- Artifact Registry에 빌드한 컨테이너를 저장하려면 Artifact Registry의 Docker 저장소를 만듭니다.
- Cloud Storage에 테스트 로그를 저장하려면 Cloud Storage에서 버킷을 만듭니다.
필수 IAM 권한
Logging에 테스트 로그를 저장하려면 Cloud Storage 버킷에 대한 스토리지 객체 생성자(
roles/storage.objectCreator
) 역할을 빌드 서비스 계정에 부여합니다.Artifact Registry에 빌드된 이미지를 저장하려면 Artifact Registry 작성자(
roles/artifactregistry.writer
) 역할을 빌드 서비스 계정에 부여합니다.
이러한 역할 부여에 대한 자세한 내용은 IAM 페이지를 사용하여 역할 부여를 참조하세요.
Python 빌드 구성
이 섹션에서는 Python 앱에 대한 빌드 구성 파일 예시를 살펴봅니다. 여기에는 요구사항 설치, 단위 테스트 추가, 테스트 성공 후의 앱 빌드 및 배포를 위한 빌드 단계가 포함되어 있습니다.
프로젝트 루트 디렉터리에서
cloudbuild.yaml
이라는 Cloud Build 구성 파일을 만듭니다.설치 요구사항: Docker Hub의
python
이미지는pip
가 사전 설치된 상태로 제공됩니다.pip
에서 종속 항목을 설치하려면 다음 필드가 포함된 빌드 단계를 추가합니다.name
: 이 태스크에 대해 Docker Hub에서 Python 이미지를 사용하도록 이 필드의 값을python
로 설정합니다.entrypoint
: 이 필드를 설정하면name
에 참조된 이미지의 기본 진입점이 재정의됩니다. 빌드 단계의 진입점으로pip
를 호출하도록 이 필드의 값을pip
로 설정하고pip
명령어를 실행합니다.args
: 빌드 단계의args
필드는 인수 목록을 가져와서name
필드로 참조되는 이미지에 전달합니다. 이 필드에서pip install
명령어를 실행하도록 인수를 전달합니다.pip install
명령어의--user
플래그는 후속 빌드 단계가 이 빌드 단계에서 설치된 모듈에 액세스할 수 있도록 합니다.
다음 빌드 단계는
requirements.txt
파일에서 요구사항을 설치하기 위해 인수를 추가합니다.단위 테스트 추가:
pytest
와 같은 테스트 프레임워크를 사용하여 애플리케이션에서 단위 테스트를 정의한 경우 빌드 단계에서 다음 필드를 추가하여 테스트를 실행하도록 Cloud Build를 구성할 수 있습니다.name
: 사용자의 태스크에 대해 Docker Hub에서 Python 이미지를 사용하도록 이 필드의 값을python
로 설정합니다.entrypoint
:python
명령어를 실행하도록 이 필드의 값을python
으로 설정합니다.args
:python pytest
명령어를 실행하기 위해 인수를 추가합니다.
다음 빌드 단계는
pytest
로그 출력을 JUNIT XML 파일에 저장합니다. 이 파일의 이름은 해당 빌드와 연관된 커밋 ID의 짧은 버전을 사용하여 생성됩니다. 이후의 빌드 단계는 이 파일의 로그를 Cloud Storage에 저장합니다.앱 컨테이너화: 테스트가 성공했는지 확인하기 위한 빌드 단계를 추가한 후 애플리케이션을 빌드할 수 있습니다. Cloud Build는 Python 애플리케이션을 컨테이너화하기 위해 사용할 수 있는 사전 빌드된 Docker 이미지를 제공합니다. 앱을 컨테이너화하려면 빌드 단계에서 다음 필드를 추가합니다.
name
: 해당 태스크에 대해 사전 빌드된 Docker 이미지를 사용하도록 이 필드의 값을gcr.io/cloud-builders/docker
로 설정합니다.args
:docker build
명령어에 대한 인수를 이 필드에 대한 값으로 추가합니다.
다음 빌드 단계는
myimage
이미지를 빌드하고 커밋 ID의 짧은 버전을 태그로 지정합니다. 이 빌드 단계는 프로젝트 ID, 저장소 이름, 짧은 SHA 값에 대해 기본 대체 항목을 사용하므로 해당 값이 빌드 시간에 자동으로 대체됩니다.Artifact Registry에 컨테이너 푸시: 빌드 아티팩트를 저장, 관리, 보호하기 위해 사용할 수 있는 Google Cloud 서비스인 Artifact Registry에서 빌드된 컨테이너를 저장할 수 있습니다. 이렇게 하려면 Artifact Registry에 기존 Docker 저장소가 있어야 합니다. Artifact Registry Docker 저장소에 이미지를 저장하도록 Cloud Build를 구성하려면 다음 필드를 사용하여 빌드 단계를 추가합니다.
name
: 해당 태스크에 대해 Container Registry의 공식docker
빌더 이미지를 사용하도록 이 필드의 값을gcr.io/cloud-builders/docker
로 설정합니다.args
:docker push
명령어에 대한 인수를 이 필드에 대한 값으로 추가합니다. 대상 URL에 대해서는 이미지를 저장할 Artifact Registry Docker 저장소를 입력합니다.
다음 빌드 단계는 이전 단계에서 빌드한 이미지를 Artifact Registry에 푸시합니다.
선택사항: Cloud Build에서 소프트웨어 아티팩트에 대한 공급망 등급(SLSA) 빌드 출처 정보를 생성하도록 하려면 다음을 완료하세요.
- 별도의
Docker push
빌드 단계를 사용하는 대신 빌드 단계에서images
필드를 사용합니다. - 빌드 구성 파일의
options
섹션에requestedVerifyOption: VERIFIED
를 추가합니다.
Cloud Run에 컨테이너 배포: Cloud Run에서 이미지를 배포하려면 다음 필드를 사용하여 빌드 단계를 추가합니다.
name
: Cloud Run에 이미지를 배포하기 위해 gcloud CLI를 사용하여gcloud
명령어를 배포하도록 이 필드의 값을google/cloud-sdk
로 설정합니다.args
:gcloud run deploy
명령어에 대해 인수를 이 필드의 값으로 추가합니다.
다음 빌드 단계는 이전에 빌드한 이미지를 Cloud Run에 배포합니다.
Cloud Storage에 테스트 로그 저장: 기존 버킷 위치 및 테스트 로그 경로를 지정하여 Cloud Storage에 테스트 로그를 저장하도록 Cloud Build를 구성할 수 있습니다. 다음 빌드 단계는 JUNIT XML 파일에 저장한 테스트 로그를 Cloud Storage 버킷에 저장합니다.
다음 스니펫은 위에 설명한 모든 단계에 대한 전체 빌드 구성 파일을 보여줍니다.
빌드 시작: 수동 또는 빌드 트리거를 사용하여 시작합니다.
빌드가 완료되면 Artifact Registry에서 저장소 세부정보를 확인할 수 있습니다.
또한 빌드 출처 메타데이터를 확인하고 출처를 검증할 수 있습니다.
다음 단계
- 빌드 결과를 확인하는 방법 알아보기
- 빌드 보호 방법 알아보기
- 독립형 Python 애플리케이션 빌드 방법 알아보기
- 비공개 종속 항목 사용 방법 알아보기
- 빌드 오류 문제 해결 방법 알아보기