我对Azure中的ADO管道非常陌生。我有一个情况,我有一个管道运行的构建ID,它创建了一个工件。我需要从另一个管道下载这个艺术品。为了使用DownloadPipelineArtifact@2
,你必须提供pipeline
和buildId
。the docs
在我的例子中,我只有buildId
,我想我可以通过az
命令查找管道,如下所示:
- task: AzureCLI@2
displayName: lookup pipeline ID
inputs:
azureSubscription: $(ServicePrincipal)
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
pipelineId=$(az pipelines runs show --id ${{ parameters.buildId }} --query "definition.id")
echo build ${{ parameters.buildId }} belongs to pipeline $pipelineId
echo "##vso[task.setvariable variable=pipelineId]$pipelineId"
env:
AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)
这一切都像预期的那样工作,但是当我从本地机器上运行相同的az
命令时,它在不到1秒内返回.当它在我的管道中运行时,它需要接近1分钟。
我做错了什么(如果有的话),我可以做些什么来使这个命令更快地发生?
更新1
基于jessehouwing的回答,我更新了我的步骤如下(我在Windows托管的代理上,而不是自托管的):
parameters:
buildId: ''
steps:
- bash: |
pipelineId=$(az pipelines runs show --id $BUILD_ID --query "definition.id")
echo build $BUILD_ID belongs to pipeline $pipelineId
echo "##vso[task.setvariable variable=pipelineId]$pipelineId"
displayName: lookup pipeline ID
env:
AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)
BUILD_ID: ${{ parameters.buildId }}
它实际上跑得更慢,
因此,虽然使用bash仍然可以获得我需要的数据,但它并没有加快任何速度。
更新2
所以,我按照你的建议更新了我的lookup-pipeline
步骤,但是它有一个错字.
令我惊讶的是,下载步骤没有失败。它实际上下载了正确的藏物我测试了一个旧版本的重新部署,只是为了确保它没有抓取“最新”版本。当然,从我所能告诉的来看.因此,我完全消除了查找步骤,整个管道按预期工作。
另一个悲惨的案件过时的MS文档
1条答案
按热度按时间kyvafyod1#
当前托管的runner映像中存在一个错误,导致
az cli
在第一次调用时发现所有已安装的模块和扩展,因为这些数据在配置过程中丢失。这个枚举大约需要50秒。更新:一些拉请求正在向公共跑步者发送,绿色的已经部署。
通过这些更改,首次呼叫性能现在不到15秒,而不是Windows上的60秒或更长时间。
我有captured all of my findings from the last week looking into this issue in an extensive blog article。