Node.js 애플리케이션 빌드 및 테스트

이 페이지에서는 Cloud Build를 사용하여 Node.js 애플리케이션을 빌드 및 테스트하고 Artifact Registry의 npm 저장소에 빌드된 아티팩트를 저장하고 빌드 출처 정보를 생성하는 방법을 설명합니다.

Cloud Build를 사용하면 공개적으로 사용 가능한 컨테이너 이미지를 사용하여 작업을 실행할 수 있습니다. Docker Hub의 공개 node 이미지npm 도구가 사전 설치된 상태로 제공됩니다. 이 도구를 사용하여 Node.js 프로젝트를 빌드하도록 Cloud Build를 구성할 수 있습니다.

시작하기 전에

이 페이지의 안내는 사용자가 Node.js에 익숙하다고 가정합니다. 또한 다음 사항도 적용됩니다.

  • npm에 익숙해야 합니다.
  • package.jsontest.js 파일을 포함하여 Node.js 프로젝트를 준비합니다.
  • package.json 파일에 start 스크립트 및 test 스크립트가 포함되었는지 확인합니다.
  • Cloud Build 구성 파일 작성 방법을 숙지합니다.
  • Artifact Registry에 npm 저장소가 있습니다. 저장소가 없으면 새 저장소를 만듭니다.
  • 이 페이지에서 gcloud 명령어를 실행하려면 Google Cloud CLI를 설치합니다.

npm으로 빌드

Docker Hub의 node 이미지에서 작업을 수행하려면 Cloud Build 구성 파일name 필드에 이미지 URL을 지정합니다. Cloud Build는 이미지의 기본 진입점을 사용하여 name 필드에 지정된 컨테이너를 시작합니다. 기본 진입점을 재정의하고 호출된 빌드 단계의 실행 방법을 정의하려면 빌드 단계에서 entrypoint 필드를 추가합니다. Docker Hub의 node 이미지는 npm 도구가 사전 설치된 상태로 제공됩니다. 빌드 단계의 진입점으로 호출하도록 entrypoint 필드에 도구를 지정합니다.

빌드 구성 파일 예시는 다음과 같습니다.

  • name 필드는 Docker Hub의 node 이미지가 태스크 수행을 위해 Cloud Build에 사용되도록 지정합니다. node 이미지를 지정할 경우, 노드 버전을 생략하여 기본적으로 :latest가 사용되도록 하거나, 특정 버전을 사용하도록 노드 버전을 지정할 수 있습니다. 예를 들어 name: node는 노드의 최신 버전을 사용하고 name: node:12node:12를 사용합니다.
  • entrypoint 필드는 node 이미지가 호출될 때 npm 도구가 사용되도록 지정합니다.

     steps:
     - name: 'node'
       entrypoint: 'npm'
    

