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

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

시작하기 전에

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 빌드 구성

  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로 빌드하고 테스트하기 위한 빌드 구성 파일 예시입니다.

다음 단계