CI/CD

지속적 통합 및 배포(CI/CD) 파이프라인은 Google Cloud의 로컬 및 테스트 환경 모두에서 함수가 작동하도록 지원합니다.

로컬에서 개발을 완료하면 Cloud Build와 같은 CI/CD 플랫폼을 구성하여 기존 Cloud Functions 테스트를 지속적으로 실행할 수 있습니다. 지속적 테스트를 통해 코드가 의도한 대로 계속 작동하며 종속 항목이 최신 상태로 유지되는지 확인할 수 있습니다. Cloud Functions는 자동으로 업데이트되지 않으므로 CI/CD 파이프라인(Cloud Build를 기반으로 하는 파이프라인 등)을 구성하여 GitHub, Bitbucket, Cloud Source Repositories와 같은 소스 저장소에서 함수를 자동으로 테스트하고 재배포할 수도 있습니다.

시작하기 전에

이 가이드를 시작하기 전에 환경을 설정합니다.

테스트 프레임워크

테스트 프레임워크는 자동 테스트를 위한 실행 환경을 제공하므로 배포할 때마다 철저히 테스트된 프로덕션 배포를 손쉽게 유지할 수 있습니다. 모의 처리 프레임워크를 사용하면 외부 종속 항목을 모의 처리할 수 있습니다. 외부 종속 항목이란 함수가 함수 코드에 속하지 않는 것을 활용하는 것입니다.

Node.js

이 가이드의 예시에서는 Mocha테스트 프레임워크로 사용하여 테스트를 실행하고 Sinon모의 처리 프레임워크로 사용하여 외부 종속 항목을 모의 처리합니다.

외부 종속 항목이란 함수가 함수 코드에 속하지 않는 것을 활용하는 것입니다. 외부 종속 항목의 일반적인 예시에는 npm, PyPI 또는 Maven과 같은 패키지 관리자를 사용하여 설치된 기타 Google Cloud 서비스와 라이브러리가 있습니다.

Python

이 가이드의 예시에서는 Pytest테스트 프레임워크로 사용하여 테스트를 실행하고 unittest모의 처리 프레임워크로 사용하여 외부 종속 항목을 모의 처리합니다.

외부 종속 항목이란 함수가 함수 코드에 속하지 않는 것을 활용하는 것입니다. 외부 종속 항목의 일반적인 예시에는 pip와 같은 패키지 관리자를 사용하여 설치된 기타 Google Cloud 서비스와 라이브러리가 있습니다.

Go

이 가이드의 예시에서는 표준 라이브러리 testing 패키지를 사용하여 테스트를 실행하지만 시스템 테스트에는 외부 종속 항목이 있습니다.

외부 종속 항목이란 함수가 함수 코드에 속하지 않는 것을 활용하는 것입니다. 외부 종속 항목의 일반적인 예시에는 다운로드한 다른 Google Cloud 서비스와 다른 패키지가 있습니다.

자바

이 가이드의 예시에서는 JUnit 라이브러리를 사용하여 테스트를 실행하고 Mockito모의 처리 프레임워크로 사용하여 외부 종속 항목을 모의 처리합니다.

외부 종속 항목이란 함수가 함수 코드에 속하지 않는 것을 활용하는 것입니다.

Cloud Build 설정

아래 cloudbuild.yaml 빌드 구성 파일로 빌드 트리거를 사용하여 빌드 자동화 가이드의 안내에 따라 함수를 자동으로 테스트 및 배포하도록 Cloud Build를 구성합니다.

Node.js

steps:
- name: 'gcr.io/cloud-builders/npm'
  args: ['install']
  dir: 'function/dir/from/repo/root'
- name: 'gcr.io/cloud-builders/npm'
  args: ['test']
  dir: 'function/dir/from/repo/root'
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['functions', 'deploy', '[YOUR_DEPLOYED_FUNCTION_NAME]', '[YOUR_FUNCTION_TRIGGER]', '--runtime', '[YOUR_RUNTIME]', '--entry-point', '[YOUR_FUNCTION_NAME_IN_CODE]']
  dir: 'function/dir/from/repo/root'

