GitLab 용 Go 프록시
Status: Experiment
- GitLab 13.1에서 도입됨 플래그와 함께
go_proxy
라는 이름으로. 기본적으로 비활성화되어 있습니다.
이 기능의 사용 가능성은 기능 플래그에 의해 제어됩니다.
자세한 내용은 기록을 참조하세요.
이 기능은 테스트용으로 제공되지만 생산 사용에는 준비되지 않았습니다.
에픽 3043를 참조하세요.
GitLab을 위한 Go 프록시를 사용하면, GitLab의 모든 프로젝트를
Go 프록시 프로토콜로 가져올 수 있습니다.
Go Proxy가 사용하는 특정 API 엔드포인트에 대한 문서는
Go Proxy API 문서를 참조하세요.
GitLab의 Go 프록시 활성화
GitLab의 Go 프록시는 개발 중이며, 대형 리포지토리의 잠재적 성능 문제로 인해 생산 사용을 위한 준비가 되어 있지 않습니다.
기능 플래그 뒤에 배포되어 있으며 _기본적으로 비활성화_되어 있습니다.
GitLab Rails 콘솔에 접근할 수 있는 GitLab 관리자가
귀하의 인스턴스에 대해 활성화할 수 있습니다.
활성화하려면:
Feature.enable(:go_proxy) # 또는
비활성화하려면:
Feature.disable(:go_proxy)
특정 프로젝트에 대해 활성화하거나 비활성화하려면:
Feature.enable(:go_proxy, Project.find(1))
Feature.disable(:go_proxy, Project.find(2))
자세한 내용은 이 문제를 따라가세요.
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는 다음 순서로 종속성을 가져옵니다:
- Go는 프로젝트 특정 Go 프록시에서 가져오려고 시도합니다.
- Go는
proxy.golang.org
에서 가져오려고 시도합니다. - Go는 버전 관리 시스템 작업(예:
git clone
,svn checkout
등)을 통해 직접 가져옵니다.
GOPROXY
가 지정되지 않으면 Go는 2단계와 3단계를 따릅니다. 이는
GOPROXY
를 https://proxy.golang.org,direct
로 설정하는 것과 같습니다.
GOPROXY
에 프로젝트 특정 엔드포인트만 포함되어 있는 경우, Go는 해당 엔드포인트만 조회합니다.
Go 환경 변수를 설정하는 방법에 대한 자세한 내용은
환경 변수 설정을 참조하세요.
GOPROXY
를 구성하는 방법에 대한 자세한 내용은
Go의 의존성 관리 > 프록시를 참조하세요.
개인 프로젝트에서 모듈 가져오기
go
는 불안전한 연결을 통해 자격 증명을 전송하는 것을 지원하지 않습니다.
다음 단계는 GitLab이 HTTPS로 구성된 경우에만 작동합니다:
- GitLab을 위한 Go 프록시에서 가져올 때 HTTP 기본 인증 자격 증명을 포함하도록 Go를 구성합니다.
- 공개 체크섬 데이터베이스에서 개인 GitLab 프로젝트의 체크섬 다운로드를 건너뛰도록 Go를 구성합니다.
요청 인증 활성화
개인 액세스 토큰을 생성하되, 범위는 api
또는 read_api
로 설정합니다.
~/.netrc
파일을 열고 다음 텍스트를 추가합니다. < >
안의 변수를 본인의 값으로 바꾸세요.
잘못된 HTTP 자격 증명으로 go get
요청을 하면 404 오류가 발생합니다.
경고:
NETRC
라는 환경 변수를 사용하는 경우, Go는 그 값을 파일명으로 사용하고 ~/.netrc
를 무시합니다. GitLab CI에서 ~/.netrc
를 사용하려면 환경 변수 이름으로 NETRC
를 사용하지 마세요.
machine <url> login <username> password <token>
-
<url>
: GitLab URL, 예를 들어gitlab.com
. -
<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,<previous value>'
Go와 함께 작업하기
Go에서 종속성을 관리하는 것에 익숙하지 않거나 Go 일반에 대한 이해가 부족한 경우, 다음 문서를 검토하세요:
환경 변수 설정
Go는 다양한 기능을 제어하기 위해 환경 변수를 사용합니다. 이러한 변수를 일반적인 방법으로 관리할 수 있습니다. 그러나 Go 1.14는 기본적으로 특별한 Go 환경 파일 ~/.go/env
에서 Go 환경 변수를 읽고 씁니다.
-
GOENV
가 파일로 설정된 경우, Go는 해당 파일에서 읽고 씁니다. -
GOENV
가 설정되지 않았지만GOPATH
가 설정된 경우, Go는$GOPATH/env
에서 읽고 씁니다.
Go 환경 변수는 go env <var>
로 읽을 수 있으며, Go 1.14 이상에서는 go env -w <var>=<value>
로 쓸 수 있습니다. 예를 들어, go env GOPATH
또는 go env -w GOPATH=/go
.
모듈 릴리즈
Go 모듈과 모듈 버전은 Git, SVN, Mercurial과 같은 소스 리포지토리에 의해 정의됩니다.
모듈은 go.mod
와 Go 파일을 포함하는 리포지토리입니다.
모듈 버전은 버전 관리 시스템(VCS) 태그에 의해 정의됩니다.
모듈을 게시하려면 go.mod
와 소스 파일을 VCS 리포지토리에 푸시합니다.
모듈 버전을 게시하려면 VCS 태그를 푸시합니다.
유효한 모듈 또는 모듈 버전의 구성요소에 대한 자세한 내용은 Go에서의 의존성 관리 > 버전 관리를 참조하세요.