GitLab是一种免费、开源的方式来托管.git个私有存储库,但它似乎不能与Go配合使用.创建项目时,它会生成表单的URL:

git@1.2.3.4:private-developers/project.git

其中:

  • 1.2.3.4是GitLab服务器的IP地址
  • private-developers是一个可以访问私有回购协议的用户组

Golang 1.2.1似乎不理解此语法.

go get git@1.2.3.4:private-developers/project.git

结果是:

package git@23.251.148.129/project.git: unrecognized import path "git@1.2.3.4/project.git"

有没有办法让这个管用?

推荐答案

这个问题现在已经在GitLab 8中解决了.*但仍然不直观.最困难的挑战确实是go get个,下面的步骤将让您克服这些挑战:

  1. 创建SSH密钥对.请确保不要覆盖默认保存在~/.ssh/中的现有对.

    ssh-keygen -t rsa -b 4096
    
  2. 在GitLab项目中创建一个新的Secret Variable.将SSH_PRIVATE_KEY用作Key,将private密钥的内容用作Value.

  3. 把你的.gitlab-ci.yml改成before_script.

    before_script:
      # install ssh-agent if not already installed
      - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
      # run ssh-agent
      - eval $(ssh-agent -s)
      # add the SSH key stored in SSH_PRIVATE_KEY
      - ssh-add <(echo "$SSH_PRIVATE_KEY")
      # for Docker builds disable host key checking
      - mkdir -p ~/.ssh
      - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
    
  4. 将在步骤1中创建的密钥对中的public密钥作为您需要的项目中的Deploy Key添加到go get.

Go相关问答推荐

调用API时使用nginx作为反向代理时从nginx获取502坏网关

CGO Linux到Windows交叉编译中的未知类型名称

Golang文本/模板序列范围

使用一元或服务器流将切片从GRPC服务器返回到客户端

在 Go 中将元数据从一个 JPEG 复制到另一个

Go 中如何判断 struct 体是否包含另一个 struct 体?

在 GoLang 中对自定义 struct 体数组进行排序

用于提取 <*n 的正则表达式(其中 n 是一个数字)

从 eBPF LRU 哈希映射中错误驱逐的元素

如何使用 go-git 将特定分支推送到远程

golang yaml 马歇尔网址

如何将 base64 编码的公钥转换为 crypto.PublicKey 或 ecdsa.PublicKey

Golang代码判断第一个词是否可以从第二个词形成

Golang:如何判断通过缓冲通道进行通信时生产者或消费者是否较慢?

为什么 `append(x[:0:0], x...)` 将切片复制到 Go 中的新后备数组中?

具有两个或多个模型的 GORM 查询

如何在golang中按字符a对字符串数组进行排序

在 Go 中发送 ack 和 term 后消息仍在 nats 限制队列中

Golang泛型在用作 map 元素时不起作用

具有近似约束的函数值导致的实例化失败