チラシ裏日記上等!!新館

Webアプリケーションエンジニアの雑記帳。映画とかアニメとかの記事も書きます。

GitHub上にあるPrivateなNodeパッケージをCircleCI上でyarn installする

npmには登録しないけどGitHub上でPrivateにしてあるNodeパッケージをCircleCI上でyarn installする方法を調べました。

tl;dr

  • CircleCIでCheckout SSH kyesの設定でuser keyを追加する
  • 追加したuser keyのfinger printをCircleCIのadd_ssh_keysに追加する

以降は最低限の動作を確認する手順になります。

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を実行すると失敗します。

f:id:Tomato-360:20190719234248p:plain

Privateなパッケージをインストールしようとするので失敗します。

CircleCIのCheckout SSH Keysの設定をする

インストールできるようにするためにCircleCIの設定を修正します。設定は次の場所の設定を行います。

Settings > ユーザ名 > プロジェクト名 > Checkout SSH keys

そこのAdd user keyの項目でAuthorize With GitHub をクリックしてキーを追加します。

f:id:Tomato-360:20190719234634p:plain

user keyが追加されるが確認できます。

f:id:Tomato-360:20190719235217p:plain

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を実行すると次のように成功しているのが確認できます。

f:id:Tomato-360:20190719235658p:plain

これでライブラリしたいけど公開したくないパッケージの作成と利用ができるようになりました。