GitLab의 Go 프록시

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated Status: Experiment
  • GitLab 13.1에서 소개되었습니다.
  • 기본적으로 비활성화된 특성 플래그 뒤에 배포되었습니다.
  • GitLab.com에서는 사용할 수 없습니다.
  • GitLab 셀프 매너지드 인스턴스에서 사용하려면 GitLab 관리자에게 활성화 요청하세요.
  • GitLab Premium에서 13.3으로 이전되었습니다.
caution
GitLab의 Go 패키지 레지스트리는 기능이 제한적이므로 프로덕션에 사용할 준비가되지 않았습니다. 남은 작업 및 제작 준비 일정에 대한 세부 정보는 epic에서 확인할 수 있습니다.

GitLab의 Go 프록시를 사용하면 GitLab의 모든 프로젝트를 Go 프록시 프로토콜을 사용하여 가져올 수 있습니다.

특정 API 엔드 포인트에 대한 Go 프록시 사용 방법에 대한 설명은 Go 프록시 API 문서를 참조하십시오.

Go 프록시 활성화

GitLab의 Go 프록시는 아직 제작용으로 사용할 준비가되지 않았으며, 대형 저장소와 잠재적인 성능 문제로 인해 제작용으로 준비되지 않았습니다.

이것은 기본적으로 비활성화된 특성 플래그 뒤에 배포되었습니다.

GitLab 관리자는 GitLab 레일즈 콘솔에 액세스할 수 있습니다 그래서 인스턴스의 프로키시를 활성화할 수 있습니다.

활성화하려면:

Feature.enable(:go_proxy) # 또는

비활성화하려면:

Feature.disable(:go_proxy)

특정 프로젝트에 대해 활성화 또는 비활성화하려면:

Feature.enable(:go_proxy, Project.find(1))
Feature.disable(:go_proxy, Project.find(2))
note
활성화되어도 GitLab은 패키지 레지스트리에 Go 모듈을 표시하지 않습니다. 자세한 내용은 이 이슈를 참조하십시오.

GitLab을 Go 프록시로 추가

GitLab을 Go 프록시로 사용하려면 Go 1.13 이상을 사용해야합니다.

사용 가능한 프록시 엔드포인트는 다음과 같습니다: /api/v4/projects/:id/packages/go

GitLab에서 Go 모듈을 가져 오려면 프로젝트별 엔드 포인트를 GOPROXY에 추가하십시오.

Go는 엔드포인트를 쿼리하고 기본 동작으로 돌아갑니다:

go env -w GOPROXY='https://gitlab.example.com/api/v4/projects/1234/packages/go,https://proxy.golang.org,direct'

이 구성으로 Go는 다음과 같은 순서로 종속성을 가져옵니다:

  1. Go는 프로젝트별 Go 프록시에서 가져 오려고 시도합니다.
  2. Go는 proxy.golang.org에서 가져 오려고 시도합니다.
  3. Go는 버전 제어 시스템 작업(예: git clone, svn checkout 등)을 직접 가져 옵니다.

GOPROXY가 지정되지 않은 경우, Go는 단계 2와 3을 따르며 해당하는 GOPROXYhttps://proxy.golang.org,direct으로 설정됩니다. GOPROXY에 프로젝트별 엔드 포인트 만 포함 된 경우 Go는 해당 엔드 포인트 만 쿼리합니다.

환경 변수 설정 방법에 대한 자세한 내용은 환경 변수 설정을 참조하십시오.

GOPROXY 구성에 대한 자세한 내용은 Go에서 종속성 관리 > 프록시를 참조하십시오.

개인 프로젝트에서 모듈 가져 오기

