如何为CircleCI特定工作流修改YAML自定义参数isFeatureBranch
如何在CircleCI特定工作流触发时设置自定义参数值
我有两个CircleCI工作流feature_branch和nightly,已定义全局自定义参数isFeatureBranch(默认值为false),需求是当feature_branch工作流触发时,将isFeatureBranch设为true。
原配置文件
version: 2.1 orbs: gcp-cli: circleci/gcp-cli@3.0.1 parameters: isFeatureBranch: type: boolean default: false jobs: run_browserstack: docker: - image: cypress/base:16.14.2-slim steps: - checkout - run: name: Install curl command: apt-get update && apt-get install -y curl workflows: feature_branch: jobs: - run_browserstack: context: - automation filters: branches: ignore: - master nightly: jobs: - run_browserstack: context: - automation
你之前尝试的错误点
直接在工作流的jobs块后定义parameters不符合CircleCI的配置规范,工作流的参数定义需与jobs同级,且无法直接覆盖全局参数。
正确实现方式
方式一:调用Job时显式指定参数值(适用于单Job使用参数的场景)
保留全局参数作为默认值,在feature_branch工作流调用Job时,直接传入isFeatureBranch: true:
version: 2.1 orbs: gcp-cli: circleci/gcp-cli@3.0.1 parameters: isFeatureBranch: type: boolean default: false jobs: run_browserstack: # Job内定义参数,默认继承全局参数值 parameters: isFeatureBranch: type: boolean default: << pipeline.parameters.isFeatureBranch >> docker: - image: cypress/base:16.14.2-slim steps: - checkout - run: name: Install curl command: apt-get update && apt-get install -y curl # 示例:在Job中使用该参数 - run: name: 打印分支类型标识 command: echo "是否为特性分支: << parameters.isFeatureBranch >>" workflows: feature_branch: jobs: - run_browserstack: context: - automation isFeatureBranch: true # 显式设置为true filters: branches: ignore: - master nightly: jobs: - run_browserstack: context: - automation # 不指定则使用全局默认的false
方式二:通过工作流参数统一控制(适用于多Job共享参数的场景)
为feature_branch工作流定义专属参数,默认设为true,再传递给Job:
version: 2.1 orbs: gcp-cli: circleci/gcp-cli@3.0.1 parameters: isFeatureBranch: type: boolean default: false jobs: run_browserstack: parameters: isFeatureBranch: type: boolean default: << pipeline.parameters.isFeatureBranch >> docker: - image: cypress/base:16.14.2-slim steps: - checkout - run: name: Install curl command: apt-get update && apt-get install -y curl - run: name: 打印分支类型标识 command: echo "是否为特性分支: << parameters.isFeatureBranch >>" workflows: feature_branch: # 定义工作流级参数,默认设为true parameters: isFeatureBranch: type: boolean default: true jobs: - run_browserstack: context: - automation isFeatureBranch: << workflow.parameters.isFeatureBranch >> filters: branches: ignore: - master nightly: jobs: - run_browserstack: context: - automation
关键说明
- CircleCI全局参数在配置解析阶段确定,无法在工作流触发后动态修改,需通过调用Job时传递参数值实现不同工作流的参数区分。
- 如果Job需要使用该参数,必须在Job的
parameters块中定义,并通过<< parameters.isFeatureBranch >>引用。
内容的提问来源于stack exchange,提问作者Eduard Kvasenko
相关产品推荐
相关产品推荐

