Artifact Registry에 Go 모듈 저장

비공개 Artifact Registry Go 저장소를 설정하고, 저장소에 모듈을 업로드하고, 모듈을 종속 항목으로 사용합니다.

시작하기 전에

  1. Google 계정에 로그인합니다.

    아직 계정이 없으면 새 계정을 등록하세요.

  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. Artifact Registry API 사용 설정

    API 사용 설정

  5. Google Cloud CLI를 설치합니다.
  6. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

    gcloud init
  7. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  8. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  9. Artifact Registry API 사용 설정

    API 사용 설정

  10. Google Cloud CLI를 설치합니다.
  11. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

    gcloud init
  12. Go 1.15 이상을 설치합니다.
  13. package-go-module gcloud CLI 부가기능인
    을 설치합니다.
    gcloud components install package-go-module

저장소 만들기

새 저장소를 만들고 구성하려면 다음 안내를 따르세요.

  1. 다음 명령어를 실행하여 새 저장소를 만듭니다.

    gcloud artifacts repositories create REPOSITORY \
        --repository-format=go \
        --location=LOCATION \
        --description=DESCRIPTION
    

    다음을 바꿉니다.

    • REPOSITORY은 저장소 이름입니다. 프로젝트의 저장소 위치마다 저장소 이름이 고유해야 합니다.
    • LOCATION은 저장소의 리전 또는 멀티 리전 위치입니다. 기본값을 설정하는 경우 이 플래그를 생략할 수 있습니다. 지원되는 저장소 위치 목록을 보려면 gcloud artifacts locations list 명령어를 실행합니다.
    • DESCRIPTION은 선택사항으로, 저장소의 설명입니다. 저장소 설명은 암호화되지 않으므로 민감한 정보는 포함하지 마세요.
  2. 다음 명령어를 실행하여 저장소 세부정보를 확인합니다.

      gcloud artifacts repositories describe --location=LOCATION REPOSITORY
    

    다음과 유사한 결과가 출력됩니다.

      Encryption: Google-managed key
      Repository Size: 0.000MB
      createTime: '2022-06-03T20:20:01.644813Z'
      format: GO
      mode: STANDARD_REPOSITORY
      name: projects/my-project/locations/us-west1/repositories/my-repo
      updateTime: '2022-06-03T20:20:01.644813Z'
    

gcloud 명령어 기본값 설정

프로젝트, 저장소, 위치 값의 기본값을 구성하여 gcloud CLI 명령어를 단순화할 수 있습니다. 기본값이 구성되면 --project, --location, --repository 태그가 필요하지 않습니다.

Go 모듈 패키징 및 업로드

package-go-module gcloud CLI 부가기능은 Go 모듈을 패키징하여 gcloud 명령어를 사용한 Artifact Registry 버전 지정 및 업로드를 지원합니다.

Go 모듈 만들기

먼저 저장소에 업로드할 간단한 Go 모듈을 만듭니다.

  1. 홈 디렉터리에서 모듈에 'foo'라는 디렉터리를 만듭니다.

    mkdir foo
    
  2. 디렉터리를 모듈 디렉터리로 변경하고 go mod init를 실행하여 모듈용 go.mod 파일을 만듭니다.

      cd foo \
      go mod init example.com/foo
    

    example.com/foo를 모듈 경로로 바꿉니다. 자세한 내용은 Go 모듈 참조를 확인하세요.

  3. 다음 콘텐츠로 foo 디렉터리에 foo.go라는 파일을 만듭니다.

    
    package foo
    
    const HelloWorld = "Hello World!"
    

모듈 패키징 및 업로드

모듈을 패키징하고 저장소에 업로드합니다.

  gcloud artifacts go upload --project=PROJECT \
      --repository=REPOSITORY \
      --location=LOCATION \
      --module-path=example.com/foo \
      --version=VERSION \
      --source=SOURCE_LOCATION

다음을 바꿉니다.

  • PROJECT를 Google Cloud 프로젝트 ID로 바꿉니다.
  • REPOSITORY를 패키지가 저장된 저장소의 이름으로 바꿉니다.
  • LOCATION을 저장소의 리전 또는 멀티 리전 위치로 바꿉니다.
  • example.com/foo를 모듈 경로로 바꿉니다. 자세한 내용은 Go 모듈 참조를 확인하세요.
  • VERSIONvX.Y.Z 형식으로 된 모듈의 시맨틱 버전으로 바꿉니다. 여기서 X는 주 버전이고 Y는 부 버전이고 Z는 패치 버전입니다.
  • SOURCE_LOCATION을 Go 모듈의 루트 디렉터리 경로로 바꿉니다. --source 플래그를 생략하면 기본값은 현재 디렉터리입니다.

