방안
yarn을 통한 package 다운로드
프로젝트 / 경로 .yarnrc 파일 생성
yarn-offline-mirror "./npm_packages"
yarn-offline-mirror-pruning true
우선 yarn install로 ./npm_packages 이하 dependency package들 tgz 파일 다운로드
➜ yarn install
yarn install v1.22.19
warning ../../../package.json: No license field
[1/4] 🔍 Resolving packages...
[2/4] 🚚 Fetching packages...
[3/4] 🔗 Linking dependencies...
[4/4] 🔨 Building fresh packages...
success Saved lockfile.
✨ Done in 30.95s.
Nexus Upload
Local PC .npmrc 파일 설정
➜ echo -n 'admin:{{nexus패스워드}}' | openssl base64
{{인증값}}
➜ cat ~/.npmrc
registry=http://localhost:8081/nexus/repository/npm-private/
//localhost:8081/nexus/repository/npm-private/:_auth={{인증값}}
npm publish
#bin/bash
echo "!!Nexus upload start!!"
cd npm_packages
for _i in $(ls)
do
if [ ! -d $_i ]
then
echo "npm publish" $_i
npm publish $_i
fi
done
echo "!!Nexus upload end!!"
결과 확인
실패#1
npm 프로젝트 ./node_modules 폴더 상위 경로에서 아래 shell 수행
: 일부(?) package들이 error 발생하여 전체 package가 정상적으로 Nexus에 업로드되지 않음!!
#bin/bash
echo "!!npm upload start!!"
cd node_modules
for _i in $(ls)
do
if [ -d $_i ]
then
echo "npm publish" $_i
cd $_i
npm publish
cd ..
fi
done
echo "!!npm upload end!!"
node_modules 폴더 이하 yallist 폴더에서 아래와 같이 publish 수행
: git 에러가 발생하지만, Nexus에 package 업로드되는 경우도 발생
실패#2
node_modules 이하 package들이 결국 https://registry.npmjs.org/ 에서 tgz 파일을 http GET 하는 것으로 판단
npm으로 download-tgz 설치 후, npm프로젝트 폴더에서 아래 명령 실행
➜ npm i download-tgz -g
➜ download-tgz package-json ./package.json
./tarballs 폴더 이하 package.json에 정의된 모든 package가 tgz 형태로 다운로드
Nexus에 등록된 package와 구조가 비슷하니 upload만 되면 마무리될 것으로 예상
./tarballs 폴더로 이동하여 아래 수행
: bulk-npm-publish 는 npm으로 설치 후 실행 필요
➜ npm i bulk-npm-publish -g
..생략..
➜ bulk-npm-publish \
--storage-path . \
--registry http://localhost:8081/nexus/repository/npm-private/
위 명령어가 실행되면 아래와 같이 npm publish 명령어가 작성된 publish.sh 파일 생성
➜ cat publish.sh
npm publish @babel/runtime/runtime-7.22.11.tgz --registry=http://localhost:8081/nexus/repository/npm-private/
npm publish @hypnosphi/create-react-context/create-react-context-0.3.1.tgz --registry=http://localhost:8081/nexus/repository/npm-private/
npm publish @loadable/component/component-5.15.3.tgz --registry=http://localhost:8081/nexus/repository/npm-private/
npm publish ajv/ajv-6.12.6.tgz --registry=http://localhost:8081/nexus/repository/npm-private/
이 후, publish.sh 실행하면 git 인증을 유도하면서 오류 발생
'Engineering > DevOps' 카테고리의 다른 글
Gradle 적용 및 Maven과 비교 (0) | 2024.04.25 |
---|---|
Grafana 설치 (kubernetes/aws) (0) | 2024.03.21 |
Prometheus 설치 (kubernetes/aws) (0) | 2024.03.20 |
private Nexus로 npm repository 관리하기 (0) | 2023.08.29 |
Kubernetes에 SonarQube설치를 통한 소스품질관리 (0) | 2023.08.21 |