Node.js 빌드 구성

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

  2. 종속 항목 설치: 애플리케이션을 빌드하려면 먼저 프로젝트의 모든 종속 항목이 npm에서 설치되었는지 확인해야 합니다. 종속 항목은 npm 빌드 단계 내에서 install 명령어를 사용하여 설치할 수 있습니다. 빌드 단계의 args 필드는 인수 목록을 가져와서 이름 필드로 참조되는 이미지에 전달합니다. 빌드 구성 파일에서 installargs 필드에 추가하여 install 명령어를 호출합니다.

     steps:
     - name: 'node'
       entrypoint: 'npm'
       args: ['install']
    
  3. 테스트 추가: package.jsontest 스크립트를 정의한 경우 testargs 필드에 추가하여 스크립트를 실행하도록 Cloud Build를 구성할 수 있습니다.

     steps:
     - name: 'node'
       entrypoint: 'npm'
       args: ['install']
     - name: 'node'
       entrypoint: 'npm'
       args: ['test']
    
  4. 커스텀 명령어 실행: package.json에 커스텀 명령어가 포함된 경우 이 명령어를 실행하도록 Cloud Build를 구성할 수 있습니다. args 필드에서 run을 첫 번째 인수로 추가하고, 커스텀 명령어 이름을 지정합니다. 다음 빌드 구성 파일에는 build라는 커스텀 명령어를 실행하기 위한 인수가 포함되어 있습니다.

     steps:
     - name: 'node'
        entrypoint: 'npm'
        args: ['install']
     - name: 'node'
        entrypoint: 'npm'
        args: ['test']
     - name: 'node'
        entrypoint: 'npm'
        args: ['run', 'build']
    
  5. Artifact Registry에 업로드:

    Cloud Build는 Cloud Build 구성 파일에서 npmPackages 필드를 사용하여 Artifact Registry에 패키지를 업로드할 때 독립형 npm 패키지에 대해 SLSA(Supply chain Levels for Software Artifacts) 빌드 출처 정보를 생성합니다.

    구성 파일에서 npmPackages 필드를 추가하고 Artifact Registry에서 npm 저장소를 지정합니다.

     artifacts:
        npmPackages:
        - repository: 'https://LOCATION-npm.pkg.dev/PROJECT-ID/REPOSITORY_NAME'
          packagePath: 'PACKAGE_PATH'
    

    다음 값을 바꿉니다.

    • LOCATION: Artifact Registry에서 저장소의 위치입니다.
    • PROJECT_ID: Artifact Registry 저장소가 포함된 Google Cloud 프로젝트의 ID입니다.
    • REPOSITORY_NAME: Artifact Registry에 있는 npm 저장소의 이름입니다.
    • PACKAGE_PATH: Artifact Registry에 업로드하려는 npm 패키지가 포함된 로컬 디렉터리의 경로입니다. 절대 경로를 사용하는 것이 좋습니다. 현재 작업 디렉터리를 사용하려면 PACKAGE_PATH 값이 .가 될 수 있지만 필드를 생략하거나 비워 둘 수 없습니다. 이 디렉터리에는 package.json 파일이 포함되어야 합니다.
  6. 선택사항: 리전 빌드의 출처 사용 설정

    리전 빌드를 사용하는 경우 빌드 구성 파일의 optionsrequestedVerifyOption 필드를 추가합니다. 값을 VERIFIED로 설정하여 출처 메타데이터 생성을 사용 설정합니다. requestedVerifyOption: VERIFIED를 추가하지 않으면 Cloud Build가 전역 빌드에 대해서만 출처를 생성합니다.

    options:
      requestedVerifyOption: VERIFIED
    
  7. 빌드 시작: 수동 또는 빌드 트리거를 사용하여 시작합니다.

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

    또한 소프트웨어 공급망 보호를 돕기 위해 빌드 출처 메타데이터를 확인하고 출처를 검증할 수 있습니다.

여러 node 버전에서 테스트 실행

일부 경우에는 여러 node 버전에서 프로젝트가 작동하는지 확인해야 합니다. 다음과 같이 Cloud Build 트리거를 만들고 구성할 수 있습니다.

  • 빌드 구성 파일에서 node 버전을 대체 변수로 지정합니다.
  • 애플리케이션을 빌드하려는 각 node 버전에 대해 하나의 트리거를 만듭니다.
  • 각 트리거 설정에서 대체 변수 값 필드를 사용하여 해당 트리거에 대한 node의 버전을 나타냅니다.

다음 단계에서는 트리거 특정 대체 변수를 사용하여 node 버전을 지정하는 방법을 설명합니다.

  1. 저장소 루트에서 대체 변수로 node 버전을 지정하는 빌드 구성 파일을 추가합니다. 다음 빌드 구성 파일 예시에서 $_NODE_VERSION사용자 정의 대체 변수입니다.

     steps:
     - name: 'node:$_NODE_VERSION'
       entrypoint: 'npm'
       args: ['install']
     - name: 'node:$_NODE_VERSION'
       entrypoint: 'npm'
       args: ['test']
    
  2. 빌드할 node의 각 버전에 대해 다음 단계에 따라 빌드 트리거를 만듭니다.

    1. Google Cloud 콘솔에서 트리거 페이지를 엽니다.

      트리거 페이지 열기

    2. 페이지 상단의 프로젝트 선택기 드롭다운 메뉴에서 프로젝트를 선택합니다.

    3. 열기를 클릭합니다.

    4. 트리거 만들기를 클릭합니다.

      트리거 만들기 페이지에서 다음 설정을 입력합니다.

      1. 트리거 이름을 입력합니다.

      2. 트리거를 시작할 저장소 이벤트를 선택합니다.

      3. 소스 코드와 빌드 구성 파일이 포함된 저장소를 선택합니다.

      4. 트리거를 시작할 분기 또는 태그 이름의 정규식을 지정합니다.

      5. 구성: 이전에 만든 빌드 구성 파일을 선택합니다.

      6. 대체 변수 아래에서 변수 추가를 클릭합니다.

        1. 변수 아래에서 빌드 구성 파일에 사용한 node 버전 변수를 지정하고 아래에서 node의 버전을 지정합니다. 예를 들면 _NODE_VERSION12입니다.
    5. 만들기를 클릭하여 빌드 트리거를 저장합니다.

이러한 트리거를 사용하여 트리거에 지정한 node 버전으로 코드를 빌드할 수 있습니다.

다음 단계