Как использовать 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 и токен доступа для доступа к частным репозиториям.
- Создайте файл
.netrc
в вашем каталоге $ HOME
$ touch $HOME/.netrc
- Отредактируйте ваш
.netrc
с вашими учетными данными Gitlab
machine gitlab.<private>.com
login <gitlab-username>
password <gitlab-access-token>
... (more private repositories if needed)
- В вашем репозитории Go выполните команду
dep
для разрешения частных пакетов. В этом случае,
$ dep ensure -v