이 페이지에서는 Python 애플리케이션을 빌드 및 테스트하고, 아티팩트를 Artifact Registry에 업로드하고, 출처 정보를 생성하고, Cloud Storage에서 테스트 로그를 저장하는 방법을 설명합니다.
Cloud Build를 사용하면 공개적으로 사용 가능한 컨테이너 이미지를 사용하여 작업을 실행할 수 있습니다. Docker Hub의 공개 python
이미지는 python
및 pip
도구가 사전 설치된 상태로 제공됩니다. 종속 항목을 설치하기 위해 이러한 도구를 사용하도록 Cloud Build를 구성하고, 이러한 도구를 사용해서 단위 테스트를 빌드 및 실행할 수 있습니다.
시작하기 전에
이 페이지 안내에서는 사용자가 Python에 익숙하다고 가정합니다. 또한 다음 사항도 적용됩니다.
-
Enable the Cloud Build, Artifact Registry, and Cloud Storage APIs.
- 이 페이지에서
gcloud
명령어를 실행하려면 Google Cloud CLI를 설치합니다. - Python 프로젝트를 준비합니다.
- Artifact Registry에서 Python 저장소를 준비합니다. 저장소가 없으면 새 저장소를 만듭니다.
- Cloud Storage에 테스트 로그를 저장하려면 Cloud Storage에서 버킷을 만듭니다.
필수 IAM 권한
Logging에 테스트 로그를 저장하려면 Cloud Storage 버킷에 대한 스토리지 객체 생성자(
roles/storage.objectCreator
) 역할을 Cloud Build 서비스 계정에 부여합니다.Artifact Registry에 빌드된 이미지를 저장하려면 Artifact Registry 작성자(
roles/artifactregistry.writer
) 역할을 Cloud Build 서비스 계정에 부여합니다.
이러한 역할 부여에 대한 자세한 내용은 IAM 페이지를 사용하여 역할 부여를 참조하세요.
Python 빌드 구성
이 섹션에서는 Python 앱에 대한 빌드 구성 파일 예시를 살펴봅니다. 여기에는 요구사항 설치, 단위 테스트 추가, 테스트 성공 후의 앱 빌드 및 배포를 위한 빌드 단계가 포함되어 있습니다.
프로젝트 루트 디렉터리에서
cloudbuild.yaml
이라는 Cloud Build 구성 파일을 만듭니다.설치 요구사항: Docker Hub의
python
이미지는pip
가 사전 설치된 상태로 제공됩니다.pip
에서 종속 항목을 설치하려면 다음 필드가 포함된 빌드 단계를 추가합니다.name
: 이 태스크에 대해 Docker Hub에서 Python 이미지를 사용하도록 이 필드의 값을python
또는python:<tag>
로 설정합니다. 다른 Python 이미지에 사용할 수 있는 태그 목록은 Python 이미지의 Docker Hub 참조를 확인하세요.entrypoint
: 이 필드를 설정하면name
에 참조된 이미지의 기본 진입점이 재정의됩니다. 빌드 단계의 진입점으로pip
를 호출하도록 이 필드의 값을pip
로 설정하고pip
명령어를 실행합니다.args
: 빌드 단계의args
필드는 인수 목록을 가져와서name
필드로 참조되는 이미지에 전달합니다. 이 필드에서pip install
명령어를 실행하도록 인수를 전달합니다.pip install
명령어의--user
플래그는 후속 빌드 단계가 이 빌드 단계에서 설치된 모듈에 액세스할 수 있도록 합니다.
다음 빌드 단계는 요구사항을 설치하기 위해 인수를 추가합니다.
steps: - name: 'python' entrypoint: 'python' args: ['-m', 'pip', 'install', '--upgrade', 'pip'] - name: python entrypoint: python args: ['-m', 'pip', 'install', 'build', 'pytest', 'Flask', '--user']
단위 테스트 추가:
pytest
와 같은 테스트 프레임워크를 사용하여 애플리케이션에서 단위 테스트를 정의한 경우 빌드 단계에서 다음 필드를 추가하여 테스트를 실행하도록 Cloud Build를 구성할 수 있습니다.name
: 사용자의 태스크에 대해 Docker Hub에서 Python 이미지를 사용하도록 이 필드의 값을python
로 설정합니다.entrypoint
:python
명령어를 실행하도록 이 필드의 값을python
으로 설정합니다.args
:python pytest
명령어를 실행하기 위해 인수를 추가합니다.
다음 빌드 단계는
pytest
로그 출력을 JUNIT XML 파일에 저장합니다. 이 파일의 이름은 해당 빌드와 연관된 커밋 ID의 짧은 버전인$SHORT_SHA
를 사용하여 생성됩니다. 이후의 빌드 단계는 이 파일의 로그를 Cloud Storage에 저장합니다.- name: 'python' entrypoint: 'python' args: ['-m', 'pytest', '--junitxml=${SHORT_SHA}_test_log.xml']
빌드: 빌드 구성 파일에서 애플리케이션을 빌드하도록 빌더와
args
를 정의합니다.name
: 사용자의 태스크에 대해 Docker Hub에서 Python 이미지를 사용하도록 이 필드의 값을python
로 설정합니다.entrypoint
:python
명령어를 실행하도록 이 필드의 값을python
으로 설정합니다.args
: 빌드 실행 인수를 추가합니다.
다음 빌드 단계로 빌드를 시작합니다.
- name: 'python' entrypoint: 'python' args: ['-m', 'build']
Artifact Registry에 업로드:
Cloud Build는 Cloud Build 구성 파일에서 사용 가능한
python_packages
필드를 사용하여 Artifact Registry에 아티팩트를 업로드할 때 독립형 Python 패키지에 대해 SLSA(Supply chain Levels for Software Artifacts) 빌드 출처 정보를 생성합니다.구성 파일에서
pythonPackages
필드를 추가하고 Artifact Registry에서 Python 저장소를 지정합니다.artifacts: pythonPackages: - repository: 'https://LOCATION-python.pkg.dev/PROJECT-ID/REPOSITORY' paths: ['dist/*']
다음 값을 바꿉니다.
- PROJECT-ID는 Artifact Registry 저장소가 포함된 Google Cloud 프로젝트의 ID입니다.
- REPOSITORY는 저장소 ID입니다.
- LOCATION은 저장소의 리전 또는 멀티 리전 위치입니다.
선택사항: 리전 빌드의 출처 사용 설정
리전 빌드를 사용하는 경우 빌드 구성 파일의
options
에requestedVerifyOption
필드를 추가합니다. 값을VERIFIED
로 설정하여 출처 메타데이터 생성을 사용 설정합니다.requestedVerifyOption: VERIFIED
를 추가하지 않으면 Cloud Build가 전역 빌드에 대해서만 출처를 생성합니다.options: requestedVerifyOption: VERIFIED
Cloud Storage에 테스트 로그 저장: 기존 버킷 위치 및 테스트 로그 경로를 지정하여 Cloud Storage에 테스트 로그를 저장하도록 Cloud Build를 구성할 수 있습니다. 다음 빌드 단계는 JUNIT XML 파일에 저장한 테스트 로그를 Cloud Storage 버킷에 저장합니다.
artifacts: objects: location: 'gs://${_BUCKET_NAME}/' paths: - '${SHORT_SHA}_test_log.xml'
빌드 시작: 수동 또는 빌드 트리거를 사용하여 시작합니다.
빌드가 완료되면 Artifact Registry에서 저장소 세부정보를 확인할 수 있습니다.
또한 소프트웨어 공급망 보호를 돕기 위해 빌드 출처 메타데이터를 확인하고 출처를 검증할 수 있습니다.
다음 단계
- 빌드 결과를 확인하는 방법 알아보기
- 빌드 보호 방법 알아보기
- Python 애플리케이션 빌드 및 컨테이너화 방법 알아보기
- 비공개 종속 항목 사용 방법 알아보기
- Compute Engine에서 블루/그린 배포를 수행하는 방법 알아보기
- 빌드 오류 문제 해결 방법 알아보기