どうも、としです。
在宅勤務により、酒量が増え、30歳なりたてのくせに痛風発作を起こしました。
いきつけの飲み屋でのあだ名が 痛風のとし になりました。
さて、体は気を付けるとして、先週いくつかのプロジェクトで
GitLab → GitHub
npmjs → GitHub package
へ移行する作業を行ったので、備忘録も含め、記載しようと思います。
元々の構成
元々の構成にたどり着くまでも紆余曲折あったのですが、そこは割愛させていただきます。
GitLab → GitHub → Circle CI で npm publish
GitLab → GitHub → Circle CI で AWS Elastic Beanstalk へdeploy
という構成でした。
移行しようと思った理由
いくつかありますが、大きくは2つ、
GitLab → GitHub へミラーリングリポジトリ設定を行い、耐えていたのですが、5分に一度しかミラーリングされないことが何かと不便でした。
緊急の対応を行う時も、ここがネックで時間が取られる(腕組んで待つ時間)、ということがあったため、移行を行いました。
npm js にpackageを公開する際、無料プランだと
npm publish --access public
という、publicでの公開しかできませんでした。
※もちろん、有料にすればできますが、npm jsを使っているのが私のチームだけなので無料でどうにかしてました。
GitHub であれば無料でも privateにできるとのことだったので、こちらも移行を行いました。
パッケージ側
変更点のみを記載しております。
package.json 変更点
1. 今回は name が変わったので
"name": "@briswell-ltd/briswell-package-name"
2. publishConfigを記載してあげます。
"publishConfig": { "registry": "https://npm.pkg.github.com" }
を追記 or 変更
3. リポジトリが変更になるので
"repository": { "type": "git", "url": "https://github.com/Briswell-Ltd/briswell-package-name" }
続いて .circleci/config.yml です。
circleci側で npm i もしくは npm ci を実行しているので、その前に
npm config set //npm.pkg.github.com/:_authToken=$GITHUB_PRIVATE_TOKEN
コマンドを実行するように追加、$GITHUB_PRIVATE_TOKEN は circle ci の project setting から環境変数を追加しています。
続いては publish時のコマンド、先ほども記載しましたが、 public の記載を外します。
npm publish --tag next
以上でGitHub packageに private 版としてリリースされるはずです。
※元々のCI内容を記載していないのはお許しください!
アプリ側
パッケージ側より少しだけ修正が多いです。
まずは package.json ですが、先ほどのパッケージを入れているので、
"@briswell-ltd/briswell-package-name"
置き換えを行い、一度 npm i を実行します。
ソース各所で呼び出している部分があると思うので、一括置換を行います。
※prettier などを入れている場合はエラーが出る場合もあります。
続いて、プロジェクト直下に .npmrc を追加します
※元々存在する場合は下記内容を追加となります。
registry=https://registry.npmjs.org/ @briswell-ltd:registry=https://npm.pkg.github.com
という内容になります。
※最後に改行を入れていない場合、エラーになることがありました。後続のecho コマンドで調整しても良いと思います。
再度に .circleci/config.yml ですが、パッケージ側と同様に、 npm iなどを行う前には npm configセットを行います。
ただ、Elastic Beanstalk deploy 前の場合は.npmrc に TOKENを入れるようにしました。
echo //npm.pkg.github.com/:_authToken=${GITHUB_PRIVATE_TOKEN} >> ./.npmrc git add .npmrc
という2行を追加すれば問題なくdeploy 完了するはずです。
最後に
これでGitLab → GitHub へのミラーリング待機時間がなくなり、パッケージもprivateになりました。
※元々publicでも問題ないソースコードになっているので、どちらでも良いですが...
様々な部分を割愛して記載しておりますので、ご不明点・ご指摘等ございましたらご気軽にお問い合わせ、コメントをいただければ幸いです。