如何在GitLab CI/CD中按指定分支变更目录构建对应dist文件夹
解决方案
你可以通过拆分独立构建任务 + 配置目录变更触发规则实现需求,GitLab CI 原生支持changes参数检测指定路径下的文件变更,从而决定是否执行对应任务。
最终配置示例
stages: - build # Web1 专属构建任务,仅Web1目录变更时执行 build:web1: stage: build tags: - test only: refs: - test changes: # 匹配Web1目录下所有层级的任意文件 - Web1/**/* script: - cd Web1 - npm install - npm run build - rm -rf /home/user/test/web1 # 请根据你实际的构建产物输出路径调整此处路径 - cp -r dist /home/user/test/web1 # Web2 专属构建任务,仅Web2目录变更时执行 build:web2: stage: build tags: - test only: refs: - test changes: # 匹配Web2目录下所有层级的任意文件 - Web2/**/* script: - cd Web2 - npm install - npm run build - rm -rf /home/user/test/web2 # 请根据你实际的构建产物输出路径调整此处路径 - cp -r dist /home/user/test/web2
核心配置说明
- 任务拆分:将原有的单个全局构建任务拆分为两个独立的子项目构建任务,互不干扰,同时修正了原有配置中
rm - rf、cp - r的参数空格错误,避免执行报错 - 变更触发规则:
only.changes参数指定的路径通配符,会对比当前提交与上一次提交的文件差异,只有对应目录下有文件变更时,该任务才会被触发执行,无变更的任务会自动跳过 - 兼容性说明:如果你使用的是 GitLab 12.3 及以上版本,更推荐使用
rules语法替代only,规则配置灵活性更高,示例如下:
build:web1: stage: build tags: - test rules: - if: $CI_COMMIT_BRANCH == 'test' changes: - Web1/**/* when: always script: # 与上面的web1构建脚本一致
内容的提问来源于stack exchange,提问作者lizcodecode
相关产品推荐
相关产品推荐

