發佈Gitlab上的private npm package

2023/05/13

 

Scenario

假設目前我有個gitlab project在一個gitlab group下

這個gitlab group叫做foobar

而我們希望將在這個project發佈一個npm package

 

實做方式

ref

主要就是在跟package.json的同個目錄

建立一個.npmrc再執行npm publish

基本上使用gitlab ci設定即可

 

調整package.json

 

name

必須設定格式為: @{group-name}/{package-name}

例如: @foobar/my-package

 

publishConfig

package.json必須加入以下publishConfig屬性

project-id可在gitlab project首頁查詢到

{
  "publishConfig": {
    "@foobar:registry": "https://gitlab.com/api/v4/projects/{your-project-id}/packages/npm/"
  }
}

 

建立Deploy Token

需要建立一個Deploy Token(需要有read/write package權限)

前往Settings > Repository > Deploy Token建立

並把這個Deploy Token的password設定至CI/CD Variable(假設為PACKAGE_DEPLOY_TOKEN)

 

gitlab-ci.yml設定

publish:
  stage: deploy
  only:
    variables:
      - $CI_COMMIT_TAG =~ /deploy/
  script:
    - cd $CI_PROJECT_DIR/app
    - yarn build
    - echo "@${CI_PROJECT_NAMESPACE}:registry=https://gitlab.com/api/v4/projects/${CI_PROJECT_ID}/packages/npm/" >> .npmrc
    - echo "//gitlab.com/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authToken=${PACKAGE_DEPLOY_TOKEN}" >> .npmrc
    - npm publish

 

設定好之後

使用含有deploy字串的git tag即可觸發

 

變數說明

CI_PROJECT_NAMESPACE: Gitlab Ci的預設變數, 為group或personal id

CI_PROJECT_ID: Gitlab project id

PACKAGE_DEPLOY_TOKEN: 上述的Deploy Token Password
 
 

公開package

若希望這個package可以被任何人安裝使用

可在Gitlab project的Settings > Gerneral > Visibility設定中

將Package registry的Allow anyony to pull from package registry啟用即可

image.png

 

 

使用package(project level)

前往Packages and registries > Package registry中

即可看到前面publish成功的套件

abc.png

 

設定.npmrc

基本上只要複製上述echo那段的command即可

若是要安裝為global套件

需要將 >> .yarnrn 改成 >> ~/.yarnrc

 

如果是要使用sudo yarn global add安裝

則是要切換到root身份

改為使用以下指令設定

echo \"@foobar:registry\" \"https://gitlab.com/api/v4/projects/{your-project-id}/packages/npm/\" > ~/.yarnrc

 

Gitlab Registry驗證設定

ref

若這個package不是公開的

則需要經過驗證設定

# instance level
npm config set -- //your_domain_name/api/v4/packages/npm/:_authToken=your_token

# project level
npm config set -- //your_domain_name/api/v4/projects/your_project_id/packages/npm/:_authToken=your_token

 

 

安裝

設定好.npmrc之後

即可開始安裝

 

常見問題

 

403 error

ref

通常為Package registry的版號已存在

只要更新package.json的版本號

或是刪除package registry的版本號即可