8
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

SSH しか使えない Git リポジトリに置いた Golang パッケージを dep で管理する

SSH しか使えない Git リポジトリにコミットされた Golang パッケージを、dep で管理したい、という場面が出てきたので、とりあえず github のプライベートリポジトリで試してみました。

今回は、メインアプリ github.com/tily/goprivatea から、パッケージ github.com/tily/goprivateb をインポートしてみます。

goprivateb (インポートされる側) の内容

goprivateb リポジトリにはこんな感じの main.go しかコミットされていません。

package goprivateb

import (
        "fmt"
)

func HelloFromGoPrivateB() {
        fmt.Println("Hello from Go Private B")
}

goprivatea (メインアプリ側) での開発しはじめる

$GOPATH/src/github.com/tily/goprivatea で作業します。
まず、goprivateb を呼び出すアプリを作ります。

$ vi main.go
package main

import (
        "github.com/tily/goprivateb"
)

func main() {
        goprivateb.HelloFromGoPrivateB()
}

強制的に git が SSH を使うように設定する

ここで ~/.gitconfig に下記内容を追加します。
こうすることで、git clone https://github.com/~ しようとしたときも強制的に git clone git@github.com:~ が実行される挙動となるようです。

$ vi ~/.gitconfig
[url "git@github.com:"]
insteadOf = https://github.com/

この状態で、一度 dep init してみます。
まだ SSH に関する設定を行っていないので、エラーになります。
(あらかじめ github に対する SSH の設定をしている場合は、エラーにならないかもです。)

$ dep init
solve error: Unable to update repositoryUnable to cache github.com/tily/goprivateb
Unable to update repository

git 用の SSH 設定を行う

SSH の設定をします。
まず github に登録している公開鍵に対応した秘密鍵を設置します。

$ vi ~/.ssh/github_private.pem
-----BEGIN RSA PRIVATE KEY-----
(秘密鍵の中身)
-----END RSA PRIVATE KEY-----

次に、SSH の config ファイルに「ホストが github.com だった場合に、上記の秘密鍵を利用する」という設定を書きます。

$ vi ~/.ssh/config
Host github.com
  IdentityFile ~/.ssh/github_private.pem

ちゃんと設定した上で dep init

ここまでやったら、dep init がうまく通るようになっています。

$ dep init
Cached github.com/tily/goprivateb

lock.json が書き込まれています。

$ cat lock.json 
{
    "memo": "e7e4f306375b10d5b683a5597e7f69f3839efc5c1a5491c260b270c18429d2bb",
    "projects": [
        {
            "name": "github.com/tily/goprivateb",
            "branch": "master",
            "revision": "aa1c962f1847840c78326452288b5f0c05dcded4",
            "packages": [
                "."
            ]
        }
    ]
}

vendor/ ディレクトリに必要なファイルもダウンロードされています。

$ ls vendor/github.com/tily/goprivateb/main.go 
vendor/github.com/tily/goprivateb/main.go

メインアプリも実行することができました。

$ go run main.go 
Hello from Go Private B

まとめ

SSH しか使えない Git リポジトリに置いた Golang パッケージを、dep で管理できることが確認できました。
社内環境等で、SSH しか使えない Git リポジトリに Golang パッケージを置いている場合に、便利ではないでしょうか。
(試行錯誤中なので、もっといいやり方があれば教えていただけると助かります。)

参考資料

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
8
Help us understand the problem. What are the problem?