npmのプライベートなパッケージをインストールするのに環境変数を利用している際、DockerのコンテナをNPMのアクセストークンが漏れないようにビルドする必要が出たりします。
例えば.yarnrc.ymlで環境変数を参照している場合などです。
npmAuthToken: "${NPM_AUTH_TOKEN}"
この場合、Dockerコンテナをビルドする場合、環境変数をSecretとしマウントします。
docker buildx build -f packages/api/Dockerfile \ --secret id=npm_auth_token,env=NPM_AUTH_TOKEN \ -t api:latest .
Dockerファイルでは--mount=type=secretを利用して参照します。
これでプライベートなパッケージもインストールでき、NPMのアクセストークンも漏れないはずです。
FROM --platform=x86_64 node:22.17.0-bullseye-slim AS builder COPY package.json yarn.lock tsconfig.json .yarnrc.yml /app/ WORKDIR /app # id,envはdockerコマンドで指定する。 RUN --mount=type=secret,id=npm_auth_token,env=NPM_AUTH_TOKEN yarn workspaces focus -A --production
ここまでできたらGithub Actionsでbuild-push-actionを利用して、コンテナをpushできるようになります。
秘匿情報はbuild-push-actionのsecret-envsをid=環境変数名形式で指定すれば利用できます。
- uses: docker/build-push-action@v5 env: NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} with: push: true file: "packages/api/Dockerfile" provenance: false tags: | ${{ secrets.REPOSITORY_URL }}:latest secret-envs: | "npm_auth_token=NPM_AUTH_TOKEN"
無事にGithub Actionsでコンテナがビルドできれば問題ありません。