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

时间:2020-08-30 08:20:05

标签: azure-devops aws-powershell

我正在为.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分钟来设置。

我正在管道的不同阶段运行其中的两个任务,因此这将使总时间增加3分钟。这看起来似乎不多,但是应用程序本身很小,所以这些任务的设置实际上是管道中最耗时的部分。

据我所知,似乎管道在每次需要运行以下任务之一时都在启动通用容器,然后安装AWS Powershell工具。

这似乎非常浪费并且效率低下,所以我想知道是否可能有更好的方法来处理它,例如,在安装Powershell工具之后缓存已构建的容器,或者将现有的映像与这些工具一起使用已安装等。

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

我希望管道尽可能高效,所以让我感到困扰的是,每当我需要运行一个简单的powershell脚本时,它都会重新运行此重复安装过程。

我还应该提到我正在使用托管的Devops Agent ... 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工具,然后可能使用nuget进行安装?

我想也许我可以使用一个缓存任务来缓存安装,但是即使我可以找到工具的安装位置,仅还原文件夹似乎也无法满足要求。

1 个答案:

答案 0 :(得分:1)

使用Microsoft托管的代理,每次运行管道时,您将获得一个新鲜虚拟机。因此,该工具需要安装在每个管道中。

阶段是一个或多个作业,是可分配给同一台机器的工作单位。使用Microsoft托管的代理,每个阶段通常都使用一个单独的代理。因此,该工具将在每个阶段安装。

总而言之,Microsoft托管的代理无法缓存工具。为了每次都预安装该工具或不安装该工具,可以部署Self-hosted Windows agents,并在每台运行代理服务的计算机上安装该工具。