Cloud Build에 연결

이 페이지에서는 Artifact Registry 저장소에 빌드된 아티팩트를 저장하도록 Cloud Build를 구성하는 방법을 설명합니다.

시작하기 전에

  1. Artifact Registry에 대상 저장소가 없으면 새 저장소를 만듭니다.
  2. Cloud Build와 저장소가 다른 프로젝트에 있거나 빌드를 실행하는 데 사용자 지정 서비스 계정을 사용하는 경우 저장소가 있는 프로젝트의 빌드 서비스 계정에 Artifact Registry 작성자 역할을 부여합니다.

    기본 Cloud Build 서비스 계정에는 동일한 Google Cloud 프로젝트의 저장소로 다음 작업을 수행할 수 있는 액세스 권한이 있습니다.

    • 아티팩트 업로드 및 다운로드
    • Artifact Registry에서 gcr.io 저장소 만들기

Docker 빌드 구성

대상 저장소에 대한 권한을 부여하면 빌드를 구성할 수 있습니다.

빌드를 구성하려면 다음 안내를 따르세요.

  1. 빌드 구성 파일에 이미지를 빌드하고 태그를 지정하는 단계를 추가합니다.

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: [ 'build', '-t', '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}', '.' ]
    images:
    - '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}'
    

    이 스니펫은 Cloud Build 대체 항목을 사용합니다. 이 방식은 동일한 빌드 구성 파일을 사용하여 테스트, 스테이징 또는 프로덕션과 같은 다양한 환경의 저장소에 이미지를 내보내려는 경우에 유용합니다.

    • ${_LOCATION}, ${_REPOSITORY}, ${_IMAGE}는 저장소 위치, 저장소 이름, 이미지에 대한 사용자 정의 대체 항목입니다. 이러한 변수의 값은 빌드 시 지정합니다.
    • $PROJECT_ID는 Cloud Build가 빌드의 Google Cloud 프로젝트 ID로 확인하는 기본 대체 항목입니다.

      • gcloud builds submit 명령어를 실행하면 Cloud Build가 gcloud 세션에서 활성 프로젝트 ID를 사용합니다.
      • 빌드 트리거를 사용하면 Cloud Build는 Cloud Build가 실행 중인 프로젝트의 ID를 사용합니다.

      또는 빌드 시 프로젝트 ID를 지정할 수 있도록 $PROJECT_ID 대신 사용자 정의 대체 항목을 사용할 수 있습니다.

  2. 빌드를 실행할 준비가 되면 사용자 정의 대체 항목 값을 지정합니다. 예를 들어 이 명령어는 다음을 대체합니다.

    • us-east1: 저장소 위치
    • my-repo: 저장소 이름
    • my-image: 이미지 이름
    gcloud builds submit --config=cloudbuild.yaml \
      --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_IMAGE="my-image" .
    

Go 빌드 구성

대상 저장소에 대한 권한을 부여하면 빌드를 구성할 수 있습니다. 다음 안내에서는 Go 모듈을 Go 저장소에 업로드하도록 빌드를 구성하는 방법을 설명합니다.

