web-dev-qa-db-fra.com

Comment utiliser GoLang avec un dépôt privé Gitlab?

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 gitlab
  • private-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?

26
James Fremen

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:

  1. 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
    
  2. 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 .

  3. 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'
    
  4. 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.

10
daplho

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.

27
Rick Smith

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.

7
JimB

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.

2
captncraig

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

1
James Fremen

Vous pouvez configurer vos identifiants git et Go les utilisera:

  1. générer un mot de passe unique sur votre github (quelque part dans les paramètres).
  2. git config credential.helper store
  3. echo https://your-github-username:[email protected] >> ~/.git-credentials
  4. profit.
0
OneOfOne