web-dev-qa-db-ja.com

GoLangをプライベートGitlabリポジトリで使用する方法は?

Gitlabは、プライベート.gitリポジトリですが、GoLangでは動作しないようです。プロジェクトを作成すると、次の形式のURLが生成されます。

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

ここで:

  • 1.2.3.4はgitlabサーバーのIPアドレスです
  • private-developersは、プライベートリポジトリにアクセスできるユーザーグループです。

Golang 1.2.1はこの構文を理解していないようです。

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

結果:

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

これを機能させる方法はありますか?

34
James Fremen

この問題はGitlab 8. *で解決されましたが、まだ直感的ではありません。実際、最も困難な課題はgo getであり、次の手順によりそれらを克服できます。

  1. SSHキーペアを作成します。デフォルトで~/.ssh/に保存されている既存のペアを上書きしないでください。

    ssh-keygen -t rsa -b 4096
    
  2. Gitlabプロジェクトに新しいSecret Variableを作成します。 SSH_PRIVATE_KEYKeyとして使用し、private keyの内容をValueとして使用します。

  3. .gitlab-ci.ymlbefore_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. 手順1で作成したキーペアからpublicキーを、go getに必要なプロジェクトにDeploy Keyとして追加します。

13
daplho

次のコマンドを実行します:

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

git cloneリポジトリに対する正しい権限があると仮定すると、go getallサーバー上のリポジトリ1.2.3.4に対して機能します。

これをgoバージョン1.6.2、1.8、および1.9.1でテストしました。

35
Rick Smith

go getはレポジトリを取得できません。常にgitを使用して初期クローンを直接実行できます。

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

その後、ツールは正常に動作します。go get -uこれには-fフラグ。gitremoteは正規のインポートパスと一致しないためです。

7
JimB

Gitlabはgo getをネイティブでサポートします。

go getは、指定したURLにhttpリクエストを発行し、正確なソース管理パスを指すメタタグを探します。

私のgitlabインストールでは、これはmygitlabdomain.com/myProject/myRepoです。あなたにとって、これは1.2.3.4/private-developers/projectだと思います。

残念ながら、sshパスではなくhttp scmパスのみを提供しているように見えるため、クローンを作成するには資格情報を入力する必要がありました。 ssh urlに更新する場合は、クローンを作成した後、ローカルリポジトリでリモートを簡単にいじることができます。

http://1.2.3.4:private-developers/project?go-get=1をつまんでソースを表示し、メタタグを探すことでURLをテストできます。

3
captncraig

記録のために、これはgitlab 7.3.2を使用して外で動作し、JimBが観察したように、回避策として使用できます。 SSHキーがgitlabに登録されていても、ユーザー名/パスワードの入力を求められることがあります。

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

代わりに、gitlabで登録されたSSHキーを持っているので、プロンプトを回避するSSH同等物を使用できます:

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

どちらも現在のところgoでは動作しません。修正は7.9にあるかもしれませんが、テストする機会がありませんでした: 今後のバグ修正

1
James Fremen

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
0
Feiyu Zhou

Gitクレデンシャルをセットアップでき、Goはそれらを使用します。

  1. githubで一意のパスワードを生成します(設定内のどこかに)。
  2. git config credential.helper store
  3. echo https://your-github-username:[email protected] >> ~/.git-credentials
  4. 利益。
0
OneOfOne

dep バージョン5.2から、depはGitlabプライベートリポジトリのプライベートリポジトリをサポートします。

。netrc ファイルでは、プライベートリポジトリにアクセスするためのGitlabユーザー名とアクセストークンを提供できます。

  1. $ HOMEディレクトリに.netrcファイルを作成します
$ 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
0
Wesgur