이 페이지에서는 Cloud Build를 사용하여 자바 기반 애플리케이션을 빌드, 테스트, 컨테이너화하고 Artifact Registry에 컨테이너 이미지를 업로드하고, 빌드 출처를 생성하는 방법을 설명합니다.
시작하기 전에
- 자바 기반 애플리케이션을 숙지합니다.
Dockerfile
을 포함하여 자바 프로젝트를 준비합니다.- Artifact Registry에서 Docker 저장소를 준비하거나 새 저장소를 만듭니다.
- Cloud Build 구성 파일 작성 방법을 숙지합니다.
- 이 페이지에서
gcloud
명령어를 실행하려면 Google Cloud CLI를 설치합니다.
maven
또는 gradle
이미지 사용
Docker Hub에서 maven
이미지 또는 gradle
이미지를 사용하여 Java 애플리케이션을 빌드하도록 Cloud Build를 구성할 수 있습니다.
maven
maven
이미지에서 태스크를 실행하려면 다음 필드를 사용하여 빌드 구성에 단계를 추가합니다.
name
: 이 필드 값을maven
또는maven:<tag>
로 설정합니다. 여기서 태그는 버전을 나타냅니다. 이미지 태그를 지정하지 않으면 Cloud Build에 기본적으로latest
이미지가 사용됩니다.entrypoint
: 이 필드를 설정하면name
에 참조된 이미지의 기본 진입점이 재정의됩니다. 빌드 단계의 진입점으로mvn
을 호출하도록 이 필드의 값을mvn
으로 설정하고mvn
명령어를 실행합니다.args
: 빌드 단계의args
필드는 인수 목록을 가져와서name
필드로 참조되는 이미지에 전달합니다.
다음 빌드 단계는 3.3-jdk-8
로 태그가 지정된 maven
이미지의 entrypoint
를 지정하고 빌드 도구 버전을 출력합니다.
steps:
- name: maven:3.3-jdk-8
entrypoint: mvn
args: ['--version']
gradle
gradle
이미지에서 태스크를 실행하려면 다음 필드를 사용하여 빌드 구성에 단계를 추가합니다.
name
: 이 필드 값을gradle
또는gradle:<tag>
로 설정합니다. 여기서 태그는 버전을 나타냅니다. 이미지 태그를 지정하지 않으면 Cloud Build에 기본적으로latest
이미지가 사용됩니다.entrypoint
: 이 필드를 설정하면name
에 참조된 이미지의 기본 진입점이 재정의됩니다. 빌드 단계의 진입점으로gradle
을 호출하도록 이 필드의 값을gradle
으로 설정하고gradle
명령어를 실행합니다.args
: 빌드 단계의args
필드는 인수 목록을 가져와서name
필드로 참조되는 이미지에 전달합니다.
다음 빌드 단계는 5.6.2-jdk8
로 태그가 지정된 gradle
이미지의 entrypoint
를 지정하고 빌드 도구 버전을 출력합니다.
steps:
- name: gradle:5.6.2-jdk8
entrypoint: gradle
args: ['--version']
Java
빌드 구성
프로젝트 루트 디렉터리에
cloudbuild.yaml
이라는 빌드 구성 파일을 만듭니다.테스트 실행:
maven
및gradle
은 종속 항목을 다운로드하고, 애플리케이션을 빌드하고, 소스 코드에 지정된 모든 테스트를 실행하는maven test
및gradle test
를 제공합니다. 빌드 단계의args
필드는 인수 목록을 가져와서name
필드로 참조되는 이미지에 전달합니다.빌드 구성 파일에서
test
를args
필드에 추가하여maven
및gradle
내에서test
를 호출합니다.maven
steps: - name: maven:3.3-jdk-8 entrypoint: mvn args: ['test']
gradle
steps: - name: gradle:5.6.2-jdk8 entrypoint: gradle args: ['test']
패키지 애플리케이션:
maven
이미지에 대해 JAR 파일에 애플리케이션을 패키지화하려면args
필드에package
명령어를 지정합니다.package
명령어는/workspace/target/
에 JAR 파일을 빌드합니다.gradle
이미지에 대해 JAR 파일에 애플리케이션을 패키지화하려면args
필드에assemble
명령어를 지정합니다.assemble
명령어는workspace/build/libs
에 JAR 파일을 빌드합니다.다음 빌드 단계는 자바 애플리케이션을 패키지화합니다.
maven
steps: - name: maven:3.3-jdk-8 entrypoint: mvn args: ['package','-Dmaven.test.skip=true']
gradle
steps: - name: gradle:5.6.2-jdk8 entrypoint: gradle args: ['assemble']
애플리케이션 컨테이너화: Cloud Build는 Java 애플리케이션을 컨테이너화하기 위해 사용할 수 있는 사전 빌드된 Docker 이미지를 제공합니다. Java 애플리케이션을 컨테이너화하려면 빌드 구성 파일에서 다음 안내를 따릅니다.
name
필드를 추가하고gcr.io/cloud-builders/docker
에서 사전 빌드된 Docker 이미지를 지정합니다.args
필드를 추가하고 빌드할 컨테이너 이미지 이름, 빌드 아티팩트 경로를 포함하여build
인수를 지정합니다.images
필드를 추가하여 빌드된 컨테이너 이미지를 Artifact Registry에 푸시합니다.선택사항: 빌드 구성 파일의
options
필드 내에requestedVerifyOption: VERIFIED
를 추가하여 소프트웨어 아티팩트에 대한 공급망 등급(SLSA) 출처 생성을 사용 설정합니다.
다음 빌드 단계에서는 애플리케이션을 컨테이너화하고 컨테이너 이미지를 Artifact Registry에 푸시하고, 빌드 출처 정보를 생성합니다.
maven
steps: - name: gcr.io/cloud-builders/docker args: ['build', '-t', 'location-docker.pkg.dev/project-id/repository/image', '--build-arg=JAR_FILE=target/build-artifact', '.'] images: ['location-docker.pkg.dev/project-id/repository/image']
gradle
steps: - name: gcr.io/cloud-builders/docker args: ['build', '-t', 'location-docker.pkg.dev/project-id/repository/image', '--build-arg=JAR_FILE=build/libs/build-artifact', '.'] images: ['location-docker.pkg.dev/project-id/repository/image']
각 항목의 의미는 다음과 같습니다.
- location: 저장소의 리전 또는 멀티 리전 위치입니다.
- project-id: Google Cloud 프로젝트의 ID
- repository: 저장소 Artifact Registry의 이름입니다.
- image: 컨테이너 이미지의 이름입니다.
- build-artifact: 빌드 단계에서 생성된 JAR 파일의 이름입니다.
빌드 시작: 빌드 구성 파일이 준비되었으면 터미널에 다음 명령어를 입력하여 빌드를 시작합니다.
gcloud builds submit --region=REGION --config config-file-path source-directory
각 항목의 의미는 다음과 같습니다.
- config-file-path: 빌드 구성 파일의 경로입니다. 이 예시에서 빌드 구성 파일 이름은
cloudbuild.yaml
입니다. - source-directory: 소스 코드의 경로 또는 URL입니다.
REGION
: 지원되는 빌드 리전 중 하나입니다.
gcloud builds submit
명령어에서 config-file-path와 source-directory를 지정하지 않으면 Cloud Build는 구성 파일과 소스 코드가 현재 작업 중인 디렉터리에 있다고 간주합니다.빌드가 완료되면 Artifact Registry에서 저장소 세부정보를 확인할 수 있습니다.
또한 빌드 출처 메타데이터를 확인하고 출처를 검증할 수 있습니다.
- config-file-path: 빌드 구성 파일의 경로입니다. 이 예시에서 빌드 구성 파일 이름은
코드 예
다음은 자바 앱 빌드를 위해 사용할 수 있는 예시 저장소입니다. 이러한 각 저장소에는 샘플 애플리케이션과 이 애플리케이션을 빌드하고 테스트하기 위한 빌드 구성 파일이 포함되어 있습니다.
- maven-example: 자바 앱과 이 앱을
mvn
로 빌드하고 테스트하기 위한 빌드 구성 파일 예시입니다. - gradle-example: 자바 앱과 이 앱을
gradle
로 빌드하고 테스트하기 위한 빌드 구성 파일 예시입니다.
다음 단계
- 빌드 결과를 확인하는 방법 알아보기
- 빌드 보호 방법 알아보기
- 독립형 자바 애플리케이션을 빌드하는 방법을 알아보기
- Cloud Run에서 애플리케이션 배포 방법 알아보기
- GKE에서 애플리케이션 배포 방법 알아보기
- 빌드 오류 문제 해결 방법 알아보기