为什么在管道中运行Azure CLI命令超级慢?

zrfyljdw  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(113)

我对Azure中的ADO管道非常陌生。我有一个情况,我有一个管道运行的构建ID,它创建了一个工件。我需要从另一个管道下载这个艺术品。为了使用DownloadPipelineArtifact@2,你必须提供pipelinebuildIdthe 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文档

kyvafyod

kyvafyod1#

当前托管的runner映像中存在一个错误,导致az cli在第一次调用时发现所有已安装的模块和扩展,因为这些数据在配置过程中丢失。这个枚举大约需要50秒。
更新:一些拉请求正在向公共跑步者发送,绿色的已经部署。

  • 操作/runner-images/8410 -预热az devops,安装Python的keychain包并在Windows上运行az devops预热
  • 操作/runner-images/8410 -将所有临时/缓存文件重定向到中央文件夹,在Windows预热期间运行模块。
  • 操作/runner-images/8441 -将所有临时文件重定向到中央文件夹,安装Python的keychain包并在Ubuntu预热期间运行模块。
  • Azure-Azure/Azure-Azure/27545 -修复了对命令索引的大小写敏感检查,并防止不必要的索引无效。
  • 操作/runner-images/8388 -禁用Windows存储服务。
  • 错误操作/runner-images/8431 -禁用Windows Update和Windows Update Medic服务

通过这些更改,首次呼叫性能现在不到15秒,而不是Windows上的60秒或更长时间。
我有captured all of my findings from the last week looking into this issue in an extensive blog article

相关问题