前置知识
Kubernetes部署Gitea+Drone+Registry
因为作者的Gitea是部署在k8s上,所以这次配置的 govanityurls
也是在k8s上构建,前置的环境不做多说。
构建govanityurls镜像
源代码:https://github.com/GoogleCloudPlatform/govanityurls
拉取源代码后,执行 go build
即可。
然后配置 Dockerfile 构建镜像,推送的自己的代码仓库中。
1 2 3 4 5
| FROM alpine:3.13.5 WORKDIR /app COPY ./govanityurls . EXPOSE 8080 CMD /app/govanityurls
|
如果不想自己构建,可以直接使用其他人构建好的,例如下面的
1
| garukun/govanityurls:latest
|
在k8s配置 govanityurls
创建 deployment.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| apiVersion: apps/v1 kind: Deployment metadata: name: govanityurls spec: replicas: 1 selector: matchLabels: app: govanityurls template: metadata: labels: app: govanityurls spec: imagePullSecrets: - name: regcred containers: - name: govanityurls image: code-registry.domain/govanityurls:v0.1 command: [ "/app/govanityurls", "/app/config/vanity.yaml" ] ports: - containerPort: 8080 name: http volumeMounts: - name: static-pvc mountPath: "/app/config" subPath: "govanityurls" restartPolicy: "Always" volumes: - name: static-pvc persistentVolumeClaim: claimName: static-pvc
|
创建 ingress.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| apiVersion: v1 kind: Service metadata: name: govanityurls labels: app: govanityurls spec: selector: app: govanityurls ports: - port: 8080 targetPort: 8080 protocol: TCP name: http --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: govanityurls-ingress spec: rules: - host: pkg.domain http: paths: - path: / pathType: Prefix backend: service: name: govanityurls port: number: 8080
|
配置包路径 vanity.yaml
1 2 3 4 5 6
| host: pkg.domain
paths: /libcomm: repo: https://gitcode.domain/user/libcomm vcs: git
|
参数解说
- host,包的域名。例如创建的一个libcomm的包,go引用的路径就是 pkg.domain/libcomm
- paths中的repo,git的仓库路径,可以是 https:
例如在gitea中,使用user,创建一个libcomm的仓库,git的https连接为
1
| https://gitcode.domain/user/libcomm.git
|
测试go包
创建仓库 libcomm
1
| go mod init pkg.domain/libcomm
|
编写包代码
1 2 3
| package libcomm
const TEST = 1
|
将代码提交到仓库中。
创建新的项目,测试引用包
1 2 3 4 5 6 7 8 9
| package main import ( "fmt" "pkg.domain/libcomm" )
func main() { fmt.Println(libcomm.TEST) }
|
通过 go get 拉取包
1
| GIT_TERMINAL_PROMPT=1 go get -v pkg.domain/libcomm
|
注意:首次必须要追加 GIT_TERMINAL_PROMPT=1
,因为私有代码仓库有用户密码验证,不添加这参数,会出现用户密码错误。
如果服务器不支持https
,可以追加 -insecure
参数。
1
| go get -v -insecure pkg.domain/libcomm
|
最后,go build
,一切正常~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # updated: Mar 4 2022 # 上面 go get -insecure 方式已经废弃,会有报错信息 # fatal: could not read Username for xxx terminal prompts disabled # 解决方法 # 编辑 .gitconfig 替换https访问方式,改成git方式访问私有库 # 将git的 https://git.host 访问地址改成 ssh访问方式 # 第一步 [url "ssh://git@<git.host>:"] insteadOf = https://git.host # 第二步 # 配置客户端ssh认证 ~/.ssh/config # 第三步 # 将仓库标记为私有库 go env -w GOPRIVATE=pkg.domain/libcomm # 解决,然后直接运行 go get pkg.domain/libcomm ~
|
参考资料
https://tonybai.com/2017/06/30/go-get-go-packages-in-private-code-repo-by-govanityurls/
https://github.com/GoogleCloudPlatform/govanityurls
https://erwinvaneyk.nl/private-repositories-with-go-mod/