Gitlab est un moyen gratuit et open source d’héberger des référentiels .git
privés, mais il ne semble pas fonctionner avec GoLang. Lorsque vous créez un projet, il génère une URL du formulaire:
[email protected]:private-developers/project.git
où:
1.2.3.4
est l'adresse IP du serveur gitlabprivate-developers
est un groupe d'utilisateurs ayant accès au référentiel privéGolang 1.2.1 ne semble pas comprendre cette syntaxe.
go get [email protected]:private-developers/project.git
résulte en:
package [email protected]/project.git: unrecognized import path "[email protected]/project.git"
Y a-t-il un moyen d'obtenir que cela fonctionne?
Ce problème est maintenant résolu dans Gitlab 8. * mais n’est toujours pas intuitif. Le défi le plus difficile est en effet le go get
et les étapes suivantes vous permettront de les surmonter:
Créez une paire de clés SSH. Veillez à ne pas écraser une paire existante qui est enregistrée par défaut dans ~/.ssh/
.
ssh-keygen -t rsa -b 4096
Créez une nouvelle variable secrète dans votre projet Gitlab. Utilisez SSH_PRIVATE_KEY
en tant que Key et le contenu de votre private key en tant que Value .
Modifiez votre .gitlab-ci.yml
avec un 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'
Ajoutez la clé public de la paire de clés créée à l'étape 1 en tant que Déployer la clé dans le projet que vous devez go get
.
Exécutez cette commande:
git config --global url."[email protected]:".insteadOf "https://1.2.3.4/"
En supposant que vous ayez les privilèges corrects pour git clone
le référentiel, ceci va permettre à go get
de fonctionner pour all repos sur le serveur 1.2.3.4
.
J'ai testé cela avec go version 1.6.2, 1.8 et 1.9.1.
Si go get
ne peut pas récupérer le référentiel, vous pouvez toujours faire le clonage initial directement avec git:
git clone git@gitlab:private-developers/project.git $GOPATH/src/gitlab/private-developers/project
Les outils fonctionneront alors normalement, attendez-vous à go get -u
qui nécessitera l'indicateur -f
car la commande git remote ne correspond pas au chemin d'importation canonique.
Gitlab prend en charge go get
de manière native.
go get
enverra une requête http à l'URL que vous fournissez et recherchera les balises méta qui pointent vers le chemin de contrôle de source exact.
Pour mon installation de gitlab, il s'agit de mygitlabdomain.com/myProject/myRepo
. Pour vous, je suppose que ce serait 1.2.3.4/private-developers/project
.
Malheureusement, il ne semble que donner le chemin http scm, pas le chemin ssh, alors je devais entrer mes informations d'identification pour le cloner. Vous pouvez facilement jouer avec la télécommande dans votre référentiel local après son clonage si vous souhaitez mettre à jour l'URL ssh.
Vous pouvez tester l’URL en sélectionnant http://1.2.3.4:private-developers/project?go-get=1
et en affichant la source, puis en recherchant la balise Meta.
Pour mémoire, cela fonctionne avec Gitlab 7.3.2 et, comme JimB l'a observé, peut être utilisé comme solution de contournement. Je trouve que je suis invité à entrer un nom d'utilisateur/mot de passe, même si une clé SSH est enregistrée avec gitlab:
git clone http://1.2.3.4/private-developers/project.git
Sinon, je peux utiliser l'équivalent SSH qui, puisque j'ai une clé SSH enregistrée avec gitlab, évite les invites:
git clone [email protected]:private-developers/project.git
Ni fonctionne avec aller actuellement. Un correctif est peut-être dans 7.9 mais je n'ai pas encore eu l'occasion de le tester: correction de bug à venir
Vous pouvez configurer vos identifiants git et Go les utilisera:
git config credential.helper store
echo https://your-github-username:[email protected] >> ~/.git-credentials