首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jenkinsfile:带有包依赖项的monorepo

Jenkinsfile:带有包依赖项的monorepo
EN

Stack Overflow用户
提问于 2021-03-26 20:08:45
回答 1查看 719关注 0票数 0

我正在创建一个单峰,它构建并发布多个npm包到本地Artifactory。在这个monorepo中,有几个npm包与另一个npm包创建有依赖关系。

这个monorepo的布局如下所示,并且@ds/cy-uncaught-exceptions-task npm包依赖于npm包 @ds/cy-log-task.

代码语言:javascript
复制
├── Jenkinsfile
├── packages
│   ├── cy-browser-launch-task
│   ├── cy-ds-thycotic-task
│   └── cy-log-task
└── renovate.json

Jenkins管道失败:continuous-integration/jenkins/pr-merge -此提交无法构建

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

Jenkins发布错误:

这是执行此发布的Jenkinsfile

代码语言:javascript
复制
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 执行此构建时,需要做什么?

谢谢,谢谢你的反馈。

EN

回答 1

Stack Overflow用户

发布于 2021-04-07 23:06:40

我用勒纳解析了它

安装这些npm软件包:

Jenkinsfile保持不变:

代码语言:javascript
复制
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

代码语言:javascript
复制
{
  "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有以下脚本:

代码语言:javascript
复制
    "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都有以下脚本:

代码语言:javascript
复制
    "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构建。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66823679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档