GCP ArtifactRegistry で Private NPM Registry を運用してみよう
- 2020/06/30現在、npmの利用はAlpha版のみ
- Alpha版参加のためにはアンケート記入を求められる
- 記入した翌日には、メールが届いて、npmが選択可能になった
- とてもお手軽に使えたよ
- AWS CodeArtifact とは違い、 UserScope (~/.npmrc) を汚染せずに使えたよ
例
以下のパッケージを publish / install してみます
package.json
{
"name": "@mycompany/great-project",
"version": "0.4.11",
...
}
リポジトリを作る
- 名前:仮に
myrepositry
としよう。
プロジェクトへの設定
- 作成したリポジトリを選択し、「設定の手順」にしたがう
.npmrc の追記
.npmrc
@SCOPE=https://asia-northeast1-npm.pkg.dev/<YOUR_PROJECT>/<YOUR_REPOSITRY>/
//asia-northeast1-npm.pkg.dev/<YOUR_PROJECT>/<YOUR_REPOSITRY>/:_password=""
//asia-northeast1-npm.pkg.dev/<YOUR_PROJECT>/<YOUR_REPOSITRY>/:username=oauth2accesstoken
//asia-northeast1-npm.pkg.dev/<YOUR_PROJECT>/<YOUR_REPOSITRY>/:email=not.valid@email.com
//asia-northeast1-npm.pkg.dev/<YOUR_PROJECT>/<YOUR_REPOSITRY>/:always-auth=true
-
@SCOPE: ここでは、
@mycompany
となりますね - <YOUR_PROJECT> : GCP Project 名
- <YOUR_REPOSITRY> : 作成したリポジトリ名 (myrepositry)
npm scripts の追記
package.json
scripts: {
"artifactregistry-login": "npx google-artifactregistry-auth .npmrc"
}
- "prepublish" に入れればいいんじゃないのと思って試したけど、上記のように別コマンドにしないと動きません
- (prepublish に入る前の .npmrc が参照されるみたい)
publish
$ npm run artifactregistry-login
# ここで .npmrc を見ると、 _password が更新されていることがわかる
$ npm publish
> ...
> + @mycompany/great-project@1.0.0
install
(install先へも .npmrc / scripts 設定を行ったうえで)
$ npm run artifactregistry-login
$ npm install
> ...
> + @mycompany/great-project@0.4.11
CI/CD 環境で npm install する方法
サービスアカウントを使う方法が公式に書いてあった
- ServiceAccount を作る
- 「Artifact Registry 読み取り」 ロールを付与
- JSONキーをダウンロードして環境に配置
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account-key.json
npm run artifactregistry-login
npm i