모듈이 Artifact Registry에 업로드됩니다.

Go 모듈 만들기에 대한 자세한 내용은 이 튜토리얼을 참조하세요.

모듈 나열

기본값이 구성된 경우 다음 명령어를 실행하여 기본 프로젝트, 저장소, 위치에서 업로드된 Go 모듈을 검사합니다.

  gcloud artifacts packages list

다음과 유사한 결과가 출력됩니다.

  Listing items under project my-project, location us-west1, repository my-repo.

  PACKAGE                   CREATE_TIME          UPDATE_TIME
  example.com/foo           2022-06-03T20:43:39  2022-06-20T20:37:40

모듈 버전 세부정보 보기

다음 명령어를 실행하여 기본값이 구성된 경우 기본 프로젝트, 저장소, 위치의 모듈 버전을 확인합니다.

  gcloud artifacts versions list --package=MODULE_PATH

다음과 유사한 결과가 출력됩니다.

  Listing items under project my-project, location us-west1, repository my-repo, package example.com/foo.

  VERSION  DESCRIPTION  CREATE_TIME          UPDATE_TIME
  v0.1.0                2022-06-03T20:43:39  2022-06-03T20:43:39
  v0.1.1                2022-06-20T20:37:40  2022-06-20T20:37:40

모듈 다운로드

Artifact Registry에 저장된 모듈을 가져오려면 Artifact Registry에서 종속 항목을 찾고 체크섬 데이터베이스를 우회하도록 Go에 지시해야 합니다.

