You need to enable JavaScript to run this app. 存在内部npm包依赖的Monorepo如何修改Jenkinsfile解决发布构建失败问题
优惠活动
大模型
产品
解决方案
定价
更多

存在内部npm包依赖的Monorepo如何修改Jenkinsfile解决发布构建失败问题

多包Monorepo本地Artifactory npm发布的Jenkinsfile调整方案

核心问题定位

  • 目录路径配置与实际仓库结构不匹配:当前仓库packages目录下直接存放各npm包目录,不存在packages/tasks中间层级,原配置的包路径全部无效,构建流程无法定位到对应包的工作目录
  • 包执行顺序不符合内部依赖规则:@ds/cy-uncaught-exceptions-task依赖@ds/cy-log-task,原配置的包列表优先发布上层依赖包、最后发布底层被依赖包,导致发布环节无法从本地Artifactory拉取到匹配版本的内部依赖,触发发布报错
  • 版本规则场景配置不对齐:master分支PR场景下的版本号处理逻辑未和主干提交场景对齐,易出现版本校验冲突

调整后的完整Jenkinsfile配置

// 严格按照依赖优先级排序:无内部依赖的底层包先执行发布,依赖其他内部包的上层包后执行
def packages = [
  '@ds/cy-log-task': [
    projectDir: 'packages/cy-log-task'
  ],
  '@ds/cy-ds-thycotic-task': [
    projectDir: 'packages/cy-ds-thycotic-task'
  ],
  '@ds/cy-browser-launch-task': [
    projectDir: 'packages/cy-browser-launch-task'
  ],
  // 包目录落地后将路径替换为实际位置即可
  '@ds/cy-uncaught-exceptions-task': [
    projectDir: 'packages/cy-uncaught-exceptions-task'
  ]
]

def conditionals = [
  [
    condition: { env.TARGET_BRANCH == 'master' && env.SCM_ACTION == 'commit' },
    overrides: [
      nodejsPublish: true,
      pushVersionTag: true,
      // 强制串行发布,避免多包并行导致的依赖竞态
      parallelJobs: 1,
      applicationPackages: packages.collectEntries { key, value -> [(key): value + [
        bumpPatchVersion: true
      ]] }
    ]
  ],
  [
    condition: { env.TARGET_BRANCH == 'master' && env.SCM_ACTION == 'pull_request' },
    overrides: [
      nodejsPublish: true,
      parallelJobs: 1,
      applicationPackages: packages.collectEntries { key, value -> [(key): value + [
        publishArgs: '--tag pr',
        versionSuffixValue: { 'pr.' + env.ARTIFACT_BUILD_NUMBER },
        // 对齐主干版本规则,避免PR预发布版本冲突
        bumpPatchVersion: true
      ]] }
    ]
  ]
]

关键调整说明

  • 修正所有包的projectDir路径,移除不存在的tasks中间层级,完全匹配实际仓库目录结构
  • 重新排序包的发布优先级,保证@ds/cy-log-task先完成发布到本地Artifactory后,再执行依赖它的@ds/cy-uncaught-exceptions-task发布流程,从根源上解决内部依赖拉取失败的报错
  • 新增parallelJobs: 1配置,强制发布流程串行执行,杜绝多包并行发布时,依赖包尚未发布完成就被拉取的竞态问题
  • 对齐PR场景与主干提交场景的版本 bump 规则,避免预发布版本与正式版本的号段冲突,保证本地Artifactory的包版本可追溯
  • 后续新增其他包时,需同步在packages列表中追加对应配置,路径填写实际的包目录位置,同时按照内部依赖关系调整列表顺序,保证被依赖的包排在发布队列靠前位置

内容的提问来源于stack exchange,提问作者Jeff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 23:54:02