npmには登録しないけどGitHub上でPrivateにしてあるNodeパッケージをCircleCI上でyarn installする方法を調べました。
tl;dr
以降は最低限の動作を確認する手順になります。
Privateなパッケージを作る
Privateなパッケージを作ります。
{ "name": "my_private_node_package", "version": "1.0.0", "description": "my private package", "main": "index.js", "repository": "git+ssh://git@github.com:nasum/my_private_node_package.git", "author": "nasum <tomato.wonder.life@gmail.com>", "license": "private", "private": true }
exports.returnHello = function() { return 'hello' }
単純に文字列のhelloを返すパッケージです。
GitHubにPrivateなリポジトリを作成しpushしておきます。
Privateなパッケージを読み込むアプリケーションを作る
Privateなパッケージを読み込むアプリケーションを作ります。
{ "name": "import_private_package", "version": "1.0.0", "main": "index.js", "repository": "ssh://git@github.com/nasum/import_private_package.git", "author": "nasum <tomato.wonder.life@gmail.com>", "license": "private", "private": true, "dependencies": { "my_private_package": "git+ssh://git@github.com:nasum/my_private_node_package.git " } }
dependencies
にPrivateなパッケージをsshでインストールするように指定します。
この状態で yarn install
するとローカルの node_modules
にインストールされます。
インストールしたパッケージを次のように使用します。
const my_private_package = require('my_private_package') console.log(my_private_package.returnHello())
このJavaScriptのファイルをnodeで実行すると次のように表示されます。
$ node index.js hello
CircleCIの設定を書き、普通にやると失敗するのを確認する
この状態でCircleCIでCIしてみます。
次のように .circleci/config.yml
を書きます。
version: 2.1 jobs: build: docker: - image: circleci/node:12.6 steps: - checkout - run: name: yarn install command: yarn install - run: name: exec command: node index.js
CIを実行すると失敗します。
Privateなパッケージをインストールしようとするので失敗します。
CircleCIのCheckout SSH Keysの設定をする
インストールできるようにするためにCircleCIの設定を修正します。設定は次の場所の設定を行います。
Settings > ユーザ名 > プロジェクト名 > Checkout SSH keys
そこのAdd user keyの項目でAuthorize With GitHub をクリックしてキーを追加します。
user keyが追加されるが確認できます。
CircleCIの設定を修正しyarn installされていることを確認する
CircleCIの設定で新たに追加したfinger printを設定に追加します。
version: 2.1 jobs: build: docker: - image: circleci/node:12.6 steps: - checkout - add_ssh_keys: fingerprints: - "user keyのfinger print" - run: name: yarn install command: yarn install - run: name: exec command: node index.js
この設定でCIを実行すると次のように成功しているのが確認できます。
これでライブラリしたいけど公開したくないパッケージの作成と利用ができるようになりました。