Azure Devops 管道:可以缓存任务容器吗?

Azure Devops Pipeline: Possible to cache task container?

我正在为 .Net Framework 应用程序设置多阶段 Azure Devops yaml 管道。

部分管道将涉及使用 AWSPowerShellModuleScript 任务在 AWS 中配置负载均衡器规则。

我的任务看起来是这样的...

        - task: AWSPowerShellModuleScript@1.7.0
          name: SetupLoadBalancerRules
          inputs:
            awsCredentials: 'My AWS Service Connection'
            regionName: 'ap-southeast-2'
            scriptType: 'filepath'
            filePath: 'pipeline-scripts/manage-aws-load-balancer-rules.ps1'

一切正常。但是,AWSPowerShellModuleScript 任务的初始化速度非常慢。 powershell 本身非常快,但任务需要大约 1.5 分钟来设置。

我在管道的不同阶段 运行执行其中 2 个任务,因此总时间增加了 3 分钟。这可能看起来不是很多,但应用程序本身非常小,因此这些任务的设置实际上是管道中最耗时的部分。

据我所知,管道似乎正在启动一个通用容器,然后安装 AWS Powershell 工具,每次它需要 运行 这些任务之一。

这看起来非常浪费和低效,所以我想知道是否有更好的方法来处理它,例如,在安装 powershell 工具后缓存构建的容器,或者使用现有的图像与工具已经安装等

我对使用 yaml 管道还很陌生,所以我不确定什么是可能的。

我希望我的管道尽可能高效,所以每次我需要 运行 一个简单的 powershell 脚本时,这都会重新 运行 重复安装过程,这让我很困扰.

我还应该提到我正在使用托管的 Devops 代理... vmImage:'windows-2019'

以防万一它有帮助。这是来自任务日志输出...

Checking install status for AWS Tools for Windows PowerShell module.
AWS Tools for Windows PowerShell module not found.
Installing AWS Tools for Windows PowerShell module to current user scope

Name                           Version          Source           Summary                                               
----                           -------          ------           -------                                               
nuget                          2.8.5.208        https://onege... NuGet provider for the OneGet meta-package manager

所以判断是没有安装AWS Tools,然后可能是用nuget安装了??

我想也许我可以使用缓存任务来缓存安装,但即使我能找到工具的安装位置,似乎也不太可能仅仅恢复文件夹就足够了。

使用 Microsoft-hosted 代理,每次 运行 一个管道,你都会得到一个 新鲜的 虚拟机。所以需要在每个管道中安装该工具。

一个阶段是一个或多个作业,它们是可分配给同一台机器的工作单元。使用Microsoft-hostedagent,一般每个stage使用一个单独的agent。所以这个工具会在每个阶段安装。

总之,Microsoft-hosted代理是不能缓存的工具。为了pre-install该工具或不每次都安装该工具,您可以部署Self-hosted Windows agents,并在每台机器上安装该工具运行宁代理服务。