How to use Go with a private GitLab repo

后端 未结 11 1622
时光说笑
时光说笑 2020-12-04 11:11

GitLab is a free, open-source way to host private .git repositories but it does not seem to work with Go. When you create a project it generates a URL of the fo

相关标签:
11条回答
  • 2020-12-04 11:47

    From dep version 5.2, dep supports private repositories for Gitlab private repositories.

    On .netrc file, you can provide your Gitlab username and access token for accessing private repositories.

    1. Create .netrc file in your $HOME directory
    $ touch $HOME/.netrc
    
    1. Edit your .netrc with your Gitlab credentials
    machine gitlab.<private>.com
    login <gitlab-username>
    password <gitlab-access-token>
    
    ... (more private repositories if needed)
    
    1. In your Go repository, run the dep command to resolve private packages. In this case,
    $ dep ensure -v
    
    0 讨论(0)
  • 2020-12-04 11:48

    For HTTPS private gitlab repo, @Rick Smith's answer is enough. Here's a compensation for HTTP repo, first run the command:

    git config --global url."git@mygitlab.com:".insteadOf "http://mygitlab.com/"
    

    then use below go get command to get the golang project:

    go get -v  -insecure  mygitlab.com/user/repo
    
    0 讨论(0)
  • 2020-12-04 11:49

    If go get can't fetch the repo, you can always do the initial clone with git directly:

    git clone git@gitlab:private-developers/project.git $GOPATH/src/gitlab/private-developers/project
    

    The tools will then work normally, expect for go get -u which will require the -f flag because the git remote doesn't match the canonical import path.

    0 讨论(0)
  • 2020-12-04 11:49

    Gitlab does support go get natively.

    go get will issue an http request to the url you provide and look for meta tags that point to the exact source control path.

    For my gitlab installation this is mygitlabdomain.com/myProject/myRepo. For you I assume this would be 1.2.3.4/private-developers/project.

    Unfortunately it only appears to give the http scm path, not the ssh path, so I had to enter my credentials to clone. You can easily fiddle with the remote in your local repository after it clones if you want to update to the ssh url.

    You can test the url by poking http://1.2.3.4:private-developers/project?go-get=1 and viewing source and looking for the meta tag.

    0 讨论(0)
  • 2020-12-04 11:50

    This issue is now resolved in Gitlab 8.* but is still unintuitive. The most difficult challenge indeed is go get and the following steps will allow you to overcome those:

    1. Create an SSH key pair. Be sure to not overwrite an existing pair that is by default saved in ~/.ssh/.

      ssh-keygen -t rsa -b 4096
      
    2. Create a new Secret Variable in your Gitlab project. Use SSH_PRIVATE_KEY as Key and the content of your private key as Value.

    3. Modify your .gitlab-ci.yml with a 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. Add the public key from the key pair created in step 1 as a Deploy Key in the project that you need to go get.

    0 讨论(0)
  • 2020-12-04 11:53

    Run this command:

    git config --global url."git@1.2.3.4:".insteadOf "https://1.2.3.4/"
    

    Assuming you have the correct privileges to git clone the repository, this will make go get work for all repos on server 1.2.3.4.

    I tested this with go version 1.6.2, 1.8, and 1.9.1.

    0 讨论(0)
提交回复
热议问题