在 nexus 发布一个新 npm 包
-
初始化一个 仓库,一定要删除
package.jsonprivate属性,并且设置publishConfig
{
"name": "@osl/xxx",
....
"publishConfig": {
"registry": "https://xxxx/bct-npm-custom/"
}
....
}
3. 设置自动更新 package.json 版本号 (通过 semantic 的 @semantic-release/npm 插件实现 package.json 的 version 变更)
stages:
...
- release
...
release-job:
...
tags:
- eks
- apps-build
stage: release
rules:
- if: $CI_COMMIT_BRANCH == $BUILD_SRC_BRANCH
when: always
- when: never
before_script:
- export GL_TOKEN=$CI_PUSH_TOKEN
script:
- npx semantic-release
artifacts:
paths:
- package.json
- package-lock.json
- 组件库接入
CI安全扫描
stages:
...
- snyk_scan
- snyk_scan_results
...
5. 设置 publish 的 registry & Publish 成功通知 & Publish 失败通知 (publish private package 无论成功还是失败都有通知消息)
publish-job:
stage: publish
variables:
REQUEST_PUBLISH_ERROR_JSON: |
{
"msg_type":"post",
"content":{
"post":{
"zh_CN":{
"title":"@osl/web-micro-components 公共组件 npm包 发布失败",
"content":[
[
{"tag":"text","text":"请检查 流水线 " },
{"tag":"a","text":"流水线链接", "href": "https://xxxx/-/pipelines"}
]
]
}
}
}
}
script:
- apk add --no-cache curl jq
- npm i npm-proxy-login
- echo "registry=$REGISTRY">.npmrc
- cat .npmrc
- npm config get registry
- npx npm-proxy-login $REGISTRY $PUBLISH_ACCOUNT $PUBLISH_ACCOUNT_PWD $PUBLISH_ACCOUNT_EMAIL
- npm publish
after_script:
- |
export PKG_VERSION=$(cat package.json | grep '"version":' | awk -F '"' '{print $4}')
REQUEST_JSON=$(jq -n --arg version "$PKG_VERSION" '{
"msg_type":"post",
"content":{
"post":{
"zh_CN":{
"title":"@osl/web-micro-components 公共组件 npm包 发布成功",
"content":[
[
{"tag":"text", "text": "最新 xxxx 组件版本号是: ($version)" }
]
]
}
}
}
}')
echo $REQUEST_JSON
if [ "$CI_JOB_STATUS" == "success" ]; then
curl -X POST \
-H "Content-Type: application/json" \
-d "$REQUEST_JSON" \
$LARK_WEBHOOK_URL
else
curl -X POST \
-H "Content-Type: application/json" \
-d "$REQUEST_PUBLISH_ERROR_JSON" \
$LARK_WEBHOOK_URL
exit 1
fi
在业务项目中如何接入
- 业务项目新建
.npmrc(这里的private registry一定要和 上面的publish registry保持一致)
@osl:registry=https://xxx/web-bct-npm-custom/
registry=https://registry.npmjs.org/
2. 执行 以下 命令, 在系统根目录的 .npmrc 的 registry 和 项目的 .npmrc 注册的 registry 保持一致, 如果不一致, install 阶段会出现 401 情况
npx npm-proxy-login https://priveta-registry username password email
3. 在项目的 gitlab-ci.yaml 设置 CI Runner 的 install package registry (这里重新设置 .npmrc 文件的原因是 CI Runner 使用 npmToken 下载最简单)
variables:
NPMTOKEN: 'xxxx'
...
build-job:
...
stage: build
script:
- npm get
- echo "//xxxx/web-bct-npm-custom/:_authToken=NpmToken.$NPMTOKEN">.npmrc
- echo "registry=https://registry.npmjs.org/">>.npmrc
- cat .npmrc
- npm get
- npm ci
- NX_BRANCH=ci npm run build:prod
...