Как использовать GoLang с частным репозиторием Gitlab?

Gitlab - это бесплатный способ с открытым исходным кодом для размещения частных репозиториев .git но, похоже, он не работает с GoLang. Когда вы создаете проект, он генерирует URL в форме:

[email protected]:private-developers/project.git

где:

  • 1.2.3.4 - это IP-адрес сервера gitlab
  • private-developers - это группа пользователей, которая имеет доступ к закрытому репо

Голанг 1.2.1, похоже, не понимает этот синтаксис.

go get [email protected]:private-developers/project.git

результаты в:

package [email protected]/project.git: unrecognized import path "[email protected]/project.git"

Есть ли способ заставить это работать?

Ответы

Ответ 1

Эта проблема теперь решена в Gitlab 8. *, но все еще неинтуитивна. Самая сложная задача - go get, и следующие шаги позволят вам преодолеть эти проблемы:

  • Создайте пару ключей SSH. Обязательно не перезаписывайте существующую пару, которая по умолчанию сохраняется в ~/.ssh/.

    ssh-keygen -t rsa -b 4096
    
  • Создайте новую секретную переменную в своем проекте Gitlab. Используйте SSH_PRIVATE_KEY в качестве ключа и содержимое вашего закрытого ключа как значение.

  • Измените .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'
    
  • Добавить открытый ключ из пары ключей, созданной на шаге 1, в качестве ключа развертывания в проекте, который вам нужен go get.

Ответ 2

Запустите эту команду:

git config --global url."[email protected]:".insteadOf "https://1.2.3.4/"

Если у вас есть правильные привилегии для git clone репозиторий, это заставит go get работу по всем сделкам РЕПО на сервере 1.2.3.4.

Я проверил это с go версиями 1.6.2, 1.8 и 1.9.1.

Ответ 3

Если go get не может получить репо, вы всегда можете сделать начальный клон с git напрямую:

git clone [email protected]:private-developers/project.git $GOPATH/src/gitlab/private-developers/project

Инструменты будут работать нормально, ожидайте go get -u, для чего потребуется флаг -f, потому что удаленный git не соответствует каноническому пути импорта.

Ответ 4

Gitlab поддерживает go get изначально.

go get выдает HTTP-запрос к URL-адресу, который вы предоставляете, и искать метатеги, указывающие на точный путь управления исходным кодом.

Для моей установки gitlab это mygitlabdomain.com/myProject/myRepo. Для вас я предполагаю, что это будет 1.2.3.4/private-developers/project.

К сожалению, это только указывает путь http scm, а не путь ssh, поэтому мне пришлось вводить мои учетные данные для клонирования. Вы можете легко возиться с пультом дистанционного управления в своем локальном репозитории после того, как он клонирует, если вы хотите обновить его до URL-адреса ssh.

Вы можете проверить URL-адрес, выталкивая http://1.2.3.4:private-developers/project?go-get=1 и просматривать исходный код и искать метатег.

Ответ 5

Для записи это работает вне go, используя gitlab 7.3.2, и, как заметил JimB, можно использовать в качестве обходного пути. Я обнаружил, что у меня есть запрос на имя пользователя/пароль, даже если SSH-ключ зарегистрирован в gitlab:

git clone http://1.2.3.4/private-developers/project.git

В качестве альтернативы я могу использовать эквивалент SSH, который, так как у меня есть SSH-ключ, зарегистрированный в gitlab, избегает подсказок:

git clone [email protected]:private-developers/project.git

В настоящее время не работает. Исправление может быть в 7.9, но у меня не было возможности проверить его: предстоящее исправление

Ответ 6

Вы можете настроить свои учетные данные git, и Go будет использовать их:

  • создать уникальный пароль в вашем github (где-то в настройках).
  • git config credential.helper store
  • echo https://your-github-username:[email protected] >> ~/.git-credentials
  • прибыль.

Ответ 7

Для HTTPS частного репозитория gitlab достаточно @Rick Smith. Здесь компенсация за репо HTTP, сначала запустите команду:

git config --global url."[email protected]:".insteadOf "http://mygitlab.com/"

затем используйте команду go get чтобы получить проект golang:

go get -v  -insecure  mygitlab.com/user/repo

Ответ 8

С DEP версии 5.2, dep поддерживает частные репозиториев для Gitlab частных хранилищ.

В файле .netrc вы можете указать свое имя пользователя Gitlab и токен доступа для доступа к частным репозиториям.

  1. Создайте файл .netrc в вашем каталоге $ HOME
$ touch $HOME/.netrc
  1. Отредактируйте ваш .netrc с вашими учетными данными Gitlab
machine gitlab.<private>.com
login <gitlab-username>
password <gitlab-access-token>

... (more private repositories if needed)
  1. В вашем репозитории Go выполните команду dep для разрешения частных пакетов. В этом случае,
$ dep ensure -v