如何让GitHub Action仅在指定文件夹触发运行?(单体仓库场景)
实现Monorepo中服务独立触发GitHub Actions工作流
你可以通过GitHub Actions的**路径过滤(Path Filters)**特性,让每个服务的工作流仅在对应服务目录下的文件发生变更时触发。以下是针对你的仓库结构的具体实现方案:
1. 为service1配置独立触发规则
编辑.github/workflows/service1.yaml,在on字段中添加路径过滤规则,指定仅当services/service1/下的文件变更时触发该工作流:
name: Service1 CI/CD # 触发条件:push或PR时,仅service1目录下的文件变更才运行 on: push: paths: - 'services/service1/**' pull_request: paths: - 'services/service1/**' jobs: build-deploy-service1: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 # 这里添加你的service1构建、测试、部署步骤 - name: Build Service1 run: | cd services/service1 # 替换成你的实际构建命令,比如npm install && npm run build
2. 为service2配置独立触发规则
同理,编辑.github/workflows/service2.yaml,指定仅services/service2/路径下的变更触发:
name: Service2 CI/CD on: push: paths: - 'services/service2/**' pull_request: paths: - 'services/service2/**' jobs: build-deploy-service2: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build Service2 run: | cd services/service2 # 替换成你的实际构建命令
关键说明
**是通配符,表示匹配指定目录下的所有文件和子目录- 如果需要排除某些文件,可以用
!前缀,比如- '!services/service1/docs/**'(表示除了docs目录外的变更才触发) - 路径匹配是基于仓库根目录的相对路径,要和你的实际目录结构完全对应
- 如果你需要在合并到主分支时才触发部署,可以在
on.push.branches里再指定分支,比如branches: [main],结合路径过滤实现更精确的触发逻辑
内容的提问来源于stack exchange,提问作者prismo
相关产品推荐
相关产品推荐

