我正在创建一个单峰,它构建并发布多个npm包到本地Artifactory。在这个monorepo中,有几个npm包与另一个npm包创建有依赖关系。
这个monorepo的布局如下所示,并且@ds/cy-uncaught-exceptions-task npm包依赖于npm包 @ds/cy-log-task.
├── Jenkinsfile
├── packages
│ ├── cy-browser-launch-task
│ ├── cy-ds-thycotic-task
│ └── cy-log-task
└── renovate.jsonJenkins管道失败:continuous-integration/jenkins/pr-merge -此提交无法构建

Jenkins构建在发布npm包期间失败。

Jenkins发布错误:

这是执行此发布的Jenkinsfile:
def packages = [
'@ds/cy-ds-thycotic-task': [
projectDir: 'packages/tasks/cy-ds-thycotic-task'
],
'@ds/cy-uncaught-exceptions-task': [
projectDir: 'packages/tasks/cy-uncaught-exceptions-task'
],
'@ds/cy-log-task': [
projectDir: 'packages/tasks/cy-log-task'
]
]
def conditionals = [
[
condition: { env.TARGET_BRANCH == 'master' && env.SCM_ACTION == 'commit' },
overrides: [
nodejsPublish: true,
pushVersionTag: true,
applicationPackages: packages.collectEntries { key, value -> [(key): value + [
bumpPatchVersion: true
]] }
]
],
[
condition: { env.TARGET_BRANCH == 'master' && env.SCM_ACTION == 'pull_request' },
overrides: [
nodejsPublish: true,
applicationPackages: packages.collectEntries { key, value -> [(key): value + [
publishArgs: '--tag pr',
versionSuffixValue: { 'pr.' + env.ARTIFACT_BUILD_NUMBER }
]] }
]
]
]Jenkinsfile 执行此构建时,需要做什么?
谢谢,谢谢你的反馈。
发布于 2021-04-07 23:06:40
我用勒纳解析了它
安装这些npm软件包:
Jenkinsfile保持不变:
def packages = [
'@ds/cy-ds-thycotic-task': [
projectDir: 'packages/tasks/cy-ds-thycotic-task'
],
'@ds/cy-log-task': [
projectDir: 'packages/tasks/cy-log-task'
],
'@ds/cy-uncaught-exceptions-task': [
projectDir: 'packages/tasks/cy-uncaught-exceptions-task'
]
]
def conditionals = [
[
condition: { env.TARGET_BRANCH == 'master' && env.SCM_ACTION == 'commit' },
overrides: [
nodejsPublish: true,
pushVersionTag: true,
applicationPackages: packages.collectEntries { key, value -> [(key): value + [
bumpPatchVersion: true
]] }
]
],
[
condition: { env.TARGET_BRANCH == 'master' && env.SCM_ACTION == 'pull_request' },
overrides: [
nodejsPublish: true,
applicationPackages: packages.collectEntries { key, value -> [(key): value + [
publishArgs: '--tag pr',
versionSuffixValue: { 'pr.' + env.ARTIFACT_BUILD_NUMBER }
]] }
]
]
]定义了lerna.json:
{
"npmClient": "npm",
"npmClientArgs": [
"--registry",
"https://npm.docusignhq.com"
],
"command": {
"publish": {
"ignoreChanges": [
"**/.spec.*",
"**/*.md",
"**/tsconfig*.*"
],
"registry": "https://npm.docusignhq.com"
}
},
"packages": [
"packages/tasks/*"
],
"version": "independent"
}monorepo的基础package.json有以下脚本:
"prebuild": "lerna run audit:npm --stream && lerna run code:clean --stream",
"build": "lerna run build --stream",
"clean": "lerna clean",
"code:check": "lerna run code:check --stream",
"code:clean": "lerna run code:clean --stream",
"postinstall": "lerna bootstrap",每个包构建package.json都有以下脚本:
"audit": "npx npm-run-all audit:*",
"audit:depcheck": "depcheck --specials=bin,eslint,istanbul,jest,mocha --ignore-patterns=node_modules --ignores=@types/*,eslint-*,@typescript-eslint/*,ts-node,husky",
"audit:npm": "npm audit",
"audit:npm-check-updates": "npx npm-check-updates --errorLevel 1",
"prebuild": "npm run audit:npm && npm run code:clean",
"build": "npx npm-run-all build:*",
"postbuild": "npm run audit:depcheck",
"build:only": "tsc",
"code:check": "gts lint",
"code:clean": "gts clean",每个构建都会对依赖项进行审计,如果它失败了,则执行审计升级、新安装和全新的本地构建。
这确保了如果依赖关系在monorepo提交给GitHub之前失败,那么构建就会在本地失败,并且它期望Jenkins构建。
https://stackoverflow.com/questions/66823679
复制相似问题