빌드를 구성하려면 다음 안내를 따르세요.

  1. Go 모듈을 빌드의 Go 저장소로 업로드하려면 다음 단계를 빌드 구성 파일에 추가합니다.

    steps:
    - name: gcr.io/cloud-builders/gcloud
    args:
    - 'artifacts'
    - 'go'
    - 'upload'
    - '--project=$PROJECT_ID'
    - '--location=${_LOCATION}'
    - '--repository=${_REPOSITORY}'
    - '--module-path=${_MODULE_PATH}'
    - '--version=$TAG_NAME'
    

    빌드 구성 파일에는 Cloud Build 대체 항목이 포함됩니다. 이 방식은 동일한 빌드 구성 파일을 사용하여 테스트, 스테이징 또는 프로덕션과 같은 다양한 환경의 저장소에 패키지를 업로드하려는 경우에 유용합니다.

    • ${_LOCATION}, ${_REPOSITORY}, ${_MODULE_PATH}는 저장소 위치, 저장소 이름, 모듈 경로에 대한 사용자 정의 대체 항목입니다. 이러한 변수의 값은 빌드 시 지정합니다.
    • $PROJECT_ID$TAG_NAME은 Cloud Build가 다음으로 대체하는 기본 대체 항목입니다.

      • $PROJECT_ID는 빌드의 Google Cloud 프로젝트 ID로 대체됩니다.

        • gcloud builds submit 명령어를 실행하면 Cloud Build가 gcloud 세션에서 활성 프로젝트 ID를 사용합니다.
        • 빌드 트리거를 사용하면 Cloud Build는 Cloud Build가 실행 중인 프로젝트의 ID를 사용합니다.

        또는 빌드 시 프로젝트 ID를 지정할 수 있도록 $PROJECT_ID 대신 사용자 정의 대체 항목을 사용할 수 있습니다.

      • $TAG_NAME은 Git 태그를 버전 번호로 사용하는 Go 규칙을 지원하기 위해 태그 이름으로 대체됩니다.

  2. Go 저장소에서 패키지를 설치하려면 빌드 구성 파일에 다음 단계를 추가합니다.

    • 저장소 위치의 리전 Artifact Registry 엔드포인트를 .netrc 파일에 추가합니다.
    • 사용자 인증 정보 도우미 도구를 실행하여 OAuth 토큰을 새로고침합니다.
    • go run 명령어를 실행합니다. go build로 변경하여 모듈을 컴파일하거나, go test로 변경하여 테스트를 실행하거나, go mod tidy로 변경하여 종속 항목을 다운로드할 수 있습니다.

    go 명령어 단계의 경우 비공개 종속 항목을 호스팅하는 Artifact Registry 저장소로 GOPROXY가 설정됩니다. 모듈에 공개 종속 항목이 있는 경우 공개 프록시를 쉼표로 구분된 GOPROXY 목록에 추가할 수 있습니다.

    steps:
    - name: golang
      entrypoint: go
      args: ['run', 'github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0', 'add-locations', '--locations=${_LOCATION}']
      env:
      # Set GOPROXY to the public proxy to pull the credential helper tool
      - 'GOPROXY=https://proxy.golang.org'
    - name: golang
      entrypoint: go
      args: ['run', 'github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0', 'refresh']
      env:
      # Set GOPROXY to the public proxy to pull the credential helper tool
      - 'GOPROXY=https://proxy.golang.org'
    - name: golang
      entrypoint: go
      args: ['run', '.']
      env:
      - 'GOPROXY=https://${_LOCATION}-go.pkg.dev/${_PROJECT_ID}/${_REPOSITORY}'
    options:
      env:
      # Disable GO sumdb checks for private modules.
      - 'GONOSUMDB=${_MODULE_PATH}'
    
  3. 빌드를 실행할 준비가 되면 사용자 정의 대체 항목 값을 지정합니다. 예를 들어 이 명령어는 다음을 대체합니다.

    • us-east1: 저장소 위치
    • my-project: 프로젝트 ID
    • my-repo: 저장소 이름
    • example.com/greetings: 모듈 경로
    gcloud builds submit --config=cloudbuild.yaml \
      --substitutions=_LOCATION="us-east1",_PROJECT_ID="my-project",_REPOSITORY="my-repo",_MODULE_PATH="example.com/greetings" .
    

Java 빌드 구성

대상 저장소에 대한 권한을 부여하면 빌드를 구성할 수 있습니다. 다음 안내에서는 자바 패키지를 Maven 저장소에 업로드하도록 빌드를 구성하는 방법을 설명합니다.

빌드를 구성하려면 다음 안내를 따르세요.

  1. Maven의 인증을 설정합니다. pom.xml 파일에 올바른 대상 프로젝트와 저장소를 지정해야 합니다.

  2. Cloud Build 빌드 구성 파일에 Maven으로 패키지를 업로드하는 단계를 추가합니다.

    steps:
    - name: gcr.io/cloud-builders/mvn
      args: ['deploy']
    
  3. 빌드 구성 파일이 준비되면 다음 명령어를 사용하여 빌드를 시작합니다.

    gcloud builds submit
    

Node.js 빌드 구성

대상 저장소에 대한 권한을 부여하면 빌드를 구성할 수 있습니다. 다음 안내에서는 Node.js 패키지를 npm 저장소에 업로드하도록 빌드를 구성하는 방법을 설명합니다.

빌드를 구성하려면 다음 안내를 따르세요.

  1. Node.js 프로젝트의 .npmrc 파일에 Artifact Registry 저장소를 추가합니다. 파일은 package.json 파일이 있는 디렉터리에 있습니다.

    @SCOPE:registry=https://LOCATION-npm.pkg.dev/PROJECT_ID/REPOSITORY
    //LOCATION-npm.pkg.dev/PROJECT_ID/REPOSITORY/:always-auth=true
    
    • SCOPE-NAME은 저장소와 연결할 npm 범위의 이름입니다. 범위를 사용하면 항상 올바른 저장소에서 패키지를 게시하고 설치할 수 있습니다.
    • PROJECT_ID는 Google Cloud 프로젝트 ID입니다.
    • LOCATION은 저장소의 리전 또는 멀티 리전 위치입니다.
    • REPOSITORY은 저장소 이름입니다.
  2. 저장소의 인증을 위해 액세스 토큰을 새로고침하는 스크립트를 프로젝트의 package.json 파일에 추가합니다.

    "scripts": {
     "artifactregistry-login": "npx google-artifactregistry-auth"
    }
    
  1. 빌드 구성 파일에 패키지를 저장소에 업로드하는 단계를 추가합니다.

    steps:
    - name: gcr.io/cloud-builders/npm
      args: ['run', 'artifactregistry-login']
    - name: gcr.io/cloud-builders/npm
      args: ['publish', '${_PACKAGE}']
    

    ${_PACKAGE}은 Node.js 프로젝트 디렉터리를 나타내는 Cloud Build 대체 항목입니다. 빌드 실행 명령어를 실행할 때 디렉터리를 지정할 수 있습니다.

    예를 들어 이 명령어는 src 디렉터리에서 패키지를 업로드합니다.

    gcloud builds submit --config=cloudbuild.yaml \
        --substitutions=_PACKAGE="src" .
    

