Web/GoLang

[Golang] gitlab subgroup repository import 하기, 에러시 대처법

벨포트조던 2021. 6. 12.
반응형

문제사항

내부 프로젝트를 import 시키려는데 하위주소가 3depth 이상이면 정상적으로 improt 되지 않는다

- gitlab의 subgroup의 리파짓토리를 사용하면 아래처럼 도메인 하단의 패스가 3개가 된다

ex) gitlab.com/aaa/bbb/ccc 

이렇게 되면 golang이 정상적으로 읽어오지 못한다

에러가 아마 이렇게 나올것이다

( gitlab.com/aaa/bbb/ccc/ccc 리파짓토리를 찾을수 없다 ) 이런식으로

마지막 주소가 한번더 호출이 된다 .. 

ccc는 리파짓토리명이다

 

해결법 

1. https://www.popit.kr/%EA%B3%A0-%EB%AA%A8%EB%93%88%EA%B3%BC-%ED%95%A8%EA%BB%98-%EB%B9%84%EA%B3%B5%EA%B0%9C-%EC%99%B8%EB%B6%80-%EC%A0%80%EC%9E%A5%EC%86%8C%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95/

위 주소에서 비공개 외부저장소를 가져오는 셋팅을 한다

설정자체는 1. git 설정 2. 환경변수 설정 두가지면 된다

이것을 하는 이유는 비공개 리파짓토리를 접근하기 위해서다. 문제에서처럼 subgroup의 본질적인 해결법이 안됨

 

2. 문제사항처럼 마지막 리파짓토리명이 중복되게 나온다.

편법으로 내가 생각한 방식은 하위path를 줄이려고 여러 방법을 찾음

아래 처럼 셋팅을 한다

git config --global --add url."https://oauth2:{access token}@gitlab.com/aaa/bbb".insteadof "https://gitlab.com/bbb"

go env -w GOPRIVATE=gitlab.com/bbb

gitlab.com/aaa/bbb/ccc -> gitlab.com/bbb/ccc 

이렇게 인식이 될것이다 

 

 

go mod 에서 안되는 부분을 이런식으로 변경한다

require (
	gitlab.com/aaa/bbb/ccc v0.1.0
)

replace (
	gitlab.com/aaa/bbb/ccc => gitlab.com/bbb/ccc v0.1.0
)
    

이렇게하면 에러 안생김

 

"gitlab subgroup go mod" 로 검색하여 여러 문서들을 참고했다

 

 

단점 

- 예상으로 여러 서브그룹을 사용할수 없다. 

( 여러 서브그룹을 내가 사용하지 않아서 방법을 생각해보지 않았음. 생각하면 방법 나올수도 있음)

- 결국은 서브그룹을 안쓰는게 좋을것으로 확신

 

검증안된 생각

- 위 단점처럼 여러 서브그룹을 사용 못함 ( 추측 )

- github도 비슷한 에러의 내용으로 문서를 찾아보았는데 , <meta import ~~~ > 뭐 이런 내용의 html로 변환이 가능하다고 한다. 해보진않았지만 찾아볼만 함

- github은 subgroup 이 없는걸로 생각됨. gitlab만 있는것같음

- git config 의 url.~~insteadof 가 중복이 되는지 덮어쓰기가 되는지 잘 모름

- 동료가 같은 git을 pull 했을때, 우분투에서는 aaa/bbb/ccc 처럼 서브그룹을 사용이 가능했음( 리눅스에서는 더 편한방법이 존재할지도 모름 )

 

근본적인 해결?? 

- github의 공식 라이브러리?를 만드신 분들보면 리파짓토리 6천개 이런데 그룹화가 안되있는걸 몇개 봤다. 따라서 이 사람들도 subgroup을 안쓴다고 생각됨

- git에서 서브그룹을 쓰지말자 

 

 

다른해결법

내 방식으로 해결해서 이 방식은 안해보았지만 참고삼아 적어둠

http://wiki.pchero21.com/wiki/Gitlab

 

Gitlab - 탱이의 잡동사니

Overview Gitlab 내용 정리 .gitlab-ci.yml .gitlab-ci.yml 파일은 gitlab 에서 CI/CD pipeline 을 구성할 때 사용하는 configuration file 이다. 이 파일이 프로젝트(Repository) 최상단 디렉토리에 위치하고 있으면 gitlab에

wiki.pchero21.com

 

 

완전해결 

바로 위 사이트에서 해결법 찾음

 

gitlab 에서 subgroup 에 있는 repository 를 go get 으로 다운로드 받을때 문제가 발생했다. 이런 경우, .netrc 파일을 이용한 Token 설정으로 문제를 해결할 수 있다. Token 생성시, API, read_repository 권한이 설정되어야 한다.

$ cat .netrc 
machine gitlab.com
login pchero
password redacted-access-token

이 방법은 리눅스 환경에서 적용 가능

 

윈도우 환경은 

 

 

 

참고

https://www.google.com/search?q=gitlab+subgroup+go+mod+require&sxsrf=ALeKk03iSABObqfqkYZwVY2GEaHBTrOlPA%3A1623316165401&ei=xdbBYPv4F8HLmAWc3YroBg&oq=gitlab+subgroup+go+mod+require&gs_lcp=Cgdnd3Mtd2l6EAMyBQghEKABMgUIIRCgATIFCCEQoAEyBQghEKABOgcIIxCwAxAnOgcIABCwAxAeOgkIABCwAxAIEB46BggAEAgQHjoHCCEQChCgAVC4twFYtckBYOjKAWgBcAB4AIAB9QGIAfwIkgEFMS43LjGYAQCgAQGqAQdnd3Mtd2l6yAEDwAEB&sclient=gws-wiz&ved=0ahUKEwi775X724zxAhXBJaYKHZyuAm0Q4dUDCA4&uact=5 

 

https://www.google.com/search?q=gitlab+subgroup+go+mod+require&sxsrf=ALeKk03iSABObqfqkYZwVY2GEaHBTrOlPA%3A1623316165401&ei=xdbBYPv4F8HLmAWc3YroBg&oq=gitlab+subgroup+go+mod+require&gs_lcp=Cgdnd3Mtd2l6EAMyBQghEKABMgUIIRCgATIFCCEQoAEyBQghEKABOgcIIxCwAxAnOgcIABCwAxAeOgkIABCwAxAIEB46BggAEAgQHjoHCCEQChCgAVC4twFYtckBYOjKAWgBcAB4AIAB9QGIAfwIkgEFMS43LjGYAQCgAQGqAQdnd3Mtd2l6yAEDwAEB&sclient=gws-wiz&ved=0ahUKEwi775X724zxAhXBJaYKHZyuAm0Q4dUDCA4&uact=5

반응형

댓글