Azure devops AzureDevOp使用脚本将信息从一个阶段传递到另一个阶段

Azure devops AzureDevOp使用脚本将信息从一个阶段传递到另一个阶段,azure-devops,azure-pipelines-release-pipeline,Azure Devops,Azure Pipelines Release Pipeline,我将管道定义为两个步骤: 一个是从两个独立的工件中构建一个组合舵图 将此图表部署到群集的两个 这两个阶段都首先加载一个secret,然后运行bash脚本来完成这项工作,如下图所示 我现在的挑战是,从构建阶段向部署阶段提交掌舵图名称及其版本。以便第2步能够获取正确的图表 我怎样才能做到这一点 试用版1:使用##vso[task.setvariable-在脚本中不起作用 echo "##vso[task.setvariable variable=HELM_CHART_NAME]$HELM_C

我将管道定义为两个步骤:

  • 一个是从两个独立的工件中构建一个组合舵图
  • 将此图表部署到群集的两个
这两个阶段都首先加载一个secret,然后运行bash脚本来完成这项工作,如下图所示

我现在的挑战是,从构建阶段向部署阶段提交掌舵图名称及其版本。以便第2步能够获取正确的图表

我怎样才能做到这一点


试用版1:使用
##vso[task.setvariable
-在脚本中不起作用

echo "##vso[task.setvariable variable=HELM_CHART_NAME]$HELM_CHART_NAME"
echo "##vso[task.setvariable variable=HELM_CHART_VERSION]$HELM_CHART_VERSION"
使用##vso[task.setvariable-在脚本中不起作用

echo "##vso[task.setvariable variable=HELM_CHART_NAME]$HELM_CHART_NAME"
echo "##vso[task.setvariable variable=HELM_CHART_VERSION]$HELM_CHART_VERSION"
这是由使用不同代理的不同阶段造成的,而
##vso[task.setvariable
设置的动态变量只是一个代理范围内的变量。它的生命周期与代理相同,因此一旦一个代理作业完成,它就会消失

对于可以帮助您实现将变量从构建阶段传递到部署阶段的解决方案,您最好将这些变量存储在一个存储中。例如,将其与任务一起存储在Azure Key vault中,或者

另一种方法是使用powershell脚本将其添加为发布变量:

PUT https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/releases/{releaseId}?api-version=5.0

然后,在下一个阶段中,它可以访问并从发布变量中获取变量。

尝试与本教程共享变量:各个阶段应该相互独立。为什么需要将其作为两个阶段来执行?嗨,现在情况如何?以下两种方法是否有助于实现跨阶段传递变量?@MerlinLiang MSFT I恢复到从头开始建造一切,所以我避免通过data@lony好的,但这似乎需要更长的时间。如果方便的话,您可以将您的解决方案转换为答案,然后接受它:-)因此Azure DevOps内部没有机制?@lony直到现在,没有。因为最初设计时,代理作业应该彼此独立。这是也是Daniel在评论中提到的。我们提供存储作为解决方案,让用户可以实现一些特殊情况,例如第二个代理作业需要使用从前一个代理作业生成的一个变量。将两个工件组合成新的工件(又称helm图表)是否不典型然后将其部署到不同的阶段?我如何才能正确地执行此操作?@lony是的,通常是这样。大多数情况下,我们在变量选项卡中预定义这些变量,然后在适当的位置使用它们。但也有局限性。事实上,您的步骤没有任何问题,只需替换bash脚本,就像我在回答中提到的方法:添加variable可插入azure key vault或发布变量。到目前为止,受独立代理作业设计的限制,它无法直接实现pass变量。@lony我们将其设计为独立的,只是确保每个部署环境都清楚地相互影响。但这还有另一个缺点,即您面临的。要实现新变量共享,必须使用一个第三方存储,所有环境都可以访问该存储。