go는보다 안전한 연결을 통해 자격 증명을 전송하지 지 않습니다. 다음 단계는 GitLab이 HTTPS로 구성된 경우에만 작동합니다:

  1. Go가 Go 프록시에서 가져올 때 HTTP 기본 인증 자격 증명을 포함하도록 구성하세요.
  2. 공개 체크섬 데이터베이스에서 개인 GitLab 프로젝트의 체크섬 다운로드를 건너 뛰도록 Go를 구성하세요.

요청 인증 활성화

api 또는 read_api로 설정된 개인 엑세스 토큰을 생성합니다.

당신의 ~/.netrc 파일을 열고 다음 텍스트를 추가하십시오. < >에 대한 변수를 교체하십시오.

경고: NETRC라는 환경 변수를 사용한다면 Go는 해당 값으로 파일 이름을 사용하고 ~/.netrc를 무시합니다. GitLab CI에서 ~/.netrc를 사용하려면 NETRC를 환경 변수 이름으로 사용하지 마십시오.

machine <url> login <username> password <token>
  • <url>: 예를 들어 gitlab.com과 같은 GitLab URL입니다.
  • <username>: 당신의 사용자 이름입니다.
  • <token>: 당신의 개인 엑세스 토큰입니다.

체크섬 데이터베이스 쿼리 비활성화

Go 1.13 이상에서 의존성을 다운로드할 때 가져온 소스는 sum.golang.org라는 체크섬 데이터베이스와 검증됩니다.

가져온 소스의 체크섬이 데이터베이스의 체크섬과 일치하지 않으면 Go는 의존성을 빌드하지 않습니다.

비공개 모듈은 sum.golang.org가 비공개 모듈의 소스를 가져올 수 없기 때문에 체크섬을 제공할 수 없어 빌드에 실패합니다.

이 문제를 해결하려면 GONOSUMDB를 쉼표로 구분된 비공개 프로젝트 목록으로 설정하세요. Go 환경 변수 설정에 대한 자세한 내용은 환경 변수 설정을 참조하세요. Go의 이 기능 비활성화에 대한 자세한 내용은 Go에서의 의존성 관리 > 체크섬을 참조하세요.

예를 들어 gitlab.com/my/project에 대해 체크섬 쿼리를 비활성화하려면 GONOSUMDB를 다음과 같이 설정하세요:

go env -w GONOSUMDB='gitlab.com/my/project,<이전 값>'

Go 작업

Go 언어의 의존성 관리나 Go 언어 자체에 익숙하지 않은 경우 다음 문서를 검토하세요:

환경 변수 설정

Go는 다양한 기능을 제어하기 위해 환경 변수를 사용합니다. 이러한 변수들은 일반적인 방법으로 관리할 수 있습니다. 그러나 Go 1.14 이상에서는 특별한 Go 환경 파일인 ~/.go/env를 기본적으로 읽고 쓰게 됩니다.

  • GOENV가 파일로 설정된 경우 Go는 해당 파일로 읽고 씁니다.
  • GOENV가 설정되지 않았지만 GOPATH가 설정된 경우, Go는 $GOPATH/env에서 읽고 씁니다.

Go 환경 변수는 go env <변수>로 읽을 수 있으며, Go 1.14 이상에서는 go env -w <변수>=<값>으로 쓸 수 있습니다. 예를 들면, go env GOPATH 또는 go env -w GOPATH=/go입니다.

모듈 릴리스

Go 모듈과 모듈 버전은 Git, SVN, Mercurial과 같은 소스 저장소에 의해 정의됩니다. 모듈은 go.mod와 Go 파일이 포함된 저장소입니다. 모듈 버전은 버전 관리 시스템(VCS) 태그에 의해 정의됩니다.

모듈을 배포하려면 go.mod 및 소스 파일을 VCS 저장소에 푸시하세요. 모듈 버전을 배포하려면 VCS 태그를 푸시하세요.

더 자세한 내용은 Go에서의 의존성 관리 > 버전을 참조하세요. 어떤 것이 유효한 모듈 또는 모듈 버전인지에 대해 자세한 내용을 확인하세요.