Azure DevOps中如何不使用变量组传递CI变量到CD流水线
跨CI/CD流水线访问自定义计算变量问题解答
所述setvariable命令的跨流水线访问有效性
该命令设置的变量无法被独立的CD流水线直接访问。
带isOutput=true参数的task.setvariable日志命令,作用域仅覆盖当前CI流水线内部:
- 仅当前CI流水线内、声明了依赖关系的下游作业,可以通过
依赖作业名.任务名.变量名的格式引用该输出变量 - CI流水线运行结束后,该变量不会自动持久化存储,未做额外配置的CD流水线无法直接读取到该值。
不使用变量组的可行实现方案
- 借助构建产物传递变量值
CI流水线计算得到目标值后,将变量值写入纯文本文件(例如写入deploy_vars.env,内容格式为CALC=<你的计算值>),随后将该文件作为CI的构建产物发布。CD流水线启动后,第一步拉取对应CI运行关联的构建产物,读取文件内的变量值,再通过task.setvariable命令注入当前CD流水线的变量上下文即可正常使用。 - 映射流水线资源的输出变量
如果CD流水线通过管道资源的方式关联CI流水线(即配置CI为CD的触发源),可以直接在CD的资源配置中映射CI侧的输出变量,不需要额外存储操作。注意CI侧执行setvariable的任务必须配置name属性,否则无法被跨流水线引用。
CI侧任务示例:
CD侧变量映射示例:- bash: | echo "##vso[task.setvariable variable=CALC;isOutput=true]${VALUE}" name: calc_value_task # 必须给任务配置名称
配置完成后,CD流水线全流程可直接通过resources: pipelines: - pipeline: CI_Resource # CI资源的自定义别名 source: 你的CI流水线名称 trigger: true variables: - name: CALC value: $[ resources.pipelines.CI_Resource.pipeline.run.outputs['calc_value_task.CALC'] ]$(CALC)访问CI侧计算得到的值。 - 给CI运行实例打自定义标签传值
CI侧计算得到变量值后,可调用流水线接口给当前CI运行实例添加自定义标签/备注字段,把CALC的值存在标签中。CD流水线触发时默认会携带关联的CI运行ID,通过ID读取对应CI实例的标签即可拿到变量值。
内容的提问来源于stack exchange,提问作者Hanamant
相关产品推荐
相关产品推荐