Go 환경 설정

  1. Artifact Registry에서 모듈, 공개 Go 모듈 프록시, 그리고 소스의 순서대로 다운로드하도록 Go에 지시합니다.

      export GOPROXY=https://LOCATION-go.pkg.dev/PROJECT/REPOSITORY,https://proxy.golang.org,direct
    

    다음을 바꿉니다.

    • LOCATION은 저장소의 리전 또는 멀티 리전 위치입니다.
    • PROJECT는 Google Cloud 프로젝트 ID입니다.
    • REPOSITORY는 패키지가 저장된 저장소의 이름입니다.
  2. 공개 체크섬 데이터베이스를 사용하여 모듈을 검사에서 제외합니다.

      export GONOSUMDB=MODULE_PATH_REGEX
    

    여러 모듈을 제외하려면 MODULE_PATH_REGEX를 모듈 경로 또는 정규식으로 바꿉니다.

    공개 체크섬 데이터베이스를 사용하여 example.com/foo 모듈이 검사되지 않도록 제외하려면 다음 명령어를 실행합니다.

      export GONOSUMDB=example.com/foo
    

    example.com으로 시작하는 모듈 경로가 있는 모든 모듈이 공개 체크섬 데이터베이스를 사용하여 검사되지 않도록 제외하려면 다음 명령어를 실행합니다.

      export GONOSUMDB=example.com/*
    

Artifact Registry에 인증

Artifact Registry에서 종속 항목으로 사용하기 위해 패키징된 Go 모듈을 다운로드할 때 Go 바이너리는 netrc 파일의 사용자 인증 정보를 사용하여 Artifact Registry에 인증합니다. 인증 프로세스를 단순화하려면 Go 사용자 인증 정보 도우미를 사용하여 Artifact Registry에 인증할 수 있도록 netrc 파일의 토큰을 새로고침하면 됩니다.

netrc 파일의 위치는 netrc 환경 변수로 설정할 수 있습니다. NETRC 변수가 설정되지 않은 경우 go 명령어는 UNIX 계열 플랫폼에서 $HOME/.netrc를, Windows에서는 %USERPROFILE%\_netrc를 읽습니다.

Artifact Registry는 다음과 같은 인증 방법을 지원합니다.

단기 사용자 인증 정보(권장)
Artifact Registry Go 사용자 인증 정보 도우미 도구를 사용하여 netrc 파일의 인증 토큰을 업데이트합니다.
서비스 계정 키 사용
사용자 환경에서 인증에 사용자 인증 정보를 사용할 수 없는 경우 이 옵션을 사용하세요. netrc 파일에 암호화되지 않은 서비스 계정 키를 추가합니다.

GONOPROXY에 Go 사용자 인증 정보 도우미 추가

Go 사용자 인증 정보 도우미를 사용하기 전에 GONOPROXY 목록에 추가하여 Go가 GitHub에서 직접 다운로드하도록 해야 합니다. 소스에서 직접 다운로드하려는 다른 모듈이 있는 경우 다음 예시와 같이 쉼표로 구분된 목록에 추가할 수 있습니다.

  export GONOPROXY=MODULE_PATH1, MODULE_PATH2

여기서 MODULE_PATH1 및 MODULE_PATH2는 소스에서 다운로드할 모듈의 모듈 경로입니다.

Go 사용자 인증 정보 도우미를 GONOPROXY 목록에 추가하고 실행하여 사용자 인증 정보를 설정하려면 다음 안내를 따르세요.

  1. Go 사용자 인증 정보 도우미를 GONOPROXY에 추가

      export GONOPROXY=github.com/GoogleCloudPlatform/artifact-registry-go-tools
    
  2. 다음 명령어를 실행하여 Go 모듈 패키지 도구로 Artifact Registry 사용자 인증 정보를 netrc 파일에 추가합니다.

      GOPROXY=proxy.golang.org \
          go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 \
          add-locations --locations=LOCATION \
          [--json_key=path/to/service/account/key.json]
    

    여기서 LOCATION은 저장소의 리전 또는 멀티 리전 위치입니다. 여러 위치를 추가하려면 쉼표로 구분된 목록으로 입력합니다.

    Go 사용자 인증 정보 도우미는 Artifact Registry 인증을 위해 netrc 파일에 설정을 추가합니다. --json_key 플래그를 전달하면 키는 비밀번호 인증에 사용되는 netrc 파일에 추가됩니다.

모듈을 종속 항목으로 사용

  1. Artifact Registry에 인증하는 데 단기 사용자 인증 정보를 사용하는 경우 다음 명령어를 실행하여 OAuth 토큰을 새로고침해야 합니다.

      GOPROXY=proxy.golang.org \
      go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 refresh
    
  2. 홈 디렉터리에 'bar'라는 디렉터리를 만듭니다.

      mkdir bar
    
  3. 디렉터리를 모듈 디렉터리로 변경하고 go mod init를 실행하여 패키지용 go.mod 파일을 만듭니다.

      cd bar \
      go mod init example.com/bar
    

    example.com/bar를 모듈 경로로 바꿉니다. 자세한 내용은 Go 모듈 참조를 확인하세요.

  4. Artifact Registry에 저장된 foo 버전을 요구하려면 go.mod 파일을 다음과 비슷하게 수정합니다.

    
    module example.com/bar
    
    go 1.19
    
    require example.com/foo v0.1.0
    

    다음을 바꿉니다.

    • example.com/foo는 필수 모듈의 모듈 경로입니다.
    • v0.1.0은 Artifact Registry에 저장된 버전입니다.
  5. 다음 콘텐츠로 bar 디렉터리에 main.go라는 파일을 만듭니다.

      
      package main
    
      import (
        "fmt"
    
        foo "example.com/foo"
      )
    
      func main() {
        fmt.Println(foo.HelloWorld)
      }
    
      
    
  6. foo 패키지를 포함하여 종속 항목을 다운로드하려면 go mod tidy를 실행합니다.

      go mod tidy
    
  7. bar 모듈을 실행합니다.

      go run .
    

    다음과 유사한 결과가 출력됩니다.

      Hello World!
    

삭제

이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 수행합니다.

이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 수행합니다. 저장소를 삭제하기 전에, 보관할 모듈을 다른 위치에서 사용할 수 있는지 확인합니다.

  1. 저장소를 삭제하려면 다음 안내를 따르세요.

      gcloud artifacts repositories delete \
          --location=LOCATION \
          --project=PROJECT \
          REPOSITORY
    

    다음을 바꿉니다.

    • LOCATION을 저장소의 리전 또는 멀티 리전 위치로 바꿉니다.
    • PROJECT를 Google Cloud 프로젝트 ID로 바꿉니다.
    • REPOSITORY를 저장소 이름으로 바꿉니다.
  2. 활성 gcloud 구성에 지정한 기본 저장소와 위치 설정을 삭제하려면 다음 명령어를 실행합니다.

      gcloud config unset artifacts/repository
      gcloud config unset artifacts/location
    

다음 단계