Private npm package 설치하기 (feat. github actions)
때로 회사에서 개발하다보면 외부에 공개하면 안되는 npm package들이 생기곤한다.
Github Actions, Docker에서 이 패키지를 설치할때 조금 번거롭지만 안전하게 사용해야하기 때문에 NPM Token은 격리 보관하도록하자.
먼저 Docker에서 npm private package 설치할때는 간단하다.
FROM node:lts-alpine3.13
WORKDIR /app
ENV NPM_TOKEN XXXXXXXXXXX
RUN apk add --update --no-cache git python3 make g++
RUN echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc
COPY . .
RUN yarn install --frozen-lockfile
RUN yarn build
ENTRYPOINT ["node", "build/api/index.js"]
위 Dockerfile은 nodejs 프로젝트 패키지 설치 후 빌드해서 사용하는 스크립트이다.
별거없고 NPM_TOKEN을 ENV에 주고 아래에 echo 로 .npmrc에 써주도록만 하면 끝이다. 그럼 알아서 패키지를 설치하고 빌드도 정상적으로 된다.
추가로 CI 에서도 필요한데 필자의 회사에서는 Github Actions을 메인으로 사용하기 때문에 이것만 설명한다.
name: ECR push
on:
push:
paths-ignore:
- '.github/**'
- '!.github/workflows'
branches:
- master
- develop
- stage
jobs:
deploy:
name: Deploy to ECR
runs-on: ubuntu-latest
steps:
- name: Checkout source code
uses: actions/checkout@v2
- name: Get branch name
id: branch-name
uses: tj-actions/branch-names@v5
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: $
aws-secret-access-key: $
aws-region: ap-northeast-2
- name: Login to AWS ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
- name: Push AWS ECR
id: build-image
run: |
IMAGE_TAG=""
[ $BRANCH == "master" ] && IMAGE_TAG="latest"
[ $BRANCH == "develop" ] && IMAGE_TAG="dev"
[ $BRANCH == "stage" ] && IMAGE_TAG="stage"
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> .npmrc
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
echo "::set-output name=image::$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG"
env:
BRANCH: $
NPM_TOKEN: $
ECR_REGISTRY: $
ECR_REPOSITORY: $
위 스크립트는 Docker로 패키지들 설치 후 빌드 한 다음 이미지를 AWS ECR에 Push 하는 스크립트이다.
이때도 보면 별거 없고 run 스크립트 아래에 github secrets로 등록된 NPM_TOKEN을 가져와 docker container 안에 있는 .npmrc 파일에 써주게 된다.
이러면 문제 없이 Github actions에서도 npm private package를 사용할 수 있게 된다.
끝!