此篇只是個人心得筆記,較為簡略,不過有附上查詢的資料來源,有興趣可以自己去深入了解
很多公司都會有自己建立自己package的需求,例如npm for JS, pip for Python,也因為安全性($$$) 考量,可能回需要自己架設registry server,此時Nexus就是一個很好的選擇,可以安裝在一般的server也可以安裝在k8s cluster內,相當方便。
不過如果寫好package要推送也會遇到一些問題,這邊做一個簡單的筆記說明一下,以npm為例
如果你寫好一包npm package,想要推送到registry的時候基本上就是使用 npm publish
這個指令,不過如果沒有選定registry,他會用預設的 npm registry,這不是我們要的,所以如果需要推到自家架的Nexus server,可能會需要用到下列cmd
npm publish --registry http://localhost:8081/repository/npm-internal/
當你開始使用這個指令的時候,系統會要你登入,你可以使用
npm adduser --registry=http://localhost:8081/repository/npm-internal/
獲得,不過可能也有一些情況是沒有辦法這樣手動登入的(例如CI/CD building),此時我們就可以把auth 資訊放在目錄下的 .npmrc
file 裏面,然後就可以使用Basic Auth來做認證,用 username:password
的格式做base64後得到
## username:password
echo -n 'admin:admin123' | openssl base64 # YWRtaW46YWRtaW4xMjM=
然後你的 .npmrc
會長成這樣
email=you@example.com
always-auth=true
_auth=YWRtaW46YWRtaW4xMjM=
不過在這之前,需要先在你的nexus server上面做一些basic auth開啟的設定
然後基本上應該就可以順利的 npm publish
到你的私人registry了
如果publish遇到奇怪的問題,例如明明加上了 .npmrc
也確定 _auth
是正確的格式,結果噴錯
npm ERR! code ENEEDAUTH
npm ERR! need auth This command requires you to be logged in.
npm ERR! need auth You need to authorize this machine using `npm adduser`
可以看一下你執行 npm publish
的時候所帶的 --registry
url 最後有沒有 /
如果沒有的話會失敗喔!
npm publish
--registry http://localhost:8081/repository/npm-internal/ -> ok
npm publish
--registry http://localhost:8081/repository/npm-internal -> ERR with no auth
Source: