Artifact Registry에 Go 모듈 저장
비공개 Artifact Registry Go 저장소를 설정하고, 저장소에 모듈을 업로드하고, 모듈을 종속 항목으로 사용합니다.
시작하기 전에
-
Sign in to your Google Account.
If you don't already have one, sign up for a new account.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Go 1.15 이상을 설치합니다.
package-go-module
gcloud CLI 부가기능인
을 설치합니다.gcloud components install package-go-module
저장소 만들기
새 저장소를 만들고 구성하려면 다음 안내를 따르세요.
다음 명령어를 실행하여 새 저장소를 만듭니다.
gcloud artifacts repositories create REPOSITORY \ --repository-format=go \ --location=LOCATION \ --description=DESCRIPTION
다음을 바꿉니다.
다음 명령어를 실행하여 저장소 세부정보를 확인합니다.
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 모듈을 만듭니다.
홈 디렉터리에서 모듈에 'foo'라는 디렉터리를 만듭니다.
mkdir foo
디렉터리를 모듈 디렉터리로 변경하고
go mod init
를 실행하여 모듈용 go.mod 파일을 만듭니다.cd foo \ go mod init example.com/foo
example.com/foo
를 모듈 경로로 바꿉니다. 자세한 내용은 Go 모듈 참조를 확인하세요.다음 콘텐츠로 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 모듈 참조를 확인하세요.- VERSION을
vX.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 환경 설정
Artifact Registry에서 모듈, 공개 Go 모듈 프록시, 그리고 소스의 순서대로 다운로드하도록 Go에 지시합니다.
export GOPROXY=https://LOCATION-go.pkg.dev/PROJECT/REPOSITORY,https://proxy.golang.org,direct
다음을 바꿉니다.
공개 체크섬 데이터베이스를 사용하여 모듈을 검사에서 제외합니다.
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
목록에 추가하고 실행하여 사용자 인증 정보를 설정하려면 다음 안내를 따르세요.
Go 사용자 인증 정보 도우미를
GONOPROXY
에 추가export GONOPROXY=github.com/GoogleCloudPlatform/artifact-registry-go-tools
다음 명령어를 실행하여 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 파일에 추가됩니다.
모듈을 종속 항목으로 사용
Artifact Registry에 인증하는 데 단기 사용자 인증 정보를 사용하는 경우 다음 명령어를 실행하여 OAuth 토큰을 새로고침해야 합니다.
GOPROXY=proxy.golang.org \ go run github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0 refresh
홈 디렉터리에 'bar'라는 디렉터리를 만듭니다.
mkdir bar
디렉터리를 모듈 디렉터리로 변경하고
go mod init
를 실행하여 패키지용go.mod
파일을 만듭니다.cd bar \ go mod init example.com/bar
example.com/bar
를 모듈 경로로 바꿉니다. 자세한 내용은 Go 모듈 참조를 확인하세요.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에 저장된 버전입니다.
다음 콘텐츠로
bar
디렉터리에main.go
라는 파일을 만듭니다.package main import ( "fmt" foo "example.com/foo" ) func main() { fmt.Println(foo.HelloWorld) }
foo 패키지를 포함하여 종속 항목을 다운로드하려면 go mod tidy를 실행합니다.
go mod tidy
bar 모듈을 실행합니다.
go run .
다음과 유사한 결과가 출력됩니다.
Hello World!
삭제
이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 수행합니다.
이 페이지에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 수행합니다. 저장소를 삭제하기 전에, 보관할 모듈을 다른 위치에서 사용할 수 있는지 확인합니다.
저장소를 삭제하려면 다음 안내를 따르세요.
gcloud artifacts repositories delete \ --location=LOCATION \ --project=PROJECT \ REPOSITORY
다음을 바꿉니다.
활성 gcloud 구성에 지정한 기본 저장소와 위치 설정을 삭제하려면 다음 명령어를 실행합니다.
gcloud config unset artifacts/repository gcloud config unset artifacts/location
다음 단계
- 인증 구성 자세히 알아보기
- 저장소 관리 알아보기
- Go 모듈 관리 알아보기
- DevOps 관련 리소스를 읽고 DevOps 연구 및 평가 연구 프로그램 살펴보기