- 개인 프로젝트에 대한 Go 요청 인증
- Git 요청 인증
- 개인 프로젝트에 대한 Go 모듈 가져오기 비활성화
- 개인 서브그룹에 대한 Git 요청 인증
- Geo 보조 사이트에서 Go 모듈 가져오기
프로젝트를 Go 패키지로 사용하기
- GitLab 17.3에서 변경되어 권한이 없는
go get
요청에 대해 404 오류를 반환하도록 수정되었습니다.
전제 조건:
- GitLab Go Proxy를 활성화하려면 관리자에게 문의하십시오.
- 서브그룹에 있는 개인 프로젝트를 Go 패키지로 사용하려면 Go 요청에 인증해야 합니다. 인증되지 않은 Go 요청으로 인해
go get
이 실패합니다. 서브그룹에 속하지 않는 프로젝트에 대해서는 Go 요청을 인증할 필요가 없습니다.
프로젝트를 Go 패키지로 사용하려면 go get
및 godoc.org
검색 요청을 사용합니다. 메타 태그를 사용할 수 있습니다:
참고:
잘못된 HTTP 자격 증명을 사용하여 go get
요청을하면 404 오류가 반환됩니다.
HTTP 자격 증명은 ~/.netrc
(MacOS 및 Linux) 또는 ~/_netrc
(Windows)에서 찾을 수 있습니다.
개인 프로젝트에 대한 Go 요청 인증
전제 조건:
- GitLab 인스턴스에 HTTPS로 액세스 할 수 있어야 합니다.
-
read_api
범위를 갖는 개인 액세스 토큰을 갖고 있어야 합니다.
Go 요청을 인증하려면 다음 정보를 포함하는 .netrc
파일을 만듭니다:
machine gitlab.example.com
login <gitlab_user_name>
password <personal_access_token>
Windows에서 .netrc
대신 ~/_netrc
를 읽습니다.
go
명령은 보안되지 않은 연결로 자격 증명을 전송하지 않습니다. Go가 만든 HTTPS 요청은 인증되지만 Git을 통해 만든 요청은 인증하지 않습니다.
Git 요청 인증
Go가 프록시에서 모듈을 가져올 수 없는 경우 Git을 사용합니다. Git은 요청을 인증하기 위해 .netrc
파일을 사용하지만 다른 인증 방법을 구성할 수 있습니다.
Git을 다음과 같이 구성하십시오:
-
요청 URL에 자격 증명 포함:
git config --global url."https://${user}:${personal_access_token}@gitlab.example.com".insteadOf "https://gitlab.example.com"
-
HTTPS 대신 SSH 사용:
git config --global url."git@gitlab.example.com:".insteadOf "https://gitlab.example.com/"
개인 프로젝트에 대한 Go 모듈 가져오기 비활성화
모듈이나 패키지 가져오기를 위해 Go는 환경 변수를 사용합니다:
GOPRIVATE
GONOPROXY
GONOSUMDB
비활성화하려면 다음을 수행하십시오:
-
GOPRIVATE
비활성화:- 프로젝트 한 개의 쿼리를 비활성화하려면
GOPRIVATE=gitlab.example.com/my/private/project
를 비활성화합니다. - GitLab.com의 모든 프로젝트의 쿼리를 비활성화하려면
GOPRIVATE=gitlab.example.com
을 비활성화합니다.
- 프로젝트 한 개의 쿼리를 비활성화하려면
-
GONOPROXY
에서 프록시 쿼리 비활성화. -
GONOSUMDB
에서 체크섬 쿼리 비활성화.
- 모듈 이름이나 해당 접두어가
GOPRIVATE
또는GONOPROXY
에 있으면, Go는 모듈 프록시를 쿼리하지 않습니다. - 모듈 이름이나 해당 접두어가
GONOPRIVATE
또는GONOSUMDB
에 있으면, Go는 체크섬 데이터베이스를 쿼리하지 않습니다.
개인 서브그룹에 대한 Git 요청 인증
Go 모듈이 gitlab.com/namespace/subgroup/go-module
과 같은 개인 서브그룹에 있는 경우, Git 인증이 작동하지 않습니다.
이는 go get
이 인증되지 않은 요청을 만들어 저장소 경로를 알아내려고 하기 때문에 발생합니다.
인증되지 않은 사용자에게 프로젝트의 존재를 노출하는 보안 위험을 방지하고자 GitLab은 gitlab.com/namespace/subgroup.git
를 응답합니다.
결과적으로 Go 모듈을 다운로드할 수 없습니다.
안타깝게도, Go는 .netrc
이외의 요청 인증 수단을 제공하지 않습니다. 향후 버전에서는 Go가 임의의 인증 헤더를 지원할 수 있습니다.
자세한 내용은 golang/go#26232
를 팔로업하세요.
해결책: 모듈 이름에 .git
사용
go get
요청을 건너뛰고 Git에 직접 인증을 사용하도록하는 방법이 있지만 모듈 이름을 수정해야 합니다.
모듈 경로에 VCS 한정자(.bzr, .fossil, .git, .hg, .svn 중 하나)가 있으면 go 명령은 해당 경로 한정자까지를 저장소 URL로 사용합니다. 예를 들어
example.com/foo.git/bar
모듈의 경우 go 명령은 bar 하위 디렉터리에서 모듈을 찾으며 git을 사용하여 example.com/foo.git에서 저장소를 다운로드합니다.
- 개인 서브그룹에 있는 Go 모듈의
go.mod
로 이동합니다. - 모듈 이름에
.git
을 추가하십시오. 예를 들어module gitlab.com/namespace/subgroup/go-module
을module gitlab.com/namespace/subgroup/go-module.git
로 이름을 변경하십시오. 1.이 변경을 커밋하고 푸시하십시오. - 이 모듈에의존하는 Go 프로젝트를 방문하여
import
호출을 조정합니다. 예를 들어,import gitlab.com/namespace/subgroup/go-module.git
.
이 변경 후 Go 모듈이 올바르게 가져와져야합니다.
예를 들어, GOPRIVATE=gitlab.com/namespace/* go mod tidy
.
Geo 보조 사이트에서 Go 모듈 가져오기
Geo를 사용하여 보조 Geo 서버에서 Go 모듈을 포함하는 Git 저장소에 액세스합니다.
SSH 또는 HTTP를 사용하여 Geo 보조 서버에 액세스할 수 있습니다.
SSH를 사용하여 Geo 보조 서버에 액세스
SSH를 사용하여 Geo 보조 서버에 액세스하려면:
-
클라이언트에서 Git을 다시 구성하여 주 서버의 트래픽을 보조 서버로 전송하십시오.
git config --global url."git@gitlab-secondary.example.com".insteadOf "https://gitlab.example.com" git config --global url."git@gitlab-secondary.example.com".insteadOf "http://gitlab.example.com"
-
gitlab.example.com
에는 기본 사이트 도메인 이름을 사용하십시오. -
gitlab-secondary.example.com
에는 보조 사이트 도메인 이름을 사용하십시오.
-
-
클라이언트에서 GitLab 저장소에 대한 SSH 액세스가 설정되어 있는지 확인하십시오. 이것은 주 서버에서 테스트할 수 있으며 GitLab은 공개 키를 보조 서버로 복제합니다.
go get
요청은 기본 Geo 서버로 HTTP 트래픽을 생성합니다. 모듈 다운로드가 시작되면 설정에 따라 보조 Geo 서버로 트래픽이 전송됩니다.
Geo 보조 서버에 HTTP를 사용하여 액세스하기
보조 서버로 복제되는 지속적인 액세스 토큰을 사용해야 합니다. CI/CD 작업 토큰으로는 HTTP를 통해 Go 모듈을 가져올 수 없습니다.
Geo 보조 서버에 HTTP로 액세스하려면 다음을 수행합니다:
-
클라이언트에서 Git의
insteadOf
리디렉션을 추가합니다:git config --global url."https://gitlab-secondary.example.com".insteadOf "https://gitlab.example.com"
-
gitlab.example.com
의 경우, 기본 사이트 도메인 이름을 사용합니다. -
gitlab-secondary.example.com
의 경우, 보조 사이트 도메인 이름을 사용합니다.
-
-
개인 액세스 토큰을 생성하고, 클라이언트의
~/.netrc
파일에 자격 증명을 추가합니다:machine gitlab.example.com login USERNAME password TOKEN machine gitlab-secondary.example.com login USERNAME password TOKEN
go get
요청은 기본 Geo 서버로 HTTP 트래픽을 생성합니다. 모듈 다운로드가 시작되면, insteadOf
구성은 트래픽을 보조 Geo 서버로 보냅니다.