如何在CircleCI网页端用参数触发流水线及解决配置问题
针对CircleCI手动触发带参数流水线的问题解答
问题1:配置验证失败,是否必须设置参数默认值?
是的,CircleCI的配置文件会做静态校验,所有用到的流水线参数必须在配置文件顶部的parameters块中提前声明,并且必须设置默认值——但你可以把默认值设为符合参数类型的“空值”,比如布尔型设为false,字符串型设为""或者null,这样既满足校验要求,又能确保只有手动触发时才需要输入参数。
示例声明方式:
version: 2.1 parameters: on_demand_test_run: type: boolean default: false on_demand_cucumber_tags: type: string default: "" on_demand_test_environment: type: string default: ""
这样配置校验就能通过,手动触发流水线时可覆盖默认值,自动触发时因默认值不满足equal: [true, << pipeline.parameters.on_demand_test_run >>]的条件,这条workflow不会执行。
问题2:将用户输入参数作为环境变量传入任务是否可行?
完全可行,两种常用实现方式如下:
方式1:直接在任务中引用流水线参数
如果feature_tests是直接定义的job,可在job的environment块中直接引用流水线参数:
feature_tests: docker: - image: circleci/ruby:2.7 environment: TEST_ENVIRONMENT: << pipeline.parameters.on_demand_test_environment >> steps: - run: echo "Running tests in $TEST_ENVIRONMENT"
方式2:通过job参数传递(更灵活)
如果feature_tests是可复用的job模板,建议给job定义独立参数,触发时把流水线参数传入,提升job复用性:
# 定义可复用的feature_tests job jobs: feature_tests: parameters: test_environment: type: string default: "" tags: type: string default: "" environment: TEST_ENVIRONMENT: << parameters.test_environment >> CUCUMBER_TAGS: << parameters.tags >> steps: - run: echo "Testing in $TEST_ENVIRONMENT with tags $CUCUMBER_TAGS" # 在workflow中触发时传递参数 workflows: on_demand_test_run_on_env: when: equal: [true, << pipeline.parameters.on_demand_test_run >>] jobs: - checkout_branch - feature_tests: name: Parallel Tests test_environment: << pipeline.parameters.on_demand_test_environment >> tags: << pipeline.parameters.on_demand_cucumber_tags >> requires: - checkout_branch
内容的提问来源于stack exchange,提问作者shicky
相关产品推荐
相关产品推荐

