表題についてざっと調べると、
などの情報が出てくるのですが、そんな大げさな話じゃなく単にcloneがしたいだけなんです。
調べても意外と出てこなかったのでdocker build
の待ち時間に記事として残しておきます。
なお、記事のタイトルは非正確で、厳密にはプライベートリポジトリをnpm installする話です。
npmでは、
{
"dependencies": {
"some_package": "my/private-repo#0.8.0"
}
}
のように、ユーザ名/リポジトリ名#タグ
形式でGithubのリポジトリを指定可能1です。
npmにprivate packageを公開するのは有料2なので、なんとか無料で運用したい。
Githubのprivateリポジトリをcloneしてくるには、事前にSSH鍵の登録が必要です。
「デプロイキー使えば良いのでは?」と思って試したら行けたので、その方法が安牌だと思います。
ssh-keygen -t rsa -C Githubのメールアドレス
でSSH鍵を生成します。
念のため動作確認。
$ ssh -o StrictHostKeyChecking=no -i 生成した鍵のパス -T git@github.com
Warning: Permanently added 'github.com,192.30.253.112' (RSA) to the list of known hosts.
Hi blockenio/domain! You've successfully authenticated, but GitHub does not provide shell access.
生成した鍵をコピーし、cloneしたいリポジトリの設定の「Deploy keys」に貼り付けます。
貼り付ける際に、「Allow write access」のチェックはOFFにしてください。不要です。
貼り付けたら、 生成した鍵をGithubのリポジトリにコミット します。
コミットせずに開発メンバー全員が同様の方法を行う、とかでも対処可能ですが、
このリポジトリにしか影響がないし読み取り専用にしてあるので、大した影響はないだろうということでコミットしちゃっています。
カレントディレクトリ以下に鍵が手に入れば、あとはなんとでもなります。
Dockerfileはこんな感じ。
FROM node:6.9.4
RUN mkdir /app /root/.ssh
WORKDIR /app
ADD ./package.json /app/package.json
ADD ./certs/readonly.pub /root/.ssh/id_rsa.pub
ADD ./certs/readonly /root/.ssh/id_rsa
RUN ssh -o StrictHostKeyChecking=no -T git@github.com || true
RUN npm set progress=false \
&& npm -q install
certs
に鍵のファイルを入れてある場合の書き方です。
ホスト側で作った鍵だと警告が出てしまったので事前に警告を無視してknown_hostsに書き加えてからnpm installしています
ググっても出てこない情報は、自分が知っている情報の組み合わせで解消することがまれにある。 この方法が正しいのかどうか確証がもてませんが、実現はできたし考える限り大きなリスクはなさそうと判断します。