자바 애플리케이션 빌드, 테스트, 컨테이너화

이 페이지에서는 Cloud Build를 사용하여 자바 기반 애플리케이션을 빌드, 테스트, 컨테이너화하고 Artifact Registry에 컨테이너 이미지를 업로드하고, 빌드 출처를 생성하는 방법을 설명합니다.

시작하기 전에

maven 또는 gradle 이미지 사용

Docker Hub에서 maven 이미지 또는 gradle 이미지를 사용하여 Java 애플리케이션을 빌드하도록 Cloud Build를 구성할 수 있습니다.

maven 또는 gradle 이미지에서 작업을 수행하려면 이미지 URL을 지정하고 빌드 구성 파일의 name 필드에 태그로 지정된 이미지 버전을 지정합니다. 이미지 태그를 지정하지 않으면 Cloud Build에 기본적으로 latest 이미지가 사용됩니다. Cloud Build는 이미지의 기본 진입점을 사용하여 name에 지정된 이미지를 시작합니다. 기본 진입점을 재정의하고 maven 또는 gradle을 진입점으로 호출하려면 entrypoint 필드에 mvn 또는 gradle을 지정합니다.

다음 빌드 구성 파일은 maven 또는 gradle 이미지에 대해 entrypoint를 지정하고 빌드 도구 버전을 출력합니다.

maven

steps:
- name: maven:3.3-jdk-8
  entrypoint: mvn
  args: ['--version']

gradle

steps:
- name: gradle:5.6.2-jdk8
  entrypoint: gradle
  args: ['--version']

Java 빌드 구성

  1. 프로젝트 루트 디렉터리에 cloudbuild.yaml이라는 빌드 구성 파일을 만듭니다.

  2. 테스트 실행: mavengradle은 종속 항목을 다운로드하고, 애플리케이션을 빌드하고, 소스 코드에 지정된 모든 테스트를 실행하는 maven testgradle test를 제공합니다. 빌드 단계의 args 필드는 인수 목록을 가져와서 name 필드로 참조되는 이미지에 전달합니다.

    빌드 구성 파일에서 testargs 필드에 추가하여 mavengradle 내에서 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']
    
  3. 패키지 애플리케이션: 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']
    
  4. 애플리케이션 컨테이너화: 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 파일의 이름입니다.
  5. 빌드 시작: 빌드 구성 파일이 준비되었으면 터미널에 다음 명령어를 입력하여 빌드를 시작합니다.

    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-pathsource-directory를 지정하지 않으면 Cloud Build는 구성 파일과 소스 코드가 현재 작업 중인 디렉터리에 있다고 간주합니다.

    빌드가 완료되면 Artifact Registry에서 저장소 세부정보를 확인할 수 있습니다.

    또한 빌드 출처 메타데이터를 확인하고 출처를 검증할 수 있습니다.

코드 예

다음은 자바 앱 빌드를 위해 사용할 수 있는 예시 저장소입니다. 이러한 각 저장소에는 샘플 애플리케이션과 이 애플리케이션을 빌드하고 테스트하기 위한 빌드 구성 파일이 포함되어 있습니다.

  • maven-example: 자바 앱과 이 앱을 mvn로 빌드하고 테스트하기 위한 빌드 구성 파일 예시입니다.
  • gradle-example: 자바 앱과 이 앱을 gradle로 빌드하고 테스트하기 위한 빌드 구성 파일 예시입니다.

다음 단계