GitLab私服+Go Modules踩坑经验(SSH自定义端口)
环境是GitLab私服,私有仓库,仅允许SSH拉取,自定义端口。
遇到过的错误有:
go: unrecognized import path "git.dev.dra-m.com/common/test-private-module": parse http://git.dev.dra-m.com/common/test-private-module?go-get=1: no go-import meta tags (meta tag git.dev.dra-m.com:9999/common/test-private-module did not match import path git.dev.dra-m.com/common/test-private-module)
status 128:
fatal: unable to connect to git.dev.dra-m.com:
git.dev.dra-m.com[0: 192.168.98.18]: errno=Unknown error
go: downloading git.dev.dra-m.com/common/test-private-module.git v0.0.0-20220831074151-6d5aa689f730
go: git.dev.dra-m.com/common/[email protected]: parsing go.mod:
module declares its path as: git.dev.dra-m.com/common/test-private-module
but was required as: git.dev.dra-m.com/common/test-private-module.git
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 配置Go Proxy跳过私服域名
go env -w GOPRIVATE=git.dev.dra-m.com
1
# 在.gitconfig中替换url
当使用go get 拉取包名时 go get,会使用git clone https://包名。
例如 go get dra-m.com/test,等价于 git clone https://dra-m.com/test。
因为我的私服仅允许ssh,且自定义端口,所以如下配置.gitconfig:
[url "ssh://[email protected]:30386/"]
insteadOf = https://git.dev.dra-m.com.com/
1
2
2
这意味着实际发出的命令将变成 git clone ssh://[email protected]:30386/test。
但gitlab中通过ssh拉取必须以.git结尾,所以要求我们的module名也以.git结尾:
# go.mod文件module以.git结尾
module git.dev.dra-m.com/common/test-private-module.git
1
导入时模块名一致:
import (
"git.dev.dra-m.com/common/test-private-module.git/common"
)
1
2
3
2
3
# DockerFile 构建时包含私服包
RUN go env -w GOPRIVATE=git.dev.dra-m.com
RUN git config --global url."ssh://[email protected]:30386/".insteadof https://git.dev.dra-m.com/
COPY ./build/id_rsa.pub /root/.ssh/id_rsa.pub
ADD ./build/id_rsa /root/.ssh/id_rsa
RUN chmod -R 700 ~/.ssh/*
RUN ssh -o "StrictHostKeyChecking no" [email protected] -p30386
RUN go mod tidy
...
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
上次更新: 10/23/2024