Python 빌드 구성

대상 저장소에 대한 권한을 부여하면 빌드를 구성할 수 있습니다. 다음 안내에서는 Python 패키지를 Python 저장소에 업로드하고 pip를 사용하여 패키지를 설치하도록 빌드를 구성하는 방법을 설명합니다.

Python 애플리케이션을 빌드하고 컨테이너화한 후 Docker 저장소로 푸시하려면 Cloud Build 문서의 Python 애플리케이션 빌드를 참조하세요.

빌드를 구성하려면 다음 안내를 따르세요.

  1. Cloud Build 빌드 구성 파일이 있는 디렉터리에서 다음 종속 항목이 포함된 requirements.txt라는 파일을 만듭니다.

    twine
    keyrings.google-artifactregistry-auth
    
    • Twine은 Artifact Registry에 패키지를 업로드하기 위한 것입니다.
    • keyrings.google-artifactregistry-auth는 pip 및 Twine용 Artifact Registry로 인증을 처리하는 Artifact Registry 키링 백엔드입니다.
  2. 빌드의 Python 저장소에 Python 패키지를 업로드하려면 빌드 구성 파일에 다음 단계를 추가합니다.

    steps:
    - name: python
      entrypoint: pip
      args: ["install", "-r", "requirements.txt", "--user"]
    - name: python
      entrypoint: python
      args:
      - '-m'
      - 'twine'
      - 'upload'
      - '--repository-url'
      - 'https://${_LOCATION}-python.pkg.dev/$PROJECT_ID/${_REPOSITORY}/'
      - 'dist/*'
    

    이 스니펫의 첫 번째 단계로 Twine 및 Artifact Registry 키링 백엔드를 설치합니다. 두 번째 단계에서는 빌드된 Python 파일을 dist 하위 디렉터리에 업로드합니다. requirements.txt 및 빌드된 Python 파일의 경로가 스니펫과 일치하지 않으면 경로를 조정합니다.

    저장소 경로에는 Cloud Build 대체 항목이 포함됩니다. 이 방식은 동일한 빌드 구성 파일을 사용하여 테스트, 스테이징 또는 프로덕션과 같은 다양한 환경의 저장소에 패키지를 업로드하려는 경우에 유용합니다.

    • ${_LOCATION}${_REPOSITORY}는 저장소 위치, 저장소 이름, 패키지 이름에 대한 사용자 정의 대체 항목입니다. 이러한 변수의 값은 빌드 시 지정합니다.
    • $PROJECT_ID는 Cloud Build가 빌드의 Google Cloud 프로젝트 ID로 확인하는 기본 대체 항목입니다.

      • gcloud builds submit 명령어를 실행하면 Cloud Build가 gcloud 세션에서 활성 프로젝트 ID를 사용합니다.
      • 빌드 트리거를 사용하면 Cloud Build는 Cloud Build가 실행 중인 프로젝트의 ID를 사용합니다.

      또는 빌드 시 프로젝트 ID를 지정할 수 있도록 $PROJECT_ID 대신 사용자 정의 대체 항목을 사용할 수 있습니다.

  3. Python 저장소에서 패키지를 설치하려면 pip install 명령어를 실행하는 단계를 빌드 구성 파일에 추가합니다.

      steps:
      - name: python
        entrypoint: pip
        args:
        - 'install'
        - '--index-url'
        - 'https://${_LOCATION}-python.pkg.dev/$PROJECT_ID/${_REPOSITORY}/simple/'
        - '${_PACKAGE}'
        - '--verbose'
    

    이 스니펫에는 패키지 이름에 대한 추가 ${_PACKAGE} 대체 항목이 포함됩니다.

  4. 빌드를 실행할 준비가 되면 사용자 정의 대체 항목 값을 지정합니다. 예를 들어 이 명령어는 다음을 대체합니다.

    • us-east1: 저장소 위치
    • my-repo: 저장소 이름
    • my-package: 패키지 이름
    gcloud builds submit --config=cloudbuild.yaml \
      --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_PACKAGE="my-package" .