Azure DevOps发布管道:设置Pipeline Variable及人工校验流程实现
解决Azure DevOps发布管道变量设置与人工检查问题
脚本设置变量不生效的原因
你当前的脚本里最后一行echo $(TestVariable)显示1是正常的——Azure DevOps会在执行脚本之前就把$(TestVariable)替换成初始值1,脚本运行时的setvariable操作是在运行时生效的,要验证新值,必须在下一个任务中输出这个变量才能看到2。
另外,发布管道中默认用##vso[task.setvariable]设置的变量仅在当前作业内可见,如果要传递到后续的人工检查作业,需要将其标记为输出变量。
实现需求的完整方案
方案一:输出变量+人工检查(推荐,针对当前发布实例)
这个方案不会修改管道的默认变量值,仅针对当前发布流程传递和修改变量:
脚本任务设置输出变量
添加一个Bash脚本任务,给任务命名为SetVariableTask(后续要引用这个名称),脚本内容:# 输出初始值 echo "初始TestVariable值: $(TestVariable)" # 设置输出变量,isoutput=true标记为跨作业可见 echo "##vso[task.setvariable variable=UpdatedTestVariable;isoutput=true]2"人工检查任务获取并修改值
添加「人工干预」任务,在任务配置中:- 在「消息」里引用脚本输出的变量,让审核人看到脚本设置的值:
当前脚本设置的值为:$(SetVariableTask.UpdatedTestVariable) - 在「要收集的输入」中添加一个文本输入框,设置变量名为
FinalTestVariable,默认值设为$(SetVariableTask.UpdatedTestVariable)(让审核人直接看到脚本设置的值,方便修改)
- 在「消息」里引用脚本输出的变量,让审核人看到脚本设置的值:
后续任务使用最终值
后续的任何任务中,直接用$(FinalTestVariable)即可获取审核人确认或修改后的值。
方案二:修改管道级变量(不推荐,会改变管道默认值)
如果一定要修改你定义的TestVariable管道变量的默认值(后续所有发布都会用这个新值),可以通过Azure DevOps REST API在脚本中实现:
# 替换为你的实际信息 ORGANIZATION="你的组织名" PROJECT="你的项目名" PIPELINE_ID="你的发布管道ID" PAT="拥有管道编辑权限的个人访问令牌" # 获取当前管道定义 RESPONSE=$(curl -s -u :$PAT "https://dev.azure.com/$ORGANIZATION/$PROJECT/_apis/release/definitions/$PIPELINE_ID?api-version=7.1-preview.4") # 修改TestVariable的值为2 UPDATED_RESPONSE=$(echo $RESPONSE | jq '.variables.TestVariable.value = "2"') # 更新管道定义 curl -u :$PAT -X PUT -H "Content-Type: application/json" -d "$UPDATED_RESPONSE" "https://dev.azure.com/$ORGANIZATION/$PROJECT/_apis/release/definitions/$PIPELINE_ID?api-version=7.1-preview.4"
注意:这个操作会修改管道的默认配置,所有后续新建的发布都会使用修改后的变量值,适合需要永久更新默认值的场景,不适合仅针对当前发布修改的需求。
内容的提问来源于stack exchange,提问作者Edoardo
相关产品推荐
相关产品推荐

