Rails应用中如何仅在Master分支调整CircleCI 2.0的Parallelism值?
针对特定分支调整CircleCI Parallelism的解决方案
当然可以针对特定分支调整Parallelism啦!不过你原来的配置写法存在问题:CircleCI的config.yml是YAML格式的配置文件,并非shell脚本,parallelism属于job的顶层配置属性,不能用shell的条件判断语法直接嵌套在job内部,这就是导致运行错误的原因。
下面给你两种可行的解决方案:
方案1:创建分支专属Job(适用于CircleCI 2.0及以上)
这种方式会为master分支和其他分支分别定义独立的job,各自设置对应的parallelism值,再通过workflows的分支过滤规则来执行对应的job:
version: 2 jobs: # 专用于master分支的构建job,并行数设为2 build-master: parallelism: 2 # 这里填写你原build job的所有基础配置(比如docker镜像、执行步骤等) docker: - image: circleci/ruby:2.7.1 # 替换为你的项目镜像 steps: - checkout # 这里添加你的构建、测试等步骤,比如bundle install、rspec等 # 用于非master分支的构建job,并行数设为8 build-other: parallelism: 8 docker: - image: circleci/ruby:2.7.1 # 与master分支的镜像保持一致 steps: - checkout # 同样添加你的构建、测试等步骤(和build-master保持一致) workflows: version: 2 build-workflow: jobs: - build-master: filters: branches: only: master # 仅在master分支触发此job - build-other: filters: branches: ignore: master # 在除master外的所有分支触发此job
方案2:使用参数化Job(适用于CircleCI 2.1及以上)
如果不想重复编写job的步骤代码,可以使用CircleCI 2.1引入的参数化job功能,通过传入不同参数来复用同一个job模板:
version: 2.1 # 必须升级到2.1版本才能使用参数化job jobs: build: # 定义参数:接收一个integer类型的parallel值 parameters: parallel: type: integer # 使用传入的参数设置并行数 parallelism: << parameters.parallel >> docker: - image: circleci/ruby:2.7.1 # 替换为你的项目镜像 steps: - checkout # 这里添加你的构建、测试等步骤,只需写一次即可 workflows: version: 2 build-workflow: jobs: - build: name: build-master # 给job起个清晰的名字 parallel: 2 # 给master分支传入并行数2 filters: branches: only: master - build: name: build-other parallel: 8 # 给其他分支传入并行数8 filters: branches: ignore: master
注意事项
- 如果你的项目还在使用CircleCI 2.0版本,只能选择方案1,因为参数化job是2.1版本才支持的特性。
- 确保workflows中的分支过滤规则
only和ignore设置准确,避免触发错误的job。
内容的提问来源于stack exchange,提问作者Kouta Osabe
相关产品推荐
相关产品推荐