Python

steps:
- name: 'docker.io/library/python:3.10'
  entrypoint: /bin/sh
  # Run pip install and pytest in the same build step
  # (pip packages won't be preserved in future steps!)
  args: [-c, 'pip install -r requirements.txt && pytest']
  dir: 'function/dir/from/repo/root'
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['functions', 'deploy', '[YOUR_DEPLOYED_FUNCTION_NAME]', '[YOUR_FUNCTION_TRIGGER]', '--runtime', 'python37', '--entry-point', '[YOUR_FUNCTION_NAME_IN_CODE]']
  dir: 'function/dir/from/repo/root'

Go

steps:
- name: golang
  args: ['go', 'version']
- name: golang
  args: ['go', 'test']
  dir: 'function/dir/from/repo/root'
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['functions', 'deploy', '[YOUR_DEPLOYED_FUNCTION_NAME]', '[YOUR_FUNCTION_TRIGGER]', '--runtime', 'go113', '--entry-point', '[YOUR_FUNCTION_NAME_IN_CODE]']
  dir: 'function/dir/from/repo/root'

자바

steps:
- name: 'gcr.io/cloud-builders/mvn'
  args: ['clean', 'verify']
  dir: 'function/dir/from/repo/root'
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['functions', 'deploy', '[YOUR_DEPLOYED_FUNCTION_NAME]', '[YOUR_FUNCTION_TRIGGER]', '--runtime', 'java11', '--entry-point', '[YOUR_FUNCTION_NAME_IN_CODE]']
  dir: 'function/dir/from/repo/root'

다음과 같이 바꿉니다.

  • [YOUR_DEPLOYED_FUNCTION_NAME]을 Google Cloud Console, Cloud SDK, URL에 사용할 Cloud Functions의 이름으로 바꿉니다.
  • [YOUR_FUNCTION_TRIGGER]--trigger-http와 같은 적절한 트리거 값으로 바꿉니다.
  • [YOUR_RUNTIME]nodejs10와 같은 런타임 식별자로 바꿉니다.
  • [YOUR_FUNCTION_NAME_IN_CODE]를 코드에 표시되는 함수 이름으로 바꿉니다. --entry-point는 이 값이 [YOUR_DEPLOYED_FUNCTION_NAME]과 다른 경우에만 필요합니다.
  • function/dir/from/repo/root를 함수가 포함된 디렉터리의 경로로 바꿉니다.

빌드 및 배포 실행을 위한 권한 부여

Cloud Build를 사용하여 Cloud Functions를 배포하는 경우 Cloud Build 서비스 계정(PROJECT_NUMBER@cloudbuild.gserviceaccount.com)에 권한을 부여해야 합니다. Cloud Build 서비스 계정은 사용자 대신 빌드를 실행하는 데 사용됩니다.

  1. 프로젝트 번호를 찾습니다.

    gcloud projects describe PROJECT_ID
    

    프로젝트를 식별하는 방법에 대한 자세한 내용은 프로젝트 만들기 및 관리를 참조하세요.

  2. Cloud Build 서비스 계정이 Cloud Functions 런타임 서비스 계정으로 작업하도록 허용합니다.

    gcloud iam service-accounts add-iam-policy-binding PROJECT_ID@appspot.gserviceaccount.com \
     --member serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
     --role roles/iam.serviceAccountUser
    
  3. Cloud Build에서 Cloud Functions를 배포할 수 있도록 Cloud Build 서비스 계정에 Cloud Functions 개발자 역할을 할당합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
     --member serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
     --role roles/cloudfunctions.developer
    

자세한 내용은 Cloud Functions IAM 역할을 참조하세요.

이제 Cloud Build가 사용 설정된 저장소로 푸시할 때마다 cloudbuild.yaml 파일의 단계가 실행됩니다.