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"
これを機能させる方法はありますか?
この問題はGitlab 8. *で解決されましたが、まだ直感的ではありません。実際、最も困難な課題はgo get
であり、次の手順によりそれらを克服できます。
SSHキーペアを作成します。デフォルトで~/.ssh/
に保存されている既存のペアを上書きしないでください。
ssh-keygen -t rsa -b 4096
Gitlabプロジェクトに新しいSecret Variableを作成します。 SSH_PRIVATE_KEY
をKeyとして使用し、private keyの内容をValueとして使用します。
.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で作成したキーペアからpublicキーを、go get
に必要なプロジェクトにDeploy Keyとして追加します。
次のコマンドを実行します:
git config --global url."[email protected]:".insteadOf "https://1.2.3.4/"
git clone
リポジトリに対する正しい権限があると仮定すると、go get
がallサーバー上のリポジトリ1.2.3.4
に対して機能します。
これをgoバージョン1.6.2、1.8、および1.9.1でテストしました。
go get
はレポジトリを取得できません。常にgitを使用して初期クローンを直接実行できます。
git clone git@gitlab:private-developers/project.git $GOPATH/src/gitlab/private-developers/project
その後、ツールは正常に動作します。go get -u
これには-f
フラグ。gitremoteは正規のインポートパスと一致しないためです。
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をテストできます。
記録のために、これは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にあるかもしれませんが、テストする機会がありませんでした: 今後のバグ修正
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
Gitクレデンシャルをセットアップでき、Goはそれらを使用します。
git config credential.helper store
echo https://your-github-username:[email protected] >> ~/.git-credentials
dep バージョン5.2から、dep
はGitlabプライベートリポジトリのプライベートリポジトリをサポートします。
。netrc ファイルでは、プライベートリポジトリにアクセスするためのGitlabユーザー名とアクセストークンを提供できます。
.netrc
ファイルを作成します$ touch $HOME/.netrc
.netrc
をGitlab認証情報で編集しますmachine gitlab.<private>.com
login <gitlab-username>
password <gitlab-access-token>
... (more private repositories if needed)
dep
コマンドを実行してプライベートパッケージを解決します。この場合、$ dep ensure -v