You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于NX Monorepo下Azure流水线条件式触发项目发布的问询

实现NX Monorepo项目独立发布流水线(仅变更触发)

核心思路

基于NX的affected能力精准识别变更项目,结合CI平台的目录触发规则,为每个项目配置独立流水线,确保只有项目自身或其依赖的内部代码变更时,才执行发布流程。

具体实现步骤

1. 用NX识别变更项目

在CI环境中,通过nx affected命令获取纯文本格式的变更项目列表,这是判断是否执行发布的核心依据:

CHANGED_PROJECTS=$(nx affected:list --type=project --plain)

该命令会输出所有因自身代码变更、依赖库变更而需要重新构建/发布的项目。

2. 为单个项目配置独立流水线

针对每个项目,在CI配置中设置触发规则,监听项目源码目录及依赖的内部库目录(避免漏触发依赖变更场景)。以下是主流CI平台的示例:

GitHub Actions(项目流水线配置)
name: Publish my-project
on:
  push:
    paths:
      - 'packages/my-project/**'       # 项目自身源码目录
      - 'libs/shared-utils/**'         # 项目依赖的内部库目录

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
          registry-url: 'https://registry.npmjs.org/'
      - run: npm install
      - run: nx build my-project
      # 二次校验项目是否在变更列表,再执行发布
      - run: |
          CHANGED_PROJECTS=$(nx affected:list --type=project --plain)
          if echo "$CHANGED_PROJECTS" | grep -q "^my-project$"; then
            npm publish dist/packages/my-project
          fi
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
GitLab CI(项目流水线配置)
publish-my-project:
  stage: publish
  only:
    changes:
      - packages/my-project/**
      - libs/shared-utils/**
  script:
    - npm install
    - nx build my-project
    - |
      CHANGED_PROJECTS=$(nx affected:list --type=project --plain)
      if echo "$CHANGED_PROJECTS" | grep -q "^my-project$"; then
        npm publish dist/packages/my-project
      fi
  tags:
    - nodejs

3. 版本管理优化

如果每个项目使用独立版本号,可借助NX的release工具自动更新版本:

nx release version --projects=my-project --no-interactive

执行后会自动修改项目package.json的版本号,发布时即可使用更新后的版本。

4. 关键注意事项

  • 依赖覆盖:仅监听目录可能漏判跨项目依赖变更,必须在流水线中结合nx affected结果二次校验,确保发布逻辑准确。
  • 缓存加速:在CI中缓存NX的缓存目录(如~/.nx),减少nx affected计算时间,提升流水线效率。
  • 权限隔离:每个项目的发布流水线应使用独立的发布令牌(如NPM_TOKEN),避免权限溢出风险。

内容的提问来源于stack exchange,提问作者Vince V.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 